Skip to content

Commit 62d5586

Browse files
committed
🎉 feat: migrate to standalone components
1 parent b08b2e2 commit 62d5586

14 files changed

+81
-92
lines changed

projects/app/src/app/app.component.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,28 @@
1+
import { CommonModule } from '@angular/common';
12
import { Component } from '@angular/core';
2-
import { FormControl } from '@angular/forms';
3+
import { FormControl, ReactiveFormsModule } from '@angular/forms';
4+
import { MatChipRow } from '@angular/material/chips';
5+
import { MatError, MatFormField, MatLabel } from '@angular/material/form-field';
6+
import { MatIcon } from '@angular/material/icon';
7+
import { MatInput } from '@angular/material/input';
8+
import { FileInputDirective } from '@ngx-dropzone/cdk';
9+
import { MatDropzone } from '@ngx-dropzone/material';
310

411
@Component({
512
selector: 'app-root',
13+
standalone: true,
14+
imports: [
15+
CommonModule,
16+
ReactiveFormsModule,
17+
MatFormField,
18+
MatLabel,
19+
MatError,
20+
MatInput,
21+
MatChipRow,
22+
MatIcon,
23+
MatDropzone,
24+
FileInputDirective,
25+
],
626
template: `<div class="app-container">
727
<mat-form-field appearance="outline">
828
<mat-label>Drop only .png files!</mat-label>

projects/app/src/app/app.module.ts

Lines changed: 0 additions & 29 deletions
This file was deleted.

projects/app/src/main.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
1+
import { bootstrapApplication } from '@angular/platform-browser';
2+
import { provideAnimations } from '@angular/platform-browser/animations';
3+
import { AppComponent } from './app/app.component';
24

3-
import { AppModule } from './app/app.module';
4-
5-
6-
platformBrowserDynamic().bootstrapModule(AppModule)
7-
.catch(err => console.error(err));
5+
bootstrapApplication(AppComponent, {
6+
providers: [provideAnimations()],
7+
}).catch((e) => console.error(e));

projects/cdk/src/lib/cdk.module.ts

Lines changed: 0 additions & 9 deletions
This file was deleted.

projects/cdk/src/lib/dropzone/dropzone.component.spec.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
33
import { FormControl, ReactiveFormsModule } from '@angular/forms';
44
import { By } from '@angular/platform-browser';
55
import { FileInputDirective, FileInputValidators, FileInputValue } from '../file-input';
6-
import { DropzoneCdkModule } from './../cdk.module';
76
import { DropzoneComponent } from './dropzone.component';
87

98
interface Selectors<T> {
@@ -17,8 +16,7 @@ interface Selectors<T> {
1716
describe('DropzoneComponent', () => {
1817
function configureDropzoneTestingModule<T>(testComponent: Type<T>): Selectors<T> {
1918
const fixture = TestBed.configureTestingModule({
20-
imports: [ReactiveFormsModule, DropzoneCdkModule],
21-
declarations: [testComponent],
19+
imports: [testComponent],
2220
}).createComponent(testComponent);
2321

2422
const element = fixture.debugElement.query(By.directive(DropzoneComponent));
@@ -148,6 +146,8 @@ describe('DropzoneComponent', () => {
148146

149147
@Component({
150148
selector: 'basic-dropzone',
149+
standalone: true,
150+
imports: [DropzoneComponent, FileInputDirective],
151151
template: `
152152
<ngx-dropzone>
153153
<input type="file" fileInput />
@@ -158,6 +158,8 @@ class DropzoneBasic {}
158158

159159
@Component({
160160
selector: 'form-control-dropzone',
161+
standalone: true,
162+
imports: [ReactiveFormsModule, DropzoneComponent, FileInputDirective],
161163
template: `
162164
<ngx-dropzone>
163165
<input type="file" fileInput [formControl]="fileCtrl" multiple />

projects/cdk/src/lib/dropzone/dropzone.component.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ import { DropzoneService } from './dropzone.service';
2020
@Component({
2121
selector: 'ngx-dropzone',
2222
exportAs: 'dropzone',
23+
standalone: true,
24+
imports: [FileInputDirective],
25+
providers: [DropzoneService],
2326
template: `<ng-content></ng-content>`,
2427
host: {
2528
tabindex: '0',

projects/cdk/src/lib/file-input/accept.service.spec.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ import { AcceptService } from './accept.service';
44
describe('AcceptService', () => {
55
let service: AcceptService;
66

7+
beforeEach(() => {
8+
TestBed.configureTestingModule({});
9+
service = TestBed.inject(AcceptService);
10+
});
11+
712
/** Returns a simple fake file with given extension and optional type. */
813
const getFile = (ext: string, type?: string) => new File(['...'], `${Date.now()}.${ext}`, { type });
914

@@ -14,11 +19,6 @@ describe('AcceptService', () => {
1419
getFile('pdf', 'application/octet-stream'),
1520
];
1621

17-
beforeEach(() => {
18-
TestBed.configureTestingModule({});
19-
service = TestBed.inject(AcceptService);
20-
});
21-
2222
it('should filter based on file extension', () => {
2323
const files = getFileList();
2424
const accepted = service.accepts(files, '.doc, txt , .pdf,random/MIME');

projects/cdk/src/lib/file-input/file-input.directive.spec.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Component, DebugElement, Type } from '@angular/core';
22
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
3-
import { FormControl, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
3+
import { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';
44
import { By } from '@angular/platform-browser';
55
import { getArrayValueError, getNonArrayValueError } from './file-input-errors';
66
import { FileInputValue } from './file-input-value';
@@ -24,8 +24,7 @@ const getFileList = (files: File[]): FileList => {
2424
describe('FileInputDirective', () => {
2525
function configureFileInputTestingModule<T>(testComponent: Type<T>): Selectors<T> {
2626
const fixture = TestBed.configureTestingModule({
27-
imports: [FormsModule, ReactiveFormsModule],
28-
declarations: [FileInputDirective, testComponent],
27+
imports: [testComponent],
2928
}).createComponent(testComponent);
3029

3130
const inputElement = fixture.debugElement.query(By.directive(FileInputDirective));
@@ -299,34 +298,46 @@ describe('FileInputDirective', () => {
299298
});
300299

301300
@Component({
301+
standalone: true,
302+
imports: [FileInputDirective],
302303
template: `<input fileInput type="file" />`,
303304
})
304305
class FileInputBasic {}
305306

306307
@Component({
308+
standalone: true,
309+
imports: [FileInputDirective],
307310
template: `<input fileInput type="file" multiple />`,
308311
})
309312
class FileInputMultiple {}
310313

311314
@Component({
315+
standalone: true,
316+
imports: [FileInputDirective],
312317
// This combination is not valid! "Append" should only be used together with "multiple".
313318
template: `<input fileInput type="file" mode="append" />`,
314319
})
315320
class FileInputAppend {}
316321

317322
@Component({
323+
standalone: true,
324+
imports: [FileInputDirective],
318325
template: `<input fileInput type="file" multiple mode="append" />`,
319326
})
320327
class FileInputMultipleAppend {}
321328

322329
@Component({
330+
standalone: true,
331+
imports: [ReactiveFormsModule, FileInputDirective],
323332
template: `<input fileInput type="file" [formControl]="fileCtrl" />`,
324333
})
325334
class FileInputWithFormControl {
326335
fileCtrl = new FormControl<FileInputValue>(null, [Validators.required]);
327336
}
328337

329338
@Component({
339+
standalone: true,
340+
imports: [ReactiveFormsModule, FileInputDirective],
330341
template: `<input fileInput type="file" disabled />`,
331342
})
332343
class FileInputDisabled {}

projects/cdk/src/lib/file-input/file-input.directive.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { FileInputMode, FileInputValue } from './file-input-value';
2323
@Directive({
2424
selector: 'input[fileInput]',
2525
exportAs: 'fileInput',
26+
standalone: true,
2627
host: {
2728
style: 'display: none',
2829
'(focus)': '_focusChanged(true)',

projects/cdk/src/public-api.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
* Public API Surface of cdk
33
*/
44

5-
export * from './lib/cdk.module';
65
export * from './lib/coercion';
76
export * from './lib/dropzone';
87
export * from './lib/file-input';

projects/material/src/lib/mat-dropzone/mat-dropzone.component.spec.ts

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { CommonModule } from '@angular/common';
12
import { Component, DebugElement, Type } from '@angular/core';
23
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
34
import { FormControl, ReactiveFormsModule } from '@angular/forms';
@@ -6,8 +7,7 @@ import { MatError, MatFormFieldModule, MatLabel } from '@angular/material/form-f
67
import { MatIconModule } from '@angular/material/icon';
78
import { By } from '@angular/platform-browser';
89
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
9-
import { DropzoneCdkModule, FileInputDirective, FileInputValidators, FileInputValue } from '@ngx-dropzone/cdk';
10-
import { DropzoneMaterialModule } from '../material.module';
10+
import { FileInputDirective, FileInputValidators, FileInputValue } from '@ngx-dropzone/cdk';
1111
import { MatDropzone } from './mat-dropzone.component';
1212

1313
interface Selectors<T> {
@@ -25,16 +25,7 @@ interface Selectors<T> {
2525
describe('MatDropzone', () => {
2626
function configureDropzoneTestingModule<T>(testComponent: Type<T>): Selectors<T> {
2727
const fixture = TestBed.configureTestingModule({
28-
imports: [
29-
BrowserAnimationsModule,
30-
ReactiveFormsModule,
31-
MatFormFieldModule,
32-
MatIconModule,
33-
MatChipsModule,
34-
DropzoneCdkModule,
35-
DropzoneMaterialModule,
36-
],
37-
declarations: [testComponent],
28+
imports: [CommonModule, BrowserAnimationsModule, testComponent],
3829
}).createComponent(testComponent);
3930

4031
const element = fixture.debugElement.query(By.directive(MatDropzone));
@@ -127,6 +118,8 @@ describe('MatDropzone', () => {
127118

128119
@Component({
129120
selector: 'basic-dropzone',
121+
standalone: true,
122+
imports: [MatFormFieldModule, MatDropzone, FileInputDirective],
130123
template: `
131124
<mat-form-field>
132125
<mat-label>Drop it basic!</mat-label>
@@ -140,6 +133,8 @@ class DropzoneBasic {}
140133

141134
@Component({
142135
selector: 'form-control-dropzone',
136+
standalone: true,
137+
imports: [ReactiveFormsModule, MatFormFieldModule, MatIconModule, MatChipsModule, MatDropzone, FileInputDirective],
143138
template: `
144139
<mat-form-field>
145140
<ngx-mat-dropzone>

projects/material/src/lib/mat-dropzone/mat-dropzone.component.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,32 @@ import {
1414
import { Validators } from '@angular/forms';
1515
import { MatChipRow } from '@angular/material/chips';
1616
import { MatFormField, MatFormFieldControl } from '@angular/material/form-field';
17-
import { coerceBoolean, DropzoneComponent, FileInputValue } from '@ngx-dropzone/cdk';
17+
import {
18+
AcceptService,
19+
coerceBoolean,
20+
DropzoneComponent,
21+
DropzoneService,
22+
FileInputDirective,
23+
FileInputValue,
24+
} from '@ngx-dropzone/cdk';
1825
import { merge, Observable, Subject, takeUntil, tap } from 'rxjs';
1926

2027
@Component({
2128
selector: 'ngx-mat-dropzone',
2229
exportAs: 'matDropzone',
30+
standalone: true,
31+
imports: [MatFormField, MatChipRow, FileInputDirective, DropzoneComponent],
32+
providers: [
33+
DropzoneService,
34+
AcceptService,
35+
{
36+
provide: MatFormFieldControl,
37+
useExisting: MatDropzone,
38+
},
39+
],
2340
template: `
2441
<ng-content select="[fileInput]"></ng-content>
42+
2543
<div class="mat-chip-grid" [class.filled-and-float]="filled && shouldLabelFloat">
2644
<ng-content select="mat-chip-row"></ng-content>
2745
</div>
@@ -57,12 +75,6 @@ import { merge, Observable, Subject, takeUntil, tap } from 'rxjs';
5775
],
5876
encapsulation: ViewEncapsulation.None,
5977
changeDetection: ChangeDetectionStrategy.OnPush,
60-
providers: [
61-
{
62-
provide: MatFormFieldControl,
63-
useExisting: MatDropzone,
64-
},
65-
],
6678
})
6779
export class MatDropzone
6880
extends DropzoneComponent

projects/material/src/lib/material.module.ts

Lines changed: 0 additions & 15 deletions
This file was deleted.

projects/material/src/public-api.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,3 @@
33
*/
44

55
export * from './lib/mat-dropzone';
6-
export * from './lib/material.module';

0 commit comments

Comments
 (0)