@@ -78,7 +67,7 @@ export class DocumentEditComponent extends React.PureComponent<
className={Classes.INPUT}
onChange={this.handleInputChange}
name="name"
- value={this.state.name}
+ value={doc.name}
onKeyPress={this.handleNameKeyPress}
/>
@@ -99,7 +88,7 @@ export class DocumentEditComponent extends React.PureComponent<
);
@@ -109,16 +98,9 @@ export class DocumentEditComponent extends React.PureComponent<
}
public upload() {
- this.props.uploadDoc(
- this.state.id,
- this.state.name,
- this.state.content,
- );
- this.setState({
- savedName: this.state.name,
- savedContent: this.state.content,
- dirty: false,
- } as any);
+ const doc = this.props.allDocs[this.state.id];
+ console.log("upload");
+ this.props.uploadDoc(this.state.id, doc.name, doc.content);
}
public remove() {
@@ -147,22 +129,15 @@ export class DocumentEditComponent extends React.PureComponent<
const value = target.value;
const name = target.name;
- const { savedName, savedContent } = this.state;
+ const doc = this.props.allDocs[this.state.id];
const updDoc: { [key: string]: string } = {
- name: this.state.name,
- content: this.state.content,
+ name: doc.name,
+ content: doc.content,
};
-
updDoc[name] = value;
- const dirty =
- savedName !== updDoc.name || savedContent !== updDoc.content;
-
- this.setState({
- [name]: value,
- dirty,
- } as any);
+ this.props.updateDoc(this.state.id, updDoc.name, updDoc.content);
}
public componentDidUpdate() {
@@ -179,7 +154,9 @@ export class DocumentEditComponent extends React.PureComponent<
}
public onUnload(e: BeforeUnloadEvent) {
- if (this.state.dirty) {
+ const doc = this.props.allDocs[this.state.id];
+
+ if (doc.dirty) {
e.preventDefault();
e.returnValue = "";
}
@@ -201,10 +178,6 @@ export class DocumentEditComponent extends React.PureComponent<
...this.state,
loaded: true,
id: doc.id,
- name: doc.name,
- content: doc.content,
- savedContent: doc.content,
- savedName: doc.name,
});
}
}
@@ -226,6 +199,8 @@ function mapDispatchToProps(dispatch: Dispatch) {
deleteDoc: (id: number) => dispatch(deleteDocStart(id)),
uploadDoc: (id: number, name: string, content: string) =>
dispatch(uploadDocStart(id, name, content)),
+ updateDoc: (id: number, name: string, content: string) =>
+ dispatch(updateDoc(id, name, content)),
};
}
diff --git a/frontend/src/Documents/tests/DocumentEdit.test.tsx b/frontend/src/Documents/tests/DocumentEdit.test.tsx
index 38bbd3c..88f18a3 100644
--- a/frontend/src/Documents/tests/DocumentEdit.test.tsx
+++ b/frontend/src/Documents/tests/DocumentEdit.test.tsx
@@ -1,20 +1,42 @@
import { mount } from "enzyme";
import * as React from "react";
+import { IDocumentEntry } from "~redux/docs/reducer";
+import { IDocumentJSON } from "../../../../src/entity/Document";
import { DocumentEditComponent } from "../DocumentEdit";
const mock: any = jest.fn();
const onUnloadSpy = jest.spyOn(DocumentEditComponent.prototype, "onUnload");
-const testDoc = {
+const testDoc: IDocumentJSON = {
+ name: "not changed",
+ content: "not changed",
+ id: 1,
+ user: 1,
+ createdAt: 0,
+ editedAt: 0,
+};
+
+const testDocsChanged: { [key: number]: IDocumentEntry } = {
1: {
- name: "not changed",
- content: "not changed",
- id: 1,
- user: 1,
- createdAt: 0,
- editedAt: 0,
+ ...testDoc,
+ name: "changed",
+ content: "changed",
+ remote: {
+ ...testDoc,
+ },
+ dirty: true,
+ },
+};
+
+const testDocsNotChanged: { [key: number]: IDocumentEntry } = {
+ 1: {
+ ...testDoc,
+ remote: {
+ ...testDoc,
+ },
+ dirty: false,
},
};
@@ -32,25 +54,20 @@ describe("
", () => {
const wrapper = mount(
,
);
- const content = wrapper.find("textarea");
- expect(content).toHaveLength(1);
- (content.instance() as any).value = "changed";
-
- content.simulate("change");
-
const preventDefault = jest.fn();
const event = { preventDefault };
map.beforeunload(event);
@@ -67,28 +84,20 @@ describe("
", () => {
const wrapper = mount(
,
);
- const content = wrapper.find("textarea");
- expect(content).toHaveLength(1);
-
- (content.instance() as any).value = "changed";
- content.simulate("change");
-
- (content.instance() as any).value = "not changed";
- content.simulate("change");
-
const preventDefault = jest.fn();
const event = { preventDefault };
map.beforeunload(event);
diff --git a/frontend/src/Home/Home.tsx b/frontend/src/Home/Home.tsx
index 31f79c2..b8cee68 100644
--- a/frontend/src/Home/Home.tsx
+++ b/frontend/src/Home/Home.tsx
@@ -32,6 +32,7 @@ export interface IHomeProps extends RouteComponentProps {
fetching: boolean;
uploading: boolean;
+ dirty: boolean;
darkMode: boolean;
@@ -78,7 +79,7 @@ export class HomeComponent extends React.PureComponent
{