UNPKG

@lautarobock/file-input

Version:
1 lines 23.2 kB
{"version":3,"file":"lautarobock-file-input.mjs","sources":["../../../../projects/file-input/src/lib/file-input.component.ts","../../../../projects/file-input/src/lib/file-input.component.html","../../../../projects/file-input/src/lib/file-input.module.ts","../../../../projects/file-input/src/lib/file-input-helper.ts","../../../../projects/file-input/src/lib/validators/max-size.validator.ts","../../../../projects/file-input/src/lib/validators/accept.validator.ts","../../../../projects/file-input/src/public-api.ts","../../../../projects/file-input/src/lautarobock-file-input.ts"],"sourcesContent":["import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { ChangeDetectorRef, Component, ContentChild, Directive, DoCheck, ElementRef, forwardRef, Input, OnDestroy, Optional, Self, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';\r\nimport { CanUpdateErrorState, ErrorStateMatcher, mixinErrorState, ThemePalette } from '@angular/material/core';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { Subject } from 'rxjs';\r\nimport { FileOrArrayFile } from './file-input-type';\r\n\r\nlet nextUniqueId = 0;\r\n\r\nconst _NgxMatInputMixinBase = mixinErrorState(\r\n class {\r\n\r\n readonly stateChanges = new Subject<void>();\r\n\r\n constructor(\r\n public _defaultErrorStateMatcher: ErrorStateMatcher,\r\n public _parentForm: NgForm,\r\n public _parentFormGroup: FormGroupDirective,\r\n /** @docs-private */\r\n public ngControl: NgControl,\r\n ) { }\r\n },\r\n);\r\n\r\n@Directive({\r\n selector: '[ngxMatFileInputIcon]'\r\n})\r\nexport class NgxMatFileInputIcon { }\r\n\r\n@Component({\r\n selector: 'ngx-mat-file-input',\r\n templateUrl: 'file-input.component.html',\r\n styleUrls: ['file-input.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n 'class': 'ngx-mat-file-input'\r\n },\r\n providers: [\r\n { provide: MatFormFieldControl, useExisting: forwardRef(() => NgxMatFileInputComponent) }\r\n ],\r\n exportAs: 'ngx-mat-file-input'\r\n})\r\nexport class NgxMatFileInputComponent extends _NgxMatInputMixinBase implements MatFormFieldControl<FileOrArrayFile>,\r\n OnDestroy, DoCheck, CanUpdateErrorState, ControlValueAccessor {\r\n\r\n @ViewChild('inputFile', { static: true }) private _inputFileRef: ElementRef;\r\n @ViewChild('inputValue', { static: true }) private _inputValueRef: ElementRef;\r\n\r\n /** Custom icon set by the consumer. */\r\n @ContentChild(NgxMatFileInputIcon) _customIcon: NgxMatFileInputIcon;\r\n\r\n @Input() color: ThemePalette = 'primary';\r\n\r\n public fileNames: string = null;\r\n\r\n protected _uid = `ngx-mat-fileinput-${nextUniqueId++}`;\r\n protected _previousNativeValue: any;\r\n _ariaDescribedby: string;\r\n\r\n readonly stateChanges: Subject<void> = new Subject<void>();\r\n focused: boolean = false;\r\n errorState: boolean;\r\n controlType: string = 'ngx-mat-file-input';\r\n autofilled: boolean = false;\r\n\r\n /** Function when touched */\r\n _onTouched = () => { };\r\n\r\n /** Function when changed */\r\n _onChange: (value: FileOrArrayFile) => void = () => { };\r\n\r\n @Input()\r\n get disabled(): boolean {\r\n if (this.ngControl && this.ngControl.disabled !== null) {\r\n return this.ngControl.disabled;\r\n }\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n if (this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n protected _disabled = false;\r\n\r\n @Input()\r\n get id(): string { return this._id; }\r\n set id(value: string) { this._id = value || this._uid; }\r\n protected _id: string;\r\n\r\n @Input()\r\n get multiple(): boolean { return this._multiple; }\r\n set multiple(value: boolean) {\r\n this._multiple = coerceBooleanProperty(value);\r\n }\r\n protected _multiple = false;\r\n\r\n @Input() placeholder: string = 'Choose a file';\r\n @Input() separator: string = ',';\r\n\r\n @Input()\r\n get required(): boolean { return this._required; }\r\n set required(value: boolean) { this._required = coerceBooleanProperty(value); }\r\n protected _required = false;\r\n\r\n @Input() errorStateMatcher: ErrorStateMatcher;\r\n\r\n @Input()\r\n get value(): FileOrArrayFile { return this._value; }\r\n set value(value: FileOrArrayFile) {\r\n this._value = value;\r\n }\r\n protected _value: FileOrArrayFile;\r\n\r\n @Input()\r\n get readonly(): boolean { return this._readonly; }\r\n set readonly(value: boolean) { this._readonly = coerceBooleanProperty(value); }\r\n private _readonly = true;\r\n\r\n /**\r\n * Limiting accepted file types\r\n * Example: accept=\"image/png, image/jpeg\" or accept=\".png, .jpg, .jpeg\" — Accept PNG or JPEG files.\r\n */\r\n @Input()\r\n get accept(): string { return this._accept; }\r\n set accept(value: string) {\r\n this._accept = value;\r\n }\r\n private _accept: string;\r\n\r\n constructor(protected _elementRef: ElementRef<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>,\r\n protected _platform: Platform,\r\n private _cd: ChangeDetectorRef,\r\n @Optional() @Self() public ngControl: NgControl,\r\n @Optional() _parentForm: NgForm,\r\n @Optional() _parentFormGroup: FormGroupDirective,\r\n _defaultErrorStateMatcher: ErrorStateMatcher) {\r\n super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\r\n\r\n this.id = this.id;\r\n\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n\r\n }\r\n\r\n\r\n ngOnChanges() {\r\n this.stateChanges.next();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.stateChanges.complete();\r\n }\r\n\r\n ngDoCheck() {\r\n if (this.ngControl) {\r\n this.updateErrorState();\r\n }\r\n }\r\n\r\n // Implemented as part of ControlValueAccessor.\r\n writeValue(value: FileOrArrayFile): void {\r\n this._updateInputValue(value);\r\n }\r\n\r\n // Implemented as part of ControlValueAccessor.\r\n registerOnChange(fn: (value: any) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n // Implemented as part of ControlValueAccessor.\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n // Implemented as part of ControlValueAccessor.\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.stateChanges.next();\r\n }\r\n\r\n /** Focuses the input. */\r\n focus(options?: FocusOptions): void {\r\n this._inputValueRef.nativeElement.focus(options);\r\n }\r\n\r\n _focusChanged(isFocused: boolean) {\r\n if (isFocused !== this.focused && (!this.readonly || !isFocused)) {\r\n this.focused = isFocused;\r\n this.stateChanges.next();\r\n }\r\n\r\n }\r\n\r\n /** Mark the field as touched */\r\n _markAsTouched() {\r\n this._onTouched();\r\n this._cd.markForCheck();\r\n this.stateChanges.next();\r\n }\r\n\r\n protected _isBadInput() {\r\n let validity = (this._inputValueRef.nativeElement as HTMLInputElement).validity;\r\n return validity && validity.badInput;\r\n }\r\n\r\n get empty(): boolean {\r\n return !this._inputValueRef.nativeElement.value && !this._isBadInput() &&\r\n !this.autofilled;\r\n }\r\n\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n setDescribedByIds(ids: string[]) {\r\n this._ariaDescribedby = ids.join(' ');\r\n }\r\n\r\n openFilePicker(event?: MouseEvent) {\r\n this._inputFileRef.nativeElement.click();\r\n if (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n this._markAsTouched();\r\n }\r\n\r\n handleFiles(filelist: FileList) {\r\n if (filelist.length > 0) {\r\n const files: Array<File> = new Array();\r\n for (let i = 0; i < filelist.length; i++) {\r\n files.push(filelist.item(i));\r\n }\r\n this._updateInputValue(files);\r\n this._resetInputFile();\r\n this._onChange(this.multiple ? files : files[0]);\r\n }\r\n }\r\n\r\n /** Handles a click on the control's container. */\r\n onContainerClick(event: MouseEvent) { };\r\n\r\n private _resetInputFile() {\r\n this._inputFileRef.nativeElement.value = \"\";\r\n }\r\n\r\n private _updateInputValue(files: FileOrArrayFile) {\r\n let text = null;\r\n if (files) {\r\n if (Array.isArray(files)) {\r\n text = this._multiple\r\n ? files.map(x => x.name).join(this.separator)\r\n : files[0].name;\r\n } else {\r\n text = files.name != null ? files.name : null;\r\n }\r\n }\r\n\r\n this._inputValueRef.nativeElement.value = text;\r\n }\r\n\r\n}\r\n","<input #inputValue autocomplete=\"off\"\r\n class=\"mat-mdc-input-element mat-mdc-form-field-input-control mdc-text-field__input\" [attr.id]='id'\r\n [attr.placeholder]='placeholder' [disabled]='disabled' [required]='required' [attr.readonly]='readonly || null'\r\n [attr.aria-describedby]='_ariaDescribedby || null' [attr.aria-invalid]='errorState'\r\n [attr.aria-required]='required.toString()'>\r\n<div class=\"mat-mdc-form-field-suffix\">\r\n <button matSuffix mat-icon-button [color]=\"color\" class=\"button-browse\" (click)=\"openFilePicker($event)\" type=\"button\"\r\n [disabled]=\"disabled\">\r\n <mat-icon *ngIf=\"!_customIcon\" class=\"ngx-mat-file-input--default-icon\">attach_file</mat-icon>\r\n <ng-content select=\"[ngxMatFileInputIcon]\"></ng-content>\r\n </button>\r\n</div>\r\n<input type=\"file\" #inputFile (change)=\"handleFiles($event.target.files)\" class=\"input-file\" [multiple]=\"multiple\"\r\n [accept]=\"accept\">","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { NgxMatFileInputComponent, NgxMatFileInputIcon } from './file-input.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n NgxMatFileInputComponent,\r\n NgxMatFileInputIcon\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatInputModule\r\n ],\r\n exports: [\r\n NgxMatFileInputComponent,\r\n NgxMatFileInputIcon\r\n ]\r\n})\r\nexport class NgxMatFileInputModule { }\r\n","export function calculFileSize(number: number): string {\r\n if (number < 1024) {\r\n return number + 'bytes';\r\n } else if (number >= 1024 && number < 1048576) {\r\n return (number / 1024).toFixed(1) + 'KB';\r\n } else if (number >= 1048576) {\r\n return (number / 1048576).toFixed(1) + 'MB';\r\n }\r\n}","import { AbstractControl, ValidatorFn, ValidationErrors } from '@angular/forms';\r\n\r\n/**\r\n * Validator for size of file\r\n * @param max Max of size of file (in bytes)\r\n */\r\nexport function MaxSizeValidator(max: number): ValidatorFn {\r\n return (ctrl: AbstractControl): ValidationErrors | null => {\r\n max = Number(max);\r\n if (isNaN(max)) {\r\n throw 'MaxSizeValidator: max of size of file is invalid';\r\n }\r\n if (!ctrl.value) return null;\r\n let files: File[] = ctrl.value;\r\n if (!Array.isArray(ctrl.value)) {\r\n files = [ctrl.value];\r\n }\r\n if(!files.length) return null;\r\n const add = (a: any, b: any): number => a + b;\r\n const sumSize = files.map(x => x.size).reduce(add);\r\n if (sumSize > max) {\r\n return {\r\n maxSize: true\r\n };\r\n }\r\n return null;\r\n }\r\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\n/**\r\n * Validator for input file accept\r\n * @param accept Allowable type of file\r\n */\r\nexport function AcceptValidator(accept: string): ValidatorFn {\r\n return (ctrl: AbstractControl): ValidationErrors | null => {\r\n if (!accept) {\r\n throw ('AcceptValidator: allowable type of file can not be empty');\r\n }\r\n\r\n if (ctrl.value == null) return null;\r\n\r\n if (!accept.includes(ctrl.value.type)) {\r\n return {\r\n accept: true\r\n };\r\n }\r\n\r\n return null;\r\n\r\n }\r\n}","/*\r\n * Public API Surface of file-input\r\n */\r\n\r\nexport * from './lib/file-input.component';\r\nexport * from './lib/file-input.module';\r\nexport * from './lib/file-input-type';\r\nexport * from './lib/file-input-helper';\r\nexport * from './lib/validators';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}