refactor: resource controllers

This commit is contained in:
cha0s 2021-01-26 23:40:18 -06:00
parent 7f1180083f
commit a54b9b8230
20 changed files with 37 additions and 37 deletions

View File

@ -11,7 +11,7 @@ import {resourceSelector, UriContext} from '@persea/core';
const Resource = ({uri, uuid}) => {
const latus = useLatus();
const resource = useSelector((state) => resourceSelector(state, `${uuid}${uri}`));
const Component = latus.get('%resource-renderers')(uri);
const {Component} = latus.get('%resource-controllers')(uri);
const buffer = Buffer.from(resource, 'base64');
return (
<div className="resource">

View File

@ -1,8 +1,8 @@
import flatten from 'lodash.flatten';
import BinaryResourceRenderer from './resource-renderers/binary';
import ImageResourceRenderer from './resource-renderers/image';
import TextResourceRenderer from './resource-renderers/text';
import BinaryResource from './resource-controllers/binary';
import ImageResource from './resource-controllers/image';
import TextResource from './resource-controllers/text';
import {projects, user} from './state';
export {default as Number} from './components/number';
@ -19,17 +19,17 @@ export * from './state';
export default {
hooks: {
'@latus/core/config': () => ({
'resource-renderers': [],
'resource-controllers': [],
}),
'@latus/core/starting': async (latus) => {
const Renderers = flatten(await latus.invokeOrdered('@persea/core/resource-renderers'));
Renderers.push(
ImageResourceRenderer,
TextResourceRenderer,
BinaryResourceRenderer,
const Controllers = flatten(await latus.invokeOrdered('@persea/core/resource-controllers'));
Controllers.push(
ImageResource,
TextResource,
BinaryResource,
);
const Renderer = (uri) => Renderers.find(({matcher}) => uri.match(matcher)).Component;
latus.set('%resource-renderers', Renderer);
const Controller = (uri) => Controllers.find(({matcher}) => uri.match(matcher));
latus.set('%resource-controllers', Controller);
},
'@latus/redux/slices': () => ({
projects,

View File

@ -5,7 +5,7 @@ import {
import HexEditor from 'react-hex-editor';
import oneDarkPro from 'react-hex-editor/themes/oneDarkPro';
const BinaryRendererComponent = ({buffer}) => (
const BinaryComponent = ({buffer}) => (
<HexEditor
className="binary-renderer"
columns={0x10}
@ -18,18 +18,18 @@ const BinaryRendererComponent = ({buffer}) => (
/>
);
BinaryRendererComponent.propTypes = {
BinaryComponent.propTypes = {
buffer: PropTypes.shape({
buffer: PropTypes.shape({}),
length: PropTypes.number,
}).isRequired,
};
export default class BinaryResourceRenderer {
export default class BinaryController {
static Component({buffer}) {
return (
<BinaryRendererComponent buffer={buffer} />
<BinaryComponent buffer={buffer} />
);
}

View File

@ -3,7 +3,7 @@ import {
React,
} from '@latus/react';
const ImageRendererComponent = ({buffer}) => (
const ImageComponent = ({buffer}) => (
<div className="image-renderer">
<div
className="holder"
@ -12,17 +12,17 @@ const ImageRendererComponent = ({buffer}) => (
</div>
);
ImageRendererComponent.propTypes = {
ImageComponent.propTypes = {
buffer: PropTypes.shape({
toString: PropTypes.func,
}).isRequired,
};
export default class ImageResourceRenderer {
export default class ImageController {
static Component({buffer}) {
return (
<ImageRendererComponent buffer={buffer} />
<ImageComponent buffer={buffer} />
);
}

View File

@ -3,21 +3,21 @@ import {
React,
} from '@latus/react';
const TextRendererComponent = ({buffer}) => (
const TextComponent = ({buffer}) => (
<div className="text-renderer">{buffer.toString()}</div>
);
TextRendererComponent.propTypes = {
TextComponent.propTypes = {
buffer: PropTypes.shape({
toString: PropTypes.func,
}).isRequired,
};
export default class TextResourceRenderer {
export default class TextController {
static Component({buffer}) {
return (
<TextRendererComponent buffer={buffer} />
<TextComponent buffer={buffer} />
);
}

View File

@ -2,7 +2,7 @@ import {basename, extname} from 'path';
import {camelCase} from '@latus/core';
import EntityRenderer from './resource-renderers/entity';
import EntityController from './resource-controllers/entity';
export default {
hooks: {
@ -10,8 +10,8 @@ export default {
const TraitRenderers = latus.invokeReduce('@persea/entity/trait-renderers');
latus.set('%trait-renderers', TraitRenderers);
},
'@persea/core/resource-renderers': () => [
EntityRenderer,
'@persea/core/resource-controllers': () => [
EntityController,
],
'@persea/entity/trait-renderers': () => {
const context = require.context('./trait-renderers', false, /\.jsx$/);

View File

@ -14,7 +14,7 @@ import {
import Traits from './traits';
import View from './view';
const EntityRendererComponent = ({
const EntityComponent = ({
buffer,
path,
}) => {
@ -44,23 +44,23 @@ const EntityRendererComponent = ({
);
};
EntityRendererComponent.defaultProps = {
EntityComponent.defaultProps = {
path: '',
};
EntityRendererComponent.propTypes = {
EntityComponent.propTypes = {
buffer: PropTypes.shape({}).isRequired,
path: PropTypes.string,
};
export default class EntityResourceRenderer {
export default class EntityController {
static Component({
buffer,
path,
}) {
return (
<EntityRendererComponent
<EntityComponent
buffer={buffer}
path={path}
/>

View File

@ -7,7 +7,7 @@ import {
import {Number, Stage} from '@persea/core';
import {useJsonPatcher} from '@persea/json';
import Entity from '../../resource-renderers/entity';
import Entity from '../../resource-controllers/entity';
import useEntity from '../../hooks/use-entity';
const emitterJson = {

View File

@ -1,4 +1,4 @@
import JsonResourceComponent from './json';
import JsonController from './resource-controllers/json';
import reducer from './state/reducer';
export {default as useJsonPatcher} from './hooks/use-json-patcher';
@ -7,8 +7,8 @@ export * from './state';
export default {
hooks: {
'@latus/redux/reducers': () => reducer,
'@persea/core/resource-renderers': () => [
JsonResourceComponent,
'@persea/core/resource-controllers': () => [
JsonController,
],
},
};

View File

@ -2,7 +2,7 @@ import {React} from '@latus/react';
import {Prism as SyntaxHighlighter} from 'react-syntax-highlighter/dist/cjs/index';
import {dark} from 'react-syntax-highlighter/dist/cjs/styles/prism';
export default class JsonResourceRenderer {
export default class JsonController {
static Component({buffer}) {
return (