Skip to content

Commit 5751906

Browse files
author
JelteMX
committed
Update to version 1.1
1 parent b0b4f4e commit 5751906

File tree

11 files changed

+1774
-1491
lines changed

11 files changed

+1774
-1491
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ dist/
22
node_modules/
33
*.log
44
.DS_Store
5+
.env

package-lock.json

Lines changed: 1508 additions & 1190 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
{
22
"name": "filedropper",
33
"widgetName": "FileDropper",
4-
"version": "1.0.0",
4+
"version": "1.1.0",
55
"description": "Drop files in your Mendix Application",
66
"copyright": "Mendix 2019",
77
"author": "Jelte Lagendijk",
88
"config": {
9-
"_widgetPath": "./dist/MxTestProject/widgets",
10-
"_projectPath": "./dist/MxTestProject/",
11-
"widgetPath": "/Volumes/[C] Windows 10.hidden/Projects/MendixProjects/FileDropperTestProject-main/widgets",
12-
"projectPath": "/Volumes/[C] Windows 10.hidden/Projects/MendixProjects/FileDropperTestProject-main/",
9+
"widgetPath": "./dist/MxTestProject/widgets",
10+
"projectPath": "./dist/MxTestProject/",
1311
"mendixHost": "http://10.211.55.3:8080",
1412
"developmentPort": "3000"
1513
},
@@ -31,7 +29,7 @@
3129
},
3230
"license": "Apache-2.0",
3331
"devDependencies": {
34-
"@mendix/pluggable-widgets-tools": "^8.0.4",
32+
"@mendix/pluggable-widgets-tools": "^8.4.0",
3533
"@types/big.js": "^4.0.5",
3634
"@types/enzyme": "^3.1.10",
3735
"@types/enzyme-adapter-react-16": "^1.0.2",
@@ -49,6 +47,7 @@
4947
},
5048
"dependencies": {
5149
"@bem-react/classname": "^1.5.4",
50+
"@jeltemx/mendix-react-widget-utils": "^0.3.1",
5251
"axios": "^0.19.0",
5352
"core-js": "^3.2.1",
5453
"filesize": "^5.0.2",

src/FileDropper.tsx

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
11
import { Component, ReactNode, createElement } from "react";
22
import { findDOMNode } from "react-dom";
3-
import { FileDropper } from "./components/FileDropper";
43
import { hot } from "react-hot-loader/root";
5-
import { FileDropperContainerProps, Nanoflow } from "../typings/FileDropperProps";
6-
7-
import "./ui/FileDropper.scss";
8-
import { FileDropperStore, FileDropperGuids } from "./store/fileDropperStore";
9-
import { FileDropperFile } from "./store/fileDropperFile";
4+
import mime from "mime";
105
import {
116
createObject,
12-
saveDocument,
13-
commitObject,
147
deleteObjectGuid,
15-
savePostMethod,
16-
getObject,
17-
entityIsImage,
18-
entityIsFileDocument,
19-
entityIsPersistable
20-
} from "./util/data";
8+
commitObject,
9+
getObject
10+
} from "@jeltemx/mendix-react-widget-utils/lib/objects";
11+
import { entityIsFileDocument, entityIsImage, entityIsPersistable } from "@jeltemx/mendix-react-widget-utils";
12+
import { saveDocument } from "@jeltemx/mendix-react-widget-utils/lib/documents";
13+
14+
import { FileDropper } from "./components/FileDropper";
15+
import { FileDropperContainerProps, Nanoflow } from "../typings/FileDropperProps";
16+
import { FileDropperStore, FileDropperGuids } from "./store/fileDropperStore";
17+
import { FileDropperFile } from "./store/fileDropperFile";
18+
19+
import { savePostMethod } from "./util/data";
20+
2121
import { UIProps } from "./components/FileList";
2222
import { getTexts } from "./util/texts";
2323
import { validateProps, ValidationMessage, ValidateExtraProps } from "./util/validation";
24-
import mime from "mime";
24+
25+
import "./ui/FileDropper.scss";
2526

2627
export interface Action {
2728
microflow?: string;
@@ -126,7 +127,8 @@ class FileDropperContainer extends Component<FileDropperContainerProps, {}> {
126127
uiErrorButtonGlyph,
127128
uiErrorButtonStyle,
128129
uiShowPreviewLabel,
129-
uiShowImagePreviews
130+
uiShowImagePreviews,
131+
uiHideProgressOnComplete
130132
} = this.props;
131133

132134
const deleteButtonStyle =
@@ -141,7 +143,8 @@ class FileDropperContainer extends Component<FileDropperContainerProps, {}> {
141143
saveButtonStyle,
142144
errorButtonStyle,
143145
uiShowPreviewLabel,
144-
uiShowImagePreviews
146+
uiShowImagePreviews,
147+
uiHideProgressOnComplete
145148
};
146149

147150
return <FileDropper store={this.store} uiProps={ui} />;

src/FileDropper.webmodeler.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ export class preview extends Component<FileDropperContainerProps> {
7171
uiErrorButtonGlyph,
7272
uiErrorButtonStyle,
7373
uiShowPreviewLabel,
74-
uiShowImagePreviews
74+
uiShowImagePreviews,
75+
uiHideProgressOnComplete
7576
} = props;
7677

7778
const deleteButtonStyle =
@@ -86,7 +87,8 @@ export class preview extends Component<FileDropperContainerProps> {
8687
saveButtonStyle,
8788
errorButtonStyle,
8889
uiShowPreviewLabel,
89-
uiShowImagePreviews
90+
uiShowImagePreviews,
91+
uiHideProgressOnComplete
9092
};
9193
}
9294

src/FileDropper.xml

Lines changed: 224 additions & 204 deletions
Large diffs are not rendered by default.

src/components/FileList.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export interface UIProps {
1717
errorButtonStyle: null | string;
1818
uiShowPreviewLabel: boolean;
1919
uiShowImagePreviews: boolean;
20+
uiHideProgressOnComplete: boolean;
2021
}
2122
export interface FileListProps {
2223
uiProps?: UIProps;
@@ -31,6 +32,7 @@ export class FileList extends Component<FileListProps, {}> {
3132
super(props);
3233

3334
this.renderDeleteButton = this.renderDeleteButton.bind(this);
35+
this.renderProgress = this.renderProgress.bind(this);
3436
}
3537

3638
render(): ReactNode {
@@ -170,6 +172,9 @@ export class FileList extends Component<FileListProps, {}> {
170172
private renderProgress(file: IFileDropperFile): ReactNode {
171173
const strokeColor = file.status === "error" ? "#F00" : "#a5a5a5";
172174
const percent = file.status === "error" ? 0 : file.loadProgress;
175+
if (this.props.uiProps && this.props.uiProps.uiHideProgressOnComplete && file.status === "saved") {
176+
return null;
177+
}
173178
return (
174179
<div className={classes("item-progress")}>
175180
<ProgressLine className={classes("item-progress__bar")} percent={percent} strokeColor={strokeColor} />

src/package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8" ?>
22
<package xmlns="http://www.mendix.com/package/1.0/">
3-
<clientModule name="FileDropper" version="1.0.0" xmlns="http://www.mendix.com/clientModule/1.0/">
3+
<clientModule name="FileDropper" version="1.1.0" xmlns="http://www.mendix.com/clientModule/1.0/">
44
<widgetFiles>
55
<widgetFile path="FileDropper.xml"/>
66
</widgetFiles>

src/store/fileDropperStore.ts

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { observable, action, flow, configure, computed } from "mobx";
22
import { FileDropperTexts } from "../util/texts";
33
import { ValidationMessage } from "../util/validation";
44
import { IFileDropperFile, FileDropperFile } from "./fileDropperFile";
5-
// import { CancellablePromise } from "mobx/lib/api/flow";
65

76
configure({ enforceActions: "observed" });
87

@@ -31,39 +30,6 @@ export interface FileDropperStoreOptions {
3130
saveBase64?: boolean;
3231
}
3332

34-
// export interface IFileDropperStore {
35-
// accept?: string;
36-
// maxNumber: number;
37-
// maxSize?: number;
38-
// texts: FileDropperTexts;
39-
40-
// files: IFileDropperFile[];
41-
// contextObject: mendix.lib.MxObject | null;
42-
// validationMessages: ValidationMessage[];
43-
44-
// saveFile: (file: IFileDropperFile) => CancellablePromise<void>;
45-
// deleteFile: (file: IFileDropperFile) => CancellablePromise<void>;
46-
// deleteFileShallow: (guid: string) => CancellablePromise<void>;
47-
48-
// saveMethod: ((file: IFileDropperFile) => Promise<boolean>) | null;
49-
// deleteMethod: ((file: IFileDropperFile) => Promise<boolean>) | null;
50-
// verifyMethod: ((file: IFileDropperFile) => Promise<boolean>) | null;
51-
// subscriptionHandler: (guids: FileDropperGuids) => void;
52-
53-
// autoLoad: boolean;
54-
// autoSave: boolean;
55-
// saveBase64: boolean;
56-
57-
// setContext(obj: mendix.lib.MxObject | null): void;
58-
// maxFilesReached: boolean;
59-
// disabled: boolean;
60-
// filesGuids: FileDropperGuids;
61-
62-
// addFile(file: File): void;
63-
// addValidationMessage(message: ValidationMessage): void;
64-
// removeValidationMessage(id: string): void;
65-
// }
66-
6733
export class FileDropperStore implements FileDropperStoreProps {
6834
public accept: string | undefined;
6935
public maxNumber: number;

src/util/data.ts

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,48 +3,11 @@ import { FileDropperFile } from "../store/fileDropperFile";
33

44
let requestNumber = 0;
55

6-
export const createObject = (entity: string): Promise<mendix.lib.MxObject> =>
7-
new Promise((resolve: (value: mendix.lib.MxObject) => void, reject) => {
8-
mx.data.create({ entity, callback: resolve, error: reject });
9-
});
10-
11-
export const commitObject = (mxobj: mendix.lib.MxObject): Promise<void> =>
12-
new Promise((resolve, reject) => {
13-
mx.data.commit({ mxobj, callback: resolve, error: reject });
14-
});
15-
16-
export const deleteObjectGuid = (guid: string): Promise<void> =>
17-
new Promise((resolve, reject) => {
18-
mx.data.remove({ guid, callback: resolve, error: reject });
19-
});
20-
21-
export const getObject = (guid: string): Promise<mendix.lib.MxObject | null> =>
22-
new Promise((resolve, reject) => {
23-
mx.data.get({ guid, callback: resolve, error: reject });
24-
});
25-
26-
export const saveDocument = (name: string, file: Blob, obj: mendix.lib.MxObject): Promise<void> =>
27-
new Promise((resolve, reject) => {
28-
mx.data.saveDocument(obj.getGuid(), name, {}, file, resolve, reject);
29-
});
30-
316
interface Progress {
327
loaded: number;
338
total: number;
349
}
3510

36-
export const entityIsImage = (entity: string): boolean => {
37-
return mx.meta.getEntity(entity).isA("System.Image");
38-
};
39-
40-
export const entityIsFileDocument = (entity: string): boolean => {
41-
return mx.meta.getEntity(entity).isA("System.FileDocument");
42-
};
43-
44-
export const entityIsPersistable = (entity: string): boolean => {
45-
return mx.meta.getEntity(entity).isPersistable();
46-
};
47-
4811
export const savePostMethod = (
4912
dropperFile: FileDropperFile,
5013
obj: mendix.lib.MxObject

0 commit comments

Comments
 (0)