import { Injectable } from '@angular/core'; import { FuseMockApiService } from '@fuse/lib/mock-api/mock-api.service'; import { items as itemsData } from 'app/mock-api/apps/file-manager/data'; import { cloneDeep } from 'lodash-es'; @Injectable({ providedIn: 'root' }) export class FileManagerMockApi { private _items: any[] = itemsData; /** * Constructor */ constructor(private _fuseMockApiService: FuseMockApiService) { // Register Mock API handlers this.registerHandlers(); } // ----------------------------------------------------------------------------------------------------- // @ Public methods // ----------------------------------------------------------------------------------------------------- /** * Register Mock API handlers */ registerHandlers(): void { // ----------------------------------------------------------------------------------------------------- // @ Items - GET // ----------------------------------------------------------------------------------------------------- this._fuseMockApiService .onGet('api/apps/file-manager') .reply(({ request }) => { // Clone the items let items = cloneDeep(this._items); // See if the folder id exist const folderId = request.params.get('folderId') === 'null' ? null : request.params.get('folderId'); // Filter the items by folder id. If folder id is null, // that means we want to root items which have folder id // of null items = items.filter((item) => item.folderId === folderId); // Separate the items by folders and files const folders = items.filter((item) => item.type === 'folder'); const files = items.filter((item) => item.type !== 'folder'); // Sort the folders and files alphabetically by filename folders.sort((a, b) => a.name.localeCompare(b.name)); files.sort((a, b) => a.name.localeCompare(b.name)); // Figure out the path and attach it to the response // Prepare the empty paths array const pathItems = cloneDeep(this._items); const path = []; // Prepare the current folder let currentFolder = null; // Get the current folder and add it as the first entry if (folderId) { currentFolder = pathItems.find( (item) => item.id === folderId ); path.push(currentFolder); } // Start traversing and storing the folders as a path array // until we hit null on the folder id while (currentFolder?.folderId) { currentFolder = pathItems.find( (item) => item.id === currentFolder.folderId ); if (currentFolder) { path.unshift(currentFolder); } } return [ 200, { folders, files, path, }, ]; }); } }