"axios": "0.18.0",
"classnames": "2.2.6",
"lodash": "4.17.10",
- "react": "16.4.2",
+ "react": "16.5.2",
"react-copy-to-clipboard": "5.0.1",
- "react-dom": "16.4.2",
+ "react-dom": "16.5.2",
"react-dropzone": "5.0.1",
"react-redux": "5.0.7",
"react-router": "4.3.1",
"react-router-dom": "4.3.1",
"react-router-redux": "5.0.0-alpha.9",
+ "react-rte": "0.16.1",
"react-scripts-ts": "2.17.0",
"react-splitter-layout": "3.0.1",
"react-transition-group": "2.4.0",
import { WrappedFieldProps } from 'redux-form';
import { ArvadosTheme } from '~/common/custom-theme';
import { TextField as MaterialTextField, StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core';
+import RichTextEditor from 'react-rte';
type CssRules = 'textField';
fullWidth={true}
{...props.input}
/>);
+
+
+interface RichEditorTextFieldData {
+ label?: string;
+}
+
+type RichEditorTextFieldProps = RichEditorTextFieldData & WrappedFieldProps & WithStyles<CssRules>;
+
+export const RichEditorTextField = withStyles(styles)(
+ class RichEditorTextField extends React.Component<RichEditorTextFieldProps> {
+ state = {
+ value: RichTextEditor.createValueFromString(this.props.input.value, 'html')
+ };
+
+ onChange = (value: any) => {
+ this.setState({ value });
+ this.props.input.onChange(value.toString('html'));
+ }
+
+ render() {
+ return (
+ <RichTextEditor
+ value={this.state.value}
+ onChange={this.onChange}
+ placeholder={this.props.label} />
+ );
+ }
+ }
+);
\ No newline at end of file
import { ServiceRepository } from "~/services/services";
import { ProjectResource } from '~/models/project';
import { ContextMenuResource } from "~/store/context-menu/context-menu-actions";
+import { getResource } from '~/store/resources/resources';
export interface ProjectUpdateFormDialogData {
uuid: string;
export const PROJECT_UPDATE_FORM_NAME = 'projectUpdateFormName';
export const openProjectUpdateDialog = (resource: ContextMenuResource) =>
- (dispatch: Dispatch) => {
- dispatch(initialize(PROJECT_UPDATE_FORM_NAME, resource));
+ (dispatch: Dispatch, getState: () => RootState) => {
+ const project = getResource(resource.uuid)(getState().resources);
+ dispatch(initialize(PROJECT_UPDATE_FORM_NAME, project));
dispatch(dialogActions.OPEN_DIALOG({ id: PROJECT_UPDATE_FORM_NAME, data: {} }));
};
import * as React from "react";
import { Field } from "redux-form";
-import { TextField } from "~/components/text-field/text-field";
+import { TextField, RichEditorTextField } from "~/components/text-field/text-field";
import { PROJECT_NAME_VALIDATION, PROJECT_DESCRIPTION_VALIDATION } from "~/validators/validators";
export const ProjectNameField = () =>
export const ProjectDescriptionField = () =>
<Field
name='description'
- component={TextField}
+ component={RichEditorTextField}
validate={PROJECT_DESCRIPTION_VALIDATION}
label="Description - optional" />;
}
declare var System: System;
-declare module 'react-splitter-layout';
\ No newline at end of file
+declare module 'react-splitter-layout';
+declare module 'react-rte';
\ No newline at end of file