UNPKG

@fakel/rest-admin

Version:

An application that makes it easier to work with your API

70 lines (57 loc) 1.58 kB
import { computed, observable, action, makeObservable } from 'mobx'; import type React from 'react'; import { LinkT } from '../@types/index'; export type ResourceOptions = { label?: string; icon?: React.ReactNode; isReference?: boolean; renderViewOnMenuClicked?: LinkT; linkUrl?: string; }; export type ResourceT = { name: string; create?: React.ComponentType<any>; edit?: React.ComponentType<any>; list?: React.ComponentType<any>; show?: React.ComponentType<any>; options?: ResourceOptions; }; export class ResourceStore { resources: ResourceT[] = []; current: string = ''; constructor() { makeObservable(this, { resources: observable, current: observable, setCurrentResource: action, pushResource: action, getResource: action, getCurrentResource: action, isRegistred: action, }); this.resources = []; } public setCurrentResource(resource: string) { this.current = resource; } public pushResource(resource: ResourceT) { if (!this.isRegistred(resource.name)) { this.resources.push(resource); } } public getResource(name: string) { return this.resources.find((resource) => resource.name === name); } public getCurrentResource() { if (!this.resources) { return null; } return this.resources.find((resource) => resource.name === this.current) || this.resources[0]; } public getFirstResource() { return this.resources ? this.resources[0] : null; } public isRegistred(name: string) { return !!this.getResource(name); } }