Skip to content

Commit 77c3fc3

Browse files
committed
✨ add create folders from root
1 parent 8f49746 commit 77c3fc3

32 files changed

+708
-85
lines changed

src/app/core/interfaces/response.interface.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,9 @@ export interface IUserCreated {
99
status?: number;
1010
msg?: string;
1111
}
12+
13+
export interface IFolderCreated {
14+
ok: boolean;
15+
folder: Folder;
16+
msg: string;
17+
}

src/app/core/models/folder.model.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { IPermission } from "@interfaces/permision.interface";
22

3+
import { File } from "./file.model";
34
import { User } from "./user.model";
45

56
export class Folder {
6-
name?: string;
7+
name: string;
78
size: number;
89
permission: IPermission[];
910
owner: User;
@@ -12,5 +13,6 @@ export class Folder {
1213
parent: Folder;
1314
folders: Folder[];
1415
files: File[];
16+
color: string;
1517
_id?: string;
1618
}

src/app/core/services/auth.service.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { environment } from 'environments/environment';
55

66
import { Observable, catchError, map, of } from 'rxjs';
77

8+
import { Folder } from '@models/folder.model';
89
import { User } from '@models/user.model';
910

1011
import { IUserCreated } from '@interfaces/response.interface';
@@ -53,6 +54,7 @@ export class AuthService {
5354
return this.http.get<IUserCreated>(url, this.headers)
5455
.pipe(map((resp) => {
5556
this.userActive = resp.user;
57+
this.userActive.rootFolder = resp.root as Folder;
5658
Storage.removeLocalStorage('token');
5759
Storage.savelocalStorage('token', resp.token);
5860
return true;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { TestBed } from '@angular/core/testing';
2+
3+
import { FolderService } from './folder.service';
4+
5+
describe('FolderService', () => {
6+
let service: FolderService;
7+
8+
beforeEach(() => {
9+
TestBed.configureTestingModule({});
10+
service = TestBed.inject(FolderService);
11+
});
12+
13+
it('should be created', () => {
14+
expect(service).toBeTruthy();
15+
});
16+
});
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { HttpClient } from '@angular/common/http';
2+
import { EventEmitter, Injectable } from '@angular/core';
3+
import { environment } from 'environments/environment';
4+
5+
import { Folder } from '@models/folder.model';
6+
7+
import { IFolderCreated } from '@interfaces/response.interface';
8+
9+
import Storage from '@utils/storage.util';
10+
11+
const base_url = environment.base_url;
12+
13+
@Injectable({
14+
providedIn: 'root'
15+
})
16+
export class FolderService {
17+
folderCreated: EventEmitter<Folder> = new EventEmitter();
18+
19+
get headers() {
20+
return {
21+
headers: {
22+
'x-token': Storage.getLocalStorage('token') || ''
23+
}
24+
};
25+
}
26+
27+
constructor(
28+
private http: HttpClient,
29+
) { }
30+
31+
createFolder(folderName: string, folderID: string): void {
32+
const url = `${base_url}/folder/${folderID}`;
33+
this.http.post<IFolderCreated>(url, { name: folderName }, this.headers).subscribe({
34+
next: ({ folder }) => {
35+
this.folderCreated.emit(folder);
36+
}
37+
});
38+
}
39+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { TestBed } from '@angular/core/testing';
2+
3+
import { ModalService } from './modal.service';
4+
5+
describe('ModalService', () => {
6+
let service: ModalService;
7+
8+
beforeEach(() => {
9+
TestBed.configureTestingModule({});
10+
service = TestBed.inject(ModalService);
11+
});
12+
13+
it('should be created', () => {
14+
expect(service).toBeTruthy();
15+
});
16+
});
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { EventEmitter, Injectable } from '@angular/core';
2+
3+
@Injectable({
4+
providedIn: 'root'
5+
})
6+
export class ModalService {
7+
openNewFolderModal: EventEmitter<{ open: boolean, folderID: string }> = new EventEmitter();
8+
9+
openNewFolder(folderID: string): void {
10+
this.openNewFolderModal.emit({ open: true, folderID });
11+
}
12+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { CommonModule } from '@angular/common';
2+
import { NgModule } from '@angular/core';
3+
4+
import { DropdownsModule } from '@shared/dropdowns/dropdowns.module';
5+
6+
import { FileComponent } from './file/file.component';
7+
import { FolderComponent } from './folder/folder.component';
8+
9+
@NgModule({
10+
declarations: [
11+
FileComponent,
12+
FolderComponent
13+
],
14+
imports: [
15+
CommonModule,
16+
DropdownsModule
17+
],
18+
exports: [
19+
FileComponent,
20+
FolderComponent
21+
],
22+
})
23+
export class ComponentsModule { }
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<div class="icon">
2+
<i class="bx bx-file"></i>
3+
</div>
4+
<span class="name">{{ file.name }}</span>
5+
<app-dots-dropdown class="actions"></app-dots-dropdown>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
@import 'settings/_colors.scss';
2+
@import 'settings/_typography.scss';
3+
4+
.name {
5+
@include fs-5;
6+
@include fw-400;
7+
color: var(--fc-primary);
8+
text-overflow: ellipsis;
9+
overflow: hidden;
10+
white-space: nowrap;
11+
flex: 1;
12+
}
13+
14+
.icon {
15+
@include fs-4;
16+
color: var(--fc-primary);
17+
18+
& i {
19+
@include fw-600;
20+
}
21+
}

0 commit comments

Comments
 (0)