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 Resource = ({uri, uuid}) => {
const latus = useLatus(); const latus = useLatus();
const resource = useSelector((state) => resourceSelector(state, `${uuid}${uri}`)); 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'); const buffer = Buffer.from(resource, 'base64');
return ( return (
<div className="resource"> <div className="resource">

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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