refactor: resource controllers
This commit is contained in:
parent
7f1180083f
commit
a54b9b8230
|
@ -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">
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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} />
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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} />
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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} />
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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$/);
|
||||||
|
|
|
@ -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}
|
||||||
/>
|
/>
|
|
@ -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 = {
|
||||||
|
|
|
@ -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,
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -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 (
|
Loading…
Reference in New Issue
Block a user