@webiny/app-file-manager 5.38.0 → 5.38.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/BulkActions/ActionEdit/ActionEdit.d.ts +4 -0
- package/components/BulkActions/ActionEdit/ActionEdit.js +159 -0
- package/components/BulkActions/ActionEdit/ActionEdit.js.map +1 -0
- package/components/BulkActions/ActionEdit/ActionEdit.styled.d.ts +32 -0
- package/components/BulkActions/ActionEdit/ActionEdit.styled.js +39 -0
- package/components/BulkActions/ActionEdit/ActionEdit.styled.js.map +1 -0
- package/components/BulkActions/ActionEdit/ActionEdit.types.d.ts +2 -0
- package/components/BulkActions/ActionEdit/ActionEdit.types.js +7 -0
- package/components/BulkActions/ActionEdit/ActionEdit.types.js.map +1 -0
- package/components/BulkActions/ActionEdit/ActionEditPresenter.d.ts +34 -0
- package/components/BulkActions/ActionEdit/ActionEditPresenter.js +75 -0
- package/components/BulkActions/ActionEdit/ActionEditPresenter.js.map +1 -0
- package/components/BulkActions/ActionEdit/ActionEditPresenter.test.d.ts +1 -0
- package/components/BulkActions/ActionEdit/ActionEditPresenter.test.js +162 -0
- package/components/BulkActions/ActionEdit/ActionEditPresenter.test.js.map +1 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/AddOperation.d.ts +7 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/AddOperation.js +23 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/AddOperation.js.map +1 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/BatchEditor.d.ts +15 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/BatchEditor.js +64 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/BatchEditor.js.map +1 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/BatchEditorDialog.d.ts +15 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/BatchEditorDialog.js +60 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/BatchEditorDialog.js.map +1 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/BatchEditorDialogPresenter.d.ts +66 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/BatchEditorDialogPresenter.js +193 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/BatchEditorDialogPresenter.js.map +1 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/BatchEditorDialogPresenter.test.d.ts +1 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/BatchEditorDialogPresenter.test.js +328 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/BatchEditorDialogPresenter.test.js.map +1 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/FieldRenderer.d.ts +8 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/FieldRenderer.js +42 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/FieldRenderer.js.map +1 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/Operation.d.ts +11 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/Operation.js +54 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/Operation.js.map +1 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/RemoveOperation.d.ts +7 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/RemoveOperation.js +27 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/RemoveOperation.js.map +1 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/index.d.ts +1 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/index.js +18 -0
- package/components/BulkActions/ActionEdit/BatchEditorDialog/index.js.map +1 -0
- package/components/BulkActions/ActionEdit/GraphQLInputMapper.d.ts +7 -0
- package/components/BulkActions/ActionEdit/GraphQLInputMapper.js +54 -0
- package/components/BulkActions/ActionEdit/GraphQLInputMapper.js.map +1 -0
- package/components/BulkActions/ActionEdit/GraphQLInputMapper.test.d.ts +1 -0
- package/components/BulkActions/ActionEdit/GraphQLInputMapper.test.js +59 -0
- package/components/BulkActions/ActionEdit/GraphQLInputMapper.test.js.map +1 -0
- package/components/BulkActions/ActionEdit/domain/Batch.d.ts +53 -0
- package/components/BulkActions/ActionEdit/domain/Batch.js +48 -0
- package/components/BulkActions/ActionEdit/domain/Batch.js.map +1 -0
- package/components/BulkActions/ActionEdit/domain/BatchMapper.d.ts +4 -0
- package/components/BulkActions/ActionEdit/domain/BatchMapper.js +32 -0
- package/components/BulkActions/ActionEdit/domain/BatchMapper.js.map +1 -0
- package/components/BulkActions/ActionEdit/domain/Field.d.ts +32 -0
- package/components/BulkActions/ActionEdit/domain/Field.js +74 -0
- package/components/BulkActions/ActionEdit/domain/Field.js.map +1 -0
- package/components/BulkActions/ActionEdit/domain/FieldMapper.d.ts +7 -0
- package/components/BulkActions/ActionEdit/domain/FieldMapper.js +49 -0
- package/components/BulkActions/ActionEdit/domain/FieldMapper.js.map +1 -0
- package/components/BulkActions/ActionEdit/domain/index.d.ts +4 -0
- package/components/BulkActions/ActionEdit/domain/index.js +51 -0
- package/components/BulkActions/ActionEdit/domain/index.js.map +1 -0
- package/components/BulkActions/ActionEdit/index.d.ts +1 -0
- package/components/BulkActions/ActionEdit/index.js +18 -0
- package/components/BulkActions/ActionEdit/index.js.map +1 -0
- package/components/BulkActions/index.d.ts +1 -0
- package/components/BulkActions/index.js +8 -0
- package/components/BulkActions/index.js.map +1 -1
- package/modules/FileManagerRenderer/index.js +3 -0
- package/modules/FileManagerRenderer/index.js.map +1 -1
- package/package.json +19 -18
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { FormAPI, FormOnSubmit } from "@webiny/form";
|
|
3
|
+
import { BatchEditorDialogViewModel, BatchEditorFormData } from "./BatchEditorDialogPresenter";
|
|
4
|
+
export interface BatchEditorProps {
|
|
5
|
+
onForm: (form: FormAPI) => void;
|
|
6
|
+
onAdd: () => void;
|
|
7
|
+
onDelete: (operationIndex: number) => void;
|
|
8
|
+
onChange: (data: BatchEditorFormData) => void;
|
|
9
|
+
onSetOperationFieldData: (operationIndex: number, data: string) => void;
|
|
10
|
+
onSubmit: FormOnSubmit<BatchEditorFormData>;
|
|
11
|
+
vm: BatchEditorDialogViewModel;
|
|
12
|
+
}
|
|
13
|
+
export declare const BatchEditor: ((props: BatchEditorProps) => JSX.Element) & {
|
|
14
|
+
displayName: string;
|
|
15
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.BatchEditor = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _mobxReactLite = require("mobx-react-lite");
|
|
10
|
+
var _delete_outline = require("@material-design-icons/svg/outlined/delete_outline.svg");
|
|
11
|
+
var _form = require("@webiny/form");
|
|
12
|
+
var _Accordion = require("@webiny/ui/Accordion");
|
|
13
|
+
var _AddOperation = require("./AddOperation");
|
|
14
|
+
var _Operation = require("./Operation");
|
|
15
|
+
var _ActionEdit = require("../ActionEdit.styled");
|
|
16
|
+
var BatchEditor = (0, _mobxReactLite.observer)(function (props) {
|
|
17
|
+
var formRef = /*#__PURE__*/_react.default.createRef();
|
|
18
|
+
(0, _react.useEffect)(function () {
|
|
19
|
+
if (formRef.current) {
|
|
20
|
+
props.onForm(formRef.current);
|
|
21
|
+
}
|
|
22
|
+
}, []);
|
|
23
|
+
return /*#__PURE__*/_react.default.createElement(_form.Form, {
|
|
24
|
+
ref: formRef,
|
|
25
|
+
data: props.vm.data,
|
|
26
|
+
onChange: props.onChange,
|
|
27
|
+
onSubmit: props.onSubmit,
|
|
28
|
+
invalidFields: props.vm.invalidFields
|
|
29
|
+
}, function () {
|
|
30
|
+
return /*#__PURE__*/_react.default.createElement(_ActionEdit.BatchEditorContainer, null, /*#__PURE__*/_react.default.createElement(_Accordion.Accordion, {
|
|
31
|
+
elevation: 1
|
|
32
|
+
}, props.vm.data.operations.map(function (operation, operationIndex) {
|
|
33
|
+
return /*#__PURE__*/_react.default.createElement(_Accordion.AccordionItem, {
|
|
34
|
+
key: "operation-".concat(operationIndex),
|
|
35
|
+
title: operation.title,
|
|
36
|
+
open: operation.open,
|
|
37
|
+
actions: /*#__PURE__*/_react.default.createElement(_Accordion.AccordionItem.Actions, null, /*#__PURE__*/_react.default.createElement(_Accordion.AccordionItem.Action, {
|
|
38
|
+
icon: /*#__PURE__*/_react.default.createElement(_delete_outline.ReactComponent, null),
|
|
39
|
+
onClick: function onClick() {
|
|
40
|
+
return props.onDelete(operationIndex);
|
|
41
|
+
},
|
|
42
|
+
disabled: !operation.canDelete
|
|
43
|
+
}))
|
|
44
|
+
}, /*#__PURE__*/_react.default.createElement(_Operation.Operation, {
|
|
45
|
+
name: "operations.".concat(operationIndex),
|
|
46
|
+
operation: operation,
|
|
47
|
+
onDelete: function onDelete() {
|
|
48
|
+
return props.onDelete(operationIndex);
|
|
49
|
+
},
|
|
50
|
+
onSetOperationFieldData: function onSetOperationFieldData(data) {
|
|
51
|
+
return props.onSetOperationFieldData(operationIndex, data);
|
|
52
|
+
}
|
|
53
|
+
}));
|
|
54
|
+
})), /*#__PURE__*/_react.default.createElement(_AddOperation.AddOperation, {
|
|
55
|
+
disabled: !props.vm.canAddOperation,
|
|
56
|
+
onClick: function onClick() {
|
|
57
|
+
return props.onAdd();
|
|
58
|
+
}
|
|
59
|
+
}));
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
exports.BatchEditor = BatchEditor;
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=BatchEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_mobxReactLite","_delete_outline","_form","_Accordion","_AddOperation","_Operation","_ActionEdit","BatchEditor","observer","props","formRef","React","createRef","useEffect","current","onForm","default","createElement","Form","ref","data","vm","onChange","onSubmit","invalidFields","BatchEditorContainer","Accordion","elevation","operations","map","operation","operationIndex","AccordionItem","key","concat","title","open","actions","Actions","Action","icon","ReactComponent","onClick","onDelete","disabled","canDelete","Operation","name","onSetOperationFieldData","AddOperation","canAddOperation","onAdd","exports"],"sources":["BatchEditor.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\n\nimport { observer } from \"mobx-react-lite\";\nimport { ReactComponent as DeleteIcon } from \"@material-design-icons/svg/outlined/delete_outline.svg\";\nimport { Form, FormAPI, FormOnSubmit } from \"@webiny/form\";\nimport { Accordion, AccordionItem } from \"@webiny/ui/Accordion\";\n\nimport { AddOperation } from \"~/components/BulkActions/ActionEdit/BatchEditorDialog/AddOperation\";\nimport { Operation } from \"~/components/BulkActions/ActionEdit/BatchEditorDialog/Operation\";\nimport {\n BatchEditorDialogViewModel,\n BatchEditorFormData\n} from \"~/components/BulkActions/ActionEdit/BatchEditorDialog/BatchEditorDialogPresenter\";\nimport { BatchEditorContainer } from \"~/components/BulkActions/ActionEdit/ActionEdit.styled\";\n\nexport interface BatchEditorProps {\n onForm: (form: FormAPI) => void;\n onAdd: () => void;\n onDelete: (operationIndex: number) => void;\n onChange: (data: BatchEditorFormData) => void;\n onSetOperationFieldData: (operationIndex: number, data: string) => void;\n onSubmit: FormOnSubmit<BatchEditorFormData>;\n vm: BatchEditorDialogViewModel;\n}\n\nexport const BatchEditor = observer((props: BatchEditorProps) => {\n const formRef = React.createRef<FormAPI>();\n\n useEffect(() => {\n if (formRef.current) {\n props.onForm(formRef.current);\n }\n }, []);\n\n return (\n <Form\n ref={formRef}\n data={props.vm.data}\n onChange={props.onChange}\n onSubmit={props.onSubmit}\n invalidFields={props.vm.invalidFields}\n >\n {() => (\n <BatchEditorContainer>\n <Accordion elevation={1}>\n {props.vm.data.operations.map((operation, operationIndex) => (\n <AccordionItem\n key={`operation-${operationIndex}`}\n title={operation.title}\n open={operation.open}\n actions={\n <AccordionItem.Actions>\n <AccordionItem.Action\n icon={<DeleteIcon />}\n onClick={() => props.onDelete(operationIndex)}\n disabled={!operation.canDelete}\n />\n </AccordionItem.Actions>\n }\n >\n <Operation\n name={`operations.${operationIndex}`}\n operation={operation}\n onDelete={() => props.onDelete(operationIndex)}\n onSetOperationFieldData={data =>\n props.onSetOperationFieldData(operationIndex, data)\n }\n />\n </AccordionItem>\n ))}\n </Accordion>\n <AddOperation\n disabled={!props.vm.canAddOperation}\n onClick={() => props.onAdd()}\n />\n </BatchEditorContainer>\n )}\n </Form>\n );\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { BatchDTO, FieldDTO } from "../domain";
|
|
3
|
+
interface BatchEditorDialogProps {
|
|
4
|
+
fields: FieldDTO[];
|
|
5
|
+
batch: BatchDTO;
|
|
6
|
+
vm: {
|
|
7
|
+
isOpen: boolean;
|
|
8
|
+
};
|
|
9
|
+
onApply: (batch: BatchDTO) => void;
|
|
10
|
+
onClose: () => void;
|
|
11
|
+
}
|
|
12
|
+
export declare const BatchEditorDialog: ((props: BatchEditorDialogProps) => JSX.Element) & {
|
|
13
|
+
displayName: string;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.BatchEditorDialog = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _mobxReactLite = require("mobx-react-lite");
|
|
10
|
+
var _Button = require("@webiny/ui/Button");
|
|
11
|
+
var _Dialog = require("@webiny/ui/Dialog");
|
|
12
|
+
var _BatchEditorDialogPresenter = require("./BatchEditorDialogPresenter");
|
|
13
|
+
var _BatchEditor = require("./BatchEditor");
|
|
14
|
+
var _ActionEdit = require("../ActionEdit.styled");
|
|
15
|
+
var BatchEditorDialog = (0, _mobxReactLite.observer)(function (props) {
|
|
16
|
+
var presenter = (0, _react.useMemo)(function () {
|
|
17
|
+
return new _BatchEditorDialogPresenter.BatchEditorDialogPresenter();
|
|
18
|
+
}, []);
|
|
19
|
+
(0, _react.useEffect)(function () {
|
|
20
|
+
presenter.load(props.batch, props.fields);
|
|
21
|
+
}, [props.batch, props.fields]);
|
|
22
|
+
var _onChange = function onChange(data) {
|
|
23
|
+
presenter.setBatch(data);
|
|
24
|
+
};
|
|
25
|
+
var onApply = function onApply() {
|
|
26
|
+
presenter.onApply(function (batch) {
|
|
27
|
+
props.onApply(batch);
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
var ref = (0, _react.useRef)(null);
|
|
31
|
+
return /*#__PURE__*/_react.default.createElement(_ActionEdit.DialogContainer, {
|
|
32
|
+
open: props.vm.isOpen,
|
|
33
|
+
onClose: props.onClose
|
|
34
|
+
}, props.vm.isOpen ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Dialog.DialogTitle, null, "Edit items"), /*#__PURE__*/_react.default.createElement(_Dialog.DialogContent, null, /*#__PURE__*/_react.default.createElement(_ActionEdit.ActionEditFormContainer, null, /*#__PURE__*/_react.default.createElement(_BatchEditor.BatchEditor, {
|
|
35
|
+
onForm: function onForm(form) {
|
|
36
|
+
return ref.current = form;
|
|
37
|
+
},
|
|
38
|
+
onChange: function onChange(data) {
|
|
39
|
+
return _onChange(data);
|
|
40
|
+
},
|
|
41
|
+
onSubmit: onApply,
|
|
42
|
+
onDelete: function onDelete(operationIndex) {
|
|
43
|
+
return presenter.deleteOperation(operationIndex);
|
|
44
|
+
},
|
|
45
|
+
onAdd: function onAdd() {
|
|
46
|
+
return presenter.addOperation();
|
|
47
|
+
},
|
|
48
|
+
onSetOperationFieldData: function onSetOperationFieldData(operationIndex, data) {
|
|
49
|
+
return presenter.setOperationFieldData(operationIndex, data);
|
|
50
|
+
},
|
|
51
|
+
vm: presenter.vm
|
|
52
|
+
}))), /*#__PURE__*/_react.default.createElement(_Dialog.DialogActions, null, /*#__PURE__*/_react.default.createElement(_Dialog.DialogCancel, {
|
|
53
|
+
onClick: props.onClose
|
|
54
|
+
}, "Cancel"), /*#__PURE__*/_react.default.createElement(_Button.ButtonPrimary, {
|
|
55
|
+
onClick: onApply
|
|
56
|
+
}, "Submit"))) : null);
|
|
57
|
+
});
|
|
58
|
+
exports.BatchEditorDialog = BatchEditorDialog;
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=BatchEditorDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_mobxReactLite","_Button","_Dialog","_BatchEditorDialogPresenter","_BatchEditor","_ActionEdit","BatchEditorDialog","observer","props","presenter","useMemo","BatchEditorDialogPresenter","useEffect","load","batch","fields","onChange","data","setBatch","onApply","ref","useRef","default","createElement","DialogContainer","open","vm","isOpen","onClose","Fragment","DialogTitle","DialogContent","ActionEditFormContainer","BatchEditor","onForm","form","current","onSubmit","onDelete","operationIndex","deleteOperation","onAdd","addOperation","onSetOperationFieldData","setOperationFieldData","DialogActions","DialogCancel","onClick","ButtonPrimary","exports"],"sources":["BatchEditorDialog.tsx"],"sourcesContent":["import React, { useMemo, useEffect, useRef } from \"react\";\n\nimport { observer } from \"mobx-react-lite\";\nimport { FormAPI } from \"@webiny/form\";\nimport { ButtonPrimary } from \"@webiny/ui/Button\";\nimport { DialogActions, DialogCancel, DialogContent, DialogTitle } from \"@webiny/ui/Dialog\";\n\nimport { BatchEditorDialogPresenter, BatchEditorFormData } from \"./BatchEditorDialogPresenter\";\nimport { BatchEditor } from \"~/components/BulkActions/ActionEdit/BatchEditorDialog/BatchEditor\";\nimport { ActionEditFormContainer, DialogContainer } from \"../ActionEdit.styled\";\nimport { BatchDTO, FieldDTO } from \"~/components/BulkActions/ActionEdit/domain\";\n\ninterface BatchEditorDialogProps {\n fields: FieldDTO[];\n batch: BatchDTO;\n vm: {\n isOpen: boolean;\n };\n onApply: (batch: BatchDTO) => void;\n onClose: () => void;\n}\n\nexport const BatchEditorDialog = observer((props: BatchEditorDialogProps) => {\n const presenter = useMemo<BatchEditorDialogPresenter>(() => {\n return new BatchEditorDialogPresenter();\n }, []);\n\n useEffect(() => {\n presenter.load(props.batch, props.fields);\n }, [props.batch, props.fields]);\n\n const onChange = (data: BatchEditorFormData) => {\n presenter.setBatch(data);\n };\n\n const onApply = () => {\n presenter.onApply(batch => {\n props.onApply(batch);\n });\n };\n\n const ref = useRef<FormAPI | null>(null);\n\n return (\n <DialogContainer open={props.vm.isOpen} onClose={props.onClose}>\n {props.vm.isOpen ? (\n <>\n <DialogTitle>{\"Edit items\"}</DialogTitle>\n <DialogContent>\n <ActionEditFormContainer>\n <BatchEditor\n onForm={form => (ref.current = form)}\n onChange={data => onChange(data)}\n onSubmit={onApply}\n onDelete={operationIndex =>\n presenter.deleteOperation(operationIndex)\n }\n onAdd={() => presenter.addOperation()}\n onSetOperationFieldData={(operationIndex, data) =>\n presenter.setOperationFieldData(operationIndex, data)\n }\n vm={presenter.vm}\n />\n </ActionEditFormContainer>\n </DialogContent>\n <DialogActions>\n <DialogCancel onClick={props.onClose}>{\"Cancel\"}</DialogCancel>\n <ButtonPrimary onClick={onApply}>{\"Submit\"}</ButtonPrimary>\n </DialogActions>\n </>\n ) : null}\n </DialogContainer>\n );\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { BatchDTO, FieldDTO, OperationDTO, OperatorDTO } from "../domain";
|
|
2
|
+
export interface IBatchEditorDialogPresenter {
|
|
3
|
+
load(batch: BatchDTO, fields: FieldDTO[]): void;
|
|
4
|
+
addOperation(): void;
|
|
5
|
+
deleteOperation(operationIndex: number): void;
|
|
6
|
+
setOperationFieldData(operationIndex: number, data: string): void;
|
|
7
|
+
setBatch(data: any): void;
|
|
8
|
+
onApply(onSuccess?: (batch: BatchDTO) => void, onError?: (batch: BatchDTO) => void): void;
|
|
9
|
+
get vm(): BatchEditorDialogViewModel;
|
|
10
|
+
}
|
|
11
|
+
export interface BatchEditorDialogViewModel {
|
|
12
|
+
invalidFields: Record<string, {
|
|
13
|
+
isValid: boolean;
|
|
14
|
+
message: string;
|
|
15
|
+
}>;
|
|
16
|
+
canAddOperation: boolean;
|
|
17
|
+
data: BatchEditorFormData;
|
|
18
|
+
}
|
|
19
|
+
export interface BatchEditorFormData {
|
|
20
|
+
operations: OperationFormData[];
|
|
21
|
+
}
|
|
22
|
+
export declare type OperationFormData = OperationDTO & {
|
|
23
|
+
canDelete: boolean;
|
|
24
|
+
title: string;
|
|
25
|
+
open: boolean;
|
|
26
|
+
fieldOptions: FieldDTO[];
|
|
27
|
+
operatorOptions: OperatorDTO[];
|
|
28
|
+
selectedField?: FieldDTO;
|
|
29
|
+
};
|
|
30
|
+
export declare class BatchEditorDialogPresenter implements IBatchEditorDialogPresenter {
|
|
31
|
+
private batch;
|
|
32
|
+
private fields;
|
|
33
|
+
private invalidFields;
|
|
34
|
+
private formWasSubmitted;
|
|
35
|
+
constructor();
|
|
36
|
+
load(batch: BatchDTO, fields: FieldDTO[]): void;
|
|
37
|
+
get vm(): {
|
|
38
|
+
invalidFields: Record<string, {
|
|
39
|
+
isValid: boolean;
|
|
40
|
+
message: string;
|
|
41
|
+
}>;
|
|
42
|
+
canAddOperation: boolean;
|
|
43
|
+
data: {
|
|
44
|
+
operations: {
|
|
45
|
+
title: string;
|
|
46
|
+
open: boolean;
|
|
47
|
+
field: string;
|
|
48
|
+
operator: string;
|
|
49
|
+
value: Record<string, any> | undefined;
|
|
50
|
+
canDelete: boolean;
|
|
51
|
+
fieldOptions: FieldDTO[];
|
|
52
|
+
selectedField: FieldDTO | undefined;
|
|
53
|
+
operatorOptions: OperatorDTO[];
|
|
54
|
+
}[];
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
private getOperations;
|
|
58
|
+
private getOperationTitle;
|
|
59
|
+
private getFieldOptions;
|
|
60
|
+
addOperation(): void;
|
|
61
|
+
deleteOperation(operationIndex: number): void;
|
|
62
|
+
setOperationFieldData(batchIndex: number, data: string): void;
|
|
63
|
+
setBatch(data: BatchEditorFormData): void;
|
|
64
|
+
onApply(onSuccess?: (batch: BatchDTO) => void, onError?: (batch: BatchDTO, invalidFields: BatchEditorDialogViewModel["invalidFields"]) => void): void;
|
|
65
|
+
private validateBatch;
|
|
66
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.BatchEditorDialogPresenter = void 0;
|
|
8
|
+
var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
var _mobx = require("mobx");
|
|
14
|
+
var _domain = require("../domain");
|
|
15
|
+
var BatchEditorDialogPresenter = /*#__PURE__*/function () {
|
|
16
|
+
function BatchEditorDialogPresenter() {
|
|
17
|
+
var _this = this;
|
|
18
|
+
(0, _classCallCheck2.default)(this, BatchEditorDialogPresenter);
|
|
19
|
+
(0, _defineProperty2.default)(this, "invalidFields", {});
|
|
20
|
+
(0, _defineProperty2.default)(this, "formWasSubmitted", false);
|
|
21
|
+
(0, _defineProperty2.default)(this, "getOperations", function () {
|
|
22
|
+
var _this$batch;
|
|
23
|
+
return ((_this$batch = _this.batch) === null || _this$batch === void 0 ? void 0 : _this$batch.operations.map(function (operation, operationIndex) {
|
|
24
|
+
var _this$getOperationTit;
|
|
25
|
+
var fieldOptions = _this.getFieldOptions(operation.field);
|
|
26
|
+
var selectedField = fieldOptions.find(function (field) {
|
|
27
|
+
return field.value === operation.field;
|
|
28
|
+
});
|
|
29
|
+
var operatorOptions = (selectedField === null || selectedField === void 0 ? void 0 : selectedField.operators) || [];
|
|
30
|
+
return {
|
|
31
|
+
title: (_this$getOperationTit = _this.getOperationTitle(operation.field, operation.operator)) !== null && _this$getOperationTit !== void 0 ? _this$getOperationTit : "Operation #".concat(operationIndex + 1),
|
|
32
|
+
open: true,
|
|
33
|
+
field: operation.field,
|
|
34
|
+
operator: operation.operator,
|
|
35
|
+
value: operation.value,
|
|
36
|
+
canDelete: operationIndex !== 0,
|
|
37
|
+
fieldOptions: fieldOptions,
|
|
38
|
+
selectedField: selectedField,
|
|
39
|
+
operatorOptions: operatorOptions
|
|
40
|
+
};
|
|
41
|
+
})) || [];
|
|
42
|
+
});
|
|
43
|
+
this.batch = undefined;
|
|
44
|
+
this.fields = [];
|
|
45
|
+
(0, _mobx.makeAutoObservable)(this);
|
|
46
|
+
}
|
|
47
|
+
(0, _createClass2.default)(BatchEditorDialogPresenter, [{
|
|
48
|
+
key: "load",
|
|
49
|
+
value: function load(batch, fields) {
|
|
50
|
+
this.batch = batch;
|
|
51
|
+
this.fields = fields;
|
|
52
|
+
}
|
|
53
|
+
}, {
|
|
54
|
+
key: "vm",
|
|
55
|
+
get: function get() {
|
|
56
|
+
var _ref;
|
|
57
|
+
var operations = this.getOperations();
|
|
58
|
+
var canAddOperation = (_ref = operations[operations.length - 1].fieldOptions.length > 1) !== null && _ref !== void 0 ? _ref : false;
|
|
59
|
+
return {
|
|
60
|
+
invalidFields: this.invalidFields,
|
|
61
|
+
canAddOperation: canAddOperation,
|
|
62
|
+
data: {
|
|
63
|
+
operations: operations
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}, {
|
|
68
|
+
key: "getOperationTitle",
|
|
69
|
+
value: function getOperationTitle(inputField, inputOperation) {
|
|
70
|
+
if (!inputField || !inputOperation) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
var field = this.fields.find(function (field) {
|
|
74
|
+
return field.value === inputField;
|
|
75
|
+
});
|
|
76
|
+
if (!field) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
var operator = field.operators.find(function (operator) {
|
|
80
|
+
return operator.value === inputOperation;
|
|
81
|
+
});
|
|
82
|
+
if (!operator) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
return "".concat(operator.label, " for field \"").concat(field.label, "\"");
|
|
86
|
+
}
|
|
87
|
+
}, {
|
|
88
|
+
key: "getFieldOptions",
|
|
89
|
+
value: function getFieldOptions() {
|
|
90
|
+
var currentFieldId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
|
|
91
|
+
if (!this.batch) {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
var existings = this.batch.operations.filter(function (operation) {
|
|
95
|
+
return operation.field !== currentFieldId;
|
|
96
|
+
}).map(function (operation) {
|
|
97
|
+
return operation.field;
|
|
98
|
+
});
|
|
99
|
+
return this.fields.filter(function (field) {
|
|
100
|
+
return !existings.includes(field.value);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}, {
|
|
104
|
+
key: "addOperation",
|
|
105
|
+
value: function addOperation() {
|
|
106
|
+
if (!this.batch) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
this.batch.operations.push({
|
|
110
|
+
field: "",
|
|
111
|
+
operator: "",
|
|
112
|
+
value: {}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}, {
|
|
116
|
+
key: "deleteOperation",
|
|
117
|
+
value: function deleteOperation(operationIndex) {
|
|
118
|
+
if (!this.batch) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
this.batch.operations = this.batch.operations.filter(function (_, index) {
|
|
122
|
+
return index !== operationIndex;
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// Make sure we always have at least 1 operation!
|
|
126
|
+
if (this.batch.operations.length === 0) {
|
|
127
|
+
this.addOperation();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}, {
|
|
131
|
+
key: "setOperationFieldData",
|
|
132
|
+
value: function setOperationFieldData(batchIndex, data) {
|
|
133
|
+
if (!this.batch) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
this.batch.operations = [].concat((0, _toConsumableArray2.default)(this.batch.operations.slice(0, batchIndex)), [{
|
|
137
|
+
field: data,
|
|
138
|
+
operator: "",
|
|
139
|
+
value: {}
|
|
140
|
+
}], (0, _toConsumableArray2.default)(this.batch.operations.slice(batchIndex + 1)));
|
|
141
|
+
}
|
|
142
|
+
}, {
|
|
143
|
+
key: "setBatch",
|
|
144
|
+
value: function setBatch(data) {
|
|
145
|
+
if (!this.batch) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
this.batch = (0, _objectSpread3.default)((0, _objectSpread3.default)({}, this.batch), {}, {
|
|
149
|
+
operations: data.operations.map(function (operation) {
|
|
150
|
+
return {
|
|
151
|
+
field: operation.field,
|
|
152
|
+
operator: operation.operator,
|
|
153
|
+
value: operation.value
|
|
154
|
+
};
|
|
155
|
+
})
|
|
156
|
+
});
|
|
157
|
+
if (this.formWasSubmitted) {
|
|
158
|
+
this.validateBatch(this.batch);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}, {
|
|
162
|
+
key: "onApply",
|
|
163
|
+
value: function onApply(onSuccess, onError) {
|
|
164
|
+
if (!this.batch) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
var result = this.validateBatch(this.batch);
|
|
168
|
+
if (result.success) {
|
|
169
|
+
onSuccess && onSuccess(this.batch);
|
|
170
|
+
} else {
|
|
171
|
+
onError && onError(this.batch, this.invalidFields);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}, {
|
|
175
|
+
key: "validateBatch",
|
|
176
|
+
value: function validateBatch(data) {
|
|
177
|
+
this.formWasSubmitted = true;
|
|
178
|
+
var validation = _domain.Batch.validate(data);
|
|
179
|
+
if (!validation.success) {
|
|
180
|
+
this.invalidFields = validation.error.issues.reduce(function (acc, issue) {
|
|
181
|
+
return (0, _objectSpread3.default)((0, _objectSpread3.default)({}, acc), {}, (0, _defineProperty2.default)({}, issue.path.join("."), issue.message));
|
|
182
|
+
}, {});
|
|
183
|
+
} else {
|
|
184
|
+
this.invalidFields = {};
|
|
185
|
+
}
|
|
186
|
+
return validation;
|
|
187
|
+
}
|
|
188
|
+
}]);
|
|
189
|
+
return BatchEditorDialogPresenter;
|
|
190
|
+
}();
|
|
191
|
+
exports.BatchEditorDialogPresenter = BatchEditorDialogPresenter;
|
|
192
|
+
|
|
193
|
+
//# sourceMappingURL=BatchEditorDialogPresenter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_mobx","require","_domain","BatchEditorDialogPresenter","_this","_classCallCheck2","default","_defineProperty2","_this$batch","batch","operations","map","operation","operationIndex","_this$getOperationTit","fieldOptions","getFieldOptions","field","selectedField","find","value","operatorOptions","operators","title","getOperationTitle","operator","concat","open","canDelete","undefined","fields","makeAutoObservable","_createClass2","key","load","get","_ref","getOperations","canAddOperation","length","invalidFields","data","inputField","inputOperation","label","currentFieldId","arguments","existings","filter","includes","addOperation","push","deleteOperation","_","index","setOperationFieldData","batchIndex","_toConsumableArray2","slice","setBatch","_objectSpread3","formWasSubmitted","validateBatch","onApply","onSuccess","onError","result","success","validation","Batch","validate","error","issues","reduce","acc","issue","path","join","message","exports"],"sources":["BatchEditorDialogPresenter.tsx"],"sourcesContent":["import { makeAutoObservable } from \"mobx\";\n\nimport {\n Batch,\n BatchDTO,\n FieldDTO,\n OperationDTO,\n OperatorDTO\n} from \"~/components/BulkActions/ActionEdit/domain\";\n\nexport interface IBatchEditorDialogPresenter {\n load(batch: BatchDTO, fields: FieldDTO[]): void;\n addOperation(): void;\n deleteOperation(operationIndex: number): void;\n setOperationFieldData(operationIndex: number, data: string): void;\n setBatch(data: any): void;\n onApply(onSuccess?: (batch: BatchDTO) => void, onError?: (batch: BatchDTO) => void): void;\n get vm(): BatchEditorDialogViewModel;\n}\n\nexport interface BatchEditorDialogViewModel {\n invalidFields: Record<string, { isValid: boolean; message: string }>;\n canAddOperation: boolean;\n data: BatchEditorFormData;\n}\n\nexport interface BatchEditorFormData {\n operations: OperationFormData[];\n}\n\nexport type OperationFormData = OperationDTO & {\n canDelete: boolean;\n title: string;\n open: boolean;\n fieldOptions: FieldDTO[];\n operatorOptions: OperatorDTO[];\n selectedField?: FieldDTO;\n};\n\nexport class BatchEditorDialogPresenter implements IBatchEditorDialogPresenter {\n private batch: BatchDTO | undefined;\n private fields: FieldDTO[];\n private invalidFields: BatchEditorDialogViewModel[\"invalidFields\"] = {};\n private formWasSubmitted = false;\n\n constructor() {\n this.batch = undefined;\n this.fields = [];\n makeAutoObservable(this);\n }\n\n load(batch: BatchDTO, fields: FieldDTO[]) {\n this.batch = batch;\n this.fields = fields;\n }\n\n get vm() {\n const operations = this.getOperations();\n const canAddOperation = operations[operations.length - 1].fieldOptions.length > 1 ?? false;\n\n return {\n invalidFields: this.invalidFields,\n canAddOperation,\n data: {\n operations\n }\n };\n }\n\n private getOperations = () => {\n return (\n this.batch?.operations.map((operation: OperationDTO, operationIndex) => {\n const fieldOptions = this.getFieldOptions(operation.field);\n const selectedField = fieldOptions.find(field => field.value === operation.field);\n const operatorOptions = selectedField?.operators || [];\n\n return {\n title:\n this.getOperationTitle(operation.field, operation.operator) ??\n `Operation #${operationIndex + 1}`,\n open: true,\n field: operation.field,\n operator: operation.operator,\n value: operation.value,\n canDelete: operationIndex !== 0,\n fieldOptions,\n selectedField,\n operatorOptions\n };\n }) || []\n );\n };\n\n private getOperationTitle(inputField?: string, inputOperation?: string) {\n if (!inputField || !inputOperation) {\n return undefined;\n }\n\n const field = this.fields.find(field => field.value === inputField);\n\n if (!field) {\n return undefined;\n }\n\n const operator = field.operators.find(operator => operator.value === inputOperation);\n\n if (!operator) {\n return undefined;\n }\n\n return `${operator.label} for field \"${field.label}\"`;\n }\n\n private getFieldOptions(currentFieldId = \"\") {\n if (!this.batch) {\n return [];\n }\n\n const existings = this.batch.operations\n .filter(operation => operation.field !== currentFieldId)\n .map(operation => operation.field);\n\n return this.fields.filter(field => !existings.includes(field.value));\n }\n\n addOperation(): void {\n if (!this.batch) {\n return;\n }\n\n this.batch.operations.push({\n field: \"\",\n operator: \"\",\n value: {}\n });\n }\n\n deleteOperation(operationIndex: number): void {\n if (!this.batch) {\n return;\n }\n\n this.batch.operations = this.batch.operations.filter(\n (_, index) => index !== operationIndex\n );\n\n // Make sure we always have at least 1 operation!\n if (this.batch.operations.length === 0) {\n this.addOperation();\n }\n }\n\n setOperationFieldData(batchIndex: number, data: string) {\n if (!this.batch) {\n return;\n }\n\n this.batch.operations = [\n ...this.batch.operations.slice(0, batchIndex),\n {\n field: data,\n operator: \"\",\n value: {}\n },\n ...this.batch.operations.slice(batchIndex + 1)\n ];\n }\n\n setBatch(data: BatchEditorFormData): void {\n if (!this.batch) {\n return;\n }\n\n this.batch = {\n ...this.batch,\n operations: data.operations.map(operation => ({\n field: operation.field,\n operator: operation.operator,\n value: operation.value\n }))\n };\n\n if (this.formWasSubmitted) {\n this.validateBatch(this.batch);\n }\n }\n\n onApply(\n onSuccess?: (batch: BatchDTO) => void,\n onError?: (\n batch: BatchDTO,\n invalidFields: BatchEditorDialogViewModel[\"invalidFields\"]\n ) => void\n ) {\n if (!this.batch) {\n return;\n }\n\n const result = this.validateBatch(this.batch);\n if (result.success) {\n onSuccess && onSuccess(this.batch);\n } else {\n onError && onError(this.batch, this.invalidFields);\n }\n }\n\n private validateBatch(data: BatchDTO) {\n this.formWasSubmitted = true;\n const validation = Batch.validate(data);\n\n if (!validation.success) {\n this.invalidFields = validation.error.issues.reduce((acc, issue) => {\n return {\n ...acc,\n [issue.path.join(\".\")]: issue.message\n };\n }, {});\n } else {\n this.invalidFields = {};\n }\n\n return validation;\n }\n}\n"],"mappings":"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"}
|
package/components/BulkActions/ActionEdit/BatchEditorDialog/BatchEditorDialogPresenter.test.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|