@fakel/rest-admin
Version:
An application that makes it easier to work with your API
70 lines (57 loc) • 1.58 kB
text/typescript
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);
}
}