Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/src/components/App.js b/src/components/App.js
- index e744e47..c7595bc 100644
- --- a/src/components/App.js
- +++ b/src/components/App.js
- @@ -6,6 +6,7 @@ import * as components from './index';
- const {
- Bloggur,
- EntryCreator,
- + EntryEditor,
- Entry,
- Home,
- UserLogIn,
- @@ -24,6 +25,10 @@ const App = () => (
- <Route path="create" component={EntryCreator} />
- <Route path=":userName">
- + <Route path="edit/:entryId" component={EntryEditor}>
- + <Route path=":entrySlug" />
- + </Route>
- +
- <Route path=":entryId" component={Entry}>
- <Route path=":entrySlug" />
- </Route>
- diff --git a/src/components/Entry.js b/src/components/Entry.js
- index 5d3fea4..ea6fb64 100644
- --- a/src/components/Entry.js
- +++ b/src/components/Entry.js
- @@ -2,19 +2,13 @@ import React, { PropTypes } from 'react';
- import Markdown from 'react-remarkable';
- import { Link } from 'react-router';
- -const Entry = ({
- - classes,
- - userName,
- - entryId,
- - entrySlug,
- +export function getEntryContents({
- entryName,
- entryContents,
- entryDeleted,
- - entryByUserId,
- - requestSession,
- setStatusCode,
- setDocumentTitle
- -}) => {
- +}) {
- if (entryDeleted || !entryName) {
- setStatusCode(404);
- setDocumentTitle('404 - Entry not found!');
- @@ -35,25 +29,45 @@ const Entry = ({
- }
- }
- - return (
- - <div className={classes.Entry}>
- - <Markdown source={entryContents} />
- -
- - {entryByUserId === requestSession.userId
- - ? (
- - <Link
- - className={classes.EditButton}
- - to={`/${userName}/edit/${entryId}/${entrySlug}`}
- - >
- - Edit
- - </Link>
- - )
- - : undefined
- - }
- - </div>
- - );
- + return entryContents;
- };
- +const Entry = ({
- + classes,
- + userName,
- + entryId,
- + entrySlug,
- + entryName,
- + entryContents,
- + entryDeleted,
- + entryByUserId,
- + requestSession,
- + setStatusCode,
- + setDocumentTitle
- +}) => (
- + <div className={classes.Entry}>
- + <Markdown source={getEntryContents({
- + entryName,
- + entryContents,
- + entryDeleted,
- + setStatusCode,
- + setDocumentTitle
- + })} />
- +
- + {entryByUserId === requestSession.userId
- + ? (
- + <Link
- + className={classes.EditButton}
- + to={`/${userName}/edit/${entryId}/${entrySlug}`}
- + >
- + Edit
- + </Link>
- + )
- + : undefined
- + }
- + </div>
- +);
- +
- Entry.propTypes = {
- classes: PropTypes.object.isRequired,
- userName: PropTypes.string.isRequired,
- diff --git a/src/components/EntryEditor.js b/src/components/EntryEditor.js
- new file mode 100644
- index 0000000..64d0f63
- --- /dev/null
- +++ b/src/components/EntryEditor.js
- @@ -0,0 +1,110 @@
- +import React, { PropTypes } from 'react';
- +import { Form } from 'provide-page';
- +import { getEntryContents } from './Entry';
- +
- +const EntryEditor = ({
- + classes,
- + userName,
- + entryId,
- + entryName,
- + entryContents,
- + entryByUserId,
- + entryDeleted,
- + entryError,
- + setEntryError,
- + updateEntry,
- + deleteEntry,
- + replaceRoute,
- + pushRoute,
- + requestSession,
- + setStatusCode,
- + setDocumentTitle,
- + formId,
- + formData
- +}) => {
- + const canEdit = entryByUserId === requestSession.userId;
- + const onSubmit = (event, formData) => {
- + if (!formData) {
- + return;
- + }
- +
- + if (!canEdit) {
- + setEntryError(`You don't have permission to do that!`);
- + return;
- + }
- +
- + if (formData.entryContents) {
- + updateEntry(formData, ({ entrySlug }) => {
- + replaceRoute(`/${userName}/${entryId}/${entrySlug}`);
- + });
- + } else {
- + deleteEntry(() => pushRoute(`/`));
- + }
- + };
- +
- + return (
- + <Form
- + formId={formId}
- + className={classes.EntryEditor}
- + onSubmit={onSubmit}
- + >
- + <textarea
- + className={classes.EntryEditorInput}
- + name="entryContents"
- + defaultValue={getEntryContents({
- + entryName,
- + entryContents,
- + entryDeleted,
- + setStatusCode,
- + setDocumentTitle
- + })}
- + autoFocus
- + />
- +
- + {canEdit
- + ? (
- + <button className={classes.SaveButton} type="submit">
- + Save
- + </button>
- + )
- + : undefined
- + }
- +
- + {entryError
- + ? (
- + <div className={classes.EntryError}>
- + {entryError}
- + </div>
- + )
- + : undefined
- + }
- + </Form>
- + );
- +};
- +
- +EntryEditor.propTypes = {
- + classes: PropTypes.object.isRequired,
- + userName: PropTypes.string.isRequired,
- + entryId: PropTypes.string.isRequired,
- + entryName: PropTypes.string.isRequired,
- + entryContents: PropTypes.string.isRequired,
- + entryByUserId: PropTypes.string.isRequired,
- + entryDeleted: PropTypes.bool.isRequired,
- + entryError: PropTypes.string.isRequired,
- + setEntryError: PropTypes.func.isRequired,
- + updateEntry: PropTypes.func.isRequired,
- + deleteEntry: PropTypes.func.isRequired,
- + replaceRoute: PropTypes.func.isRequired,
- + pushRoute: PropTypes.func.isRequired,
- + requestSession: PropTypes.object.isRequired,
- + setStatusCode: PropTypes.func.isRequired,
- + setDocumentTitle: PropTypes.func.isRequired,
- + formId: PropTypes.string.isRequired,
- + formData: PropTypes.object
- +};
- +
- +EntryEditor.defaultProps = {
- + formId: 'EntryEditor'
- +};
- +
- +export default EntryEditor;
- diff --git a/src/components/index.js b/src/components/index.js
- index b6f740a..a069a67 100644
- --- a/src/components/index.js
- +++ b/src/components/index.js
- @@ -3,6 +3,7 @@ export Home from './Home';
- export Bloggur from './Bloggur';
- export Entry from './Entry';
- export EntryCreator from './EntryCreator';
- +export EntryEditor from './EntryEditor';
- export EntryLink from './EntryLink';
- export NotFound from './NotFound';
- export ThemeSelector from './ThemeSelector';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement