2024-05-27 14:06:26 +03:00

92 lines
3.4 KiB
TypeScript

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,
},
];
});
}
}