@optimajet/workflow-designer 0.0.12 → 0.0.16
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/README.md
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# WorkflowEngine Designer
|
|
2
|
+
|
|
3
|
+
## Introduction
|
|
4
|
+
|
|
5
|
+
Библиотека для WorkflowEngine Designer создана, чтобы облегчить использование данного компонента. Она предоставляет удобный способ взаимодействия и для создания Workflow Designer на вашей веб-странице.
|
|
6
|
+
|
|
7
|
+
## Prerequisites
|
|
8
|
+
|
|
9
|
+
Для успешного использования данного пакета необходимо создать рабочую серверную часть WorkflowEngine, способный обрабатывать запросы от Workflow Designer.
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
```shell
|
|
14
|
+
npm install @optimajet/workflow-designer
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Basic Usage
|
|
18
|
+
|
|
19
|
+
```javascript
|
|
20
|
+
import WorkflowDesigner from '@optimajet/workflow-designer'
|
|
21
|
+
//import '@optimajet/workflow-designer/localization/workflowdesigner.localization_ru'
|
|
22
|
+
|
|
23
|
+
const data = {
|
|
24
|
+
schemecode: "<YOUR_SCHEME_CODE_VALUE>",
|
|
25
|
+
processid: undefined
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
var wfdesigner = new WorkflowDesigner({
|
|
29
|
+
apiurl: '<YOUR_API_URL_VALUE>',
|
|
30
|
+
renderTo: 'root', // index.html должен содержать <div id="root"></div>
|
|
31
|
+
graphwidth: window.innerWidth,
|
|
32
|
+
graphheight: window.innerHeight,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
if (wfdesigner.exists(data)) {
|
|
36
|
+
wfdesigner.load(data);
|
|
37
|
+
} else {
|
|
38
|
+
wfdesigner.create();
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
Данный фрагмент кода представляет собой всё необходимое для первоначального отображения Workflow Designer на вашей веб-странице. Разберём его поподробнее:
|
|
42
|
+
|
|
43
|
+
```javascript
|
|
44
|
+
import WorkflowDesigner from '@optimajet/workflow-designer'
|
|
45
|
+
//import '@optimajet/workflow-designer/localization/workflowdesigner.localization_ru'
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Данный участок отвечает за импорт конструктора `WorkflowDesigner`. Расскоментировав 2 строчку, вы можете локализировать workflow designer. По умолчанию workflow designer имеет английскую локализацию.
|
|
49
|
+
|
|
50
|
+
```javascript
|
|
51
|
+
const data = {
|
|
52
|
+
schemecode: "<YOUR_SCHEME_CODE_VALUE>",
|
|
53
|
+
processid: undefined
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
var wfdesigner = new WorkflowDesigner({
|
|
57
|
+
apiurl: '<YOUR_API_URL_VALUE>',
|
|
58
|
+
renderTo: 'root',
|
|
59
|
+
graphwidth: window.innerWidth,
|
|
60
|
+
graphheight: window.innerHeight,
|
|
61
|
+
});
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
В данном участке:
|
|
65
|
+
|
|
66
|
+
- `schemecode` - это код схемы Workflow, который необходимо отобразить в Workflow Designer.
|
|
67
|
+
- `processid` - представляет собой идентификатор процесса WorkflowEngine.
|
|
68
|
+
|
|
69
|
+
- конструктор `WorkflowDesigner`, который принимает обьект с настройками дизайнера и создает новый экземпляр класса WorkflowDesigner. В примере указаны все необходимые параметры конструктора, а именно HTTP-адрес WorkflowAPI для взаимодействия с серверной частью приложения (`apiurl`), доступную ширину (`graphwidth`) и высоту (`graphheight`) для отображения окна WorkflowDesigner, а также идентификатор элемента, внутри которого необходимо отрисовывать весь интерфейс WorkflowDesigner (`renderTo`) . С более подробным списком параметров вы можете ознакомиться в разделе **Designer** страницы документации для WorkflowEngine.
|
|
70
|
+
|
|
71
|
+
В случае, если вы хотите отобразить Workflow схему в интерфейсе Workflow Designer, то укажите в переменной `schemeсode` необходимое значение, а `processid` дайте значение `undefined`. В ситуации, когда вам нужно отобразить процесс Workflow, то установите значение `schemecode` в `undefined`, а переменной `processid` в требуемое значение идентификатора процесса WorkflowEngine.
|
|
72
|
+
|
|
73
|
+
```javascript
|
|
74
|
+
if (wfdesigner.exists(data)) {
|
|
75
|
+
wfdesigner.load(data);
|
|
76
|
+
} else {
|
|
77
|
+
wfdesigner.create();
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
На данном участке происходит проверка, существуют ли указанные выше данные и достпуны ли они для загрузки и отображения в WorkflowDesigner. В случае, если указанные данные существуют, то происходит их загрузка и последующая отрисовка. В противном случае, будет создана новая пустая Workflow схема.
|
|
82
|
+
|
|
83
|
+
## Сборка и запуск примера
|
|
84
|
+
|
|
85
|
+
Установите пакеты, нужные для корректной настройки webpack:
|
|
86
|
+
|
|
87
|
+
```shell
|
|
88
|
+
npm i -D @babel/preset-env @babel/core babel-loader css-loader html-webpack-plugin mini-css-extract-plugin uglifyjs-webpack-plugin
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Базовая конфигурация webpack имеет следующий вид:
|
|
92
|
+
|
|
93
|
+
```js
|
|
94
|
+
const HtmlWebpackPlugin = require('html-webpack-plugin'); // for generate an HTML5 file
|
|
95
|
+
const path = require('path')
|
|
96
|
+
const MiniCssExtractPlugin = require("mini-css-extract-plugin"); // to extract CSS into separate files
|
|
97
|
+
const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); // to minify your JavaScript
|
|
98
|
+
const webpack = require('webpack');
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
module.exports = () => ({
|
|
102
|
+
entry: {
|
|
103
|
+
wfesample: './src/index.js',
|
|
104
|
+
},
|
|
105
|
+
output: {
|
|
106
|
+
path: path.resolve(__dirname, 'dist'),
|
|
107
|
+
filename: '[name].min.js',
|
|
108
|
+
libraryTarget: "umd",
|
|
109
|
+
},
|
|
110
|
+
mode:'production',
|
|
111
|
+
|
|
112
|
+
optimization: {
|
|
113
|
+
minimizer: [new UglifyJsPlugin()],
|
|
114
|
+
},
|
|
115
|
+
module: {
|
|
116
|
+
rules: [
|
|
117
|
+
{
|
|
118
|
+
test: /\.css$/i,
|
|
119
|
+
use: [MiniCssExtractPlugin.loader, "css-loader"],
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
test: /\.m?js$/,
|
|
123
|
+
exclude: /(node_modules|bower_components)/,
|
|
124
|
+
use: {
|
|
125
|
+
loader: 'babel-loader',
|
|
126
|
+
options: {
|
|
127
|
+
presets: ['@babel/preset-env']
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
plugins: [
|
|
134
|
+
new HtmlWebpackPlugin({ template: './src/index.html' }),
|
|
135
|
+
new MiniCssExtractPlugin(),
|
|
136
|
+
new webpack.ContextReplacementPlugin(/moment[/\\]locale$/, /en/),
|
|
137
|
+
]
|
|
138
|
+
});
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Поддержка IE11
|
|
142
|
+
|
|
143
|
+
Для того чтобы дизайнер успешно работал в IE11, нужно немного модифицировать конфигурацию webpack в `webpack.config.js`, но для начала нам нужно добавить еще один пакет для транспиляции и модификации нашего JavaScript.
|
|
144
|
+
|
|
145
|
+
```shell
|
|
146
|
+
npm i -D @babel/plugin-proposal-decorators
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Теперь добавьте в конфигурациях webpack'a свойство `target: ['web', 'es5']` и измените в `module.rules` правило, содержащее `babel-loader`, на следующее:
|
|
150
|
+
|
|
151
|
+
```js
|
|
152
|
+
//...
|
|
153
|
+
rules: [
|
|
154
|
+
//...
|
|
155
|
+
{
|
|
156
|
+
test: /\.(js|jsx)$/,
|
|
157
|
+
exclude: /@babel(?:\/|\\{1,2})runtime|core-js/,
|
|
158
|
+
use: {
|
|
159
|
+
loader: 'babel-loader',
|
|
160
|
+
options: {
|
|
161
|
+
babelrc: false,
|
|
162
|
+
configFile: path.resolve(__dirname, 'babel.config.js'),
|
|
163
|
+
compact: false,
|
|
164
|
+
cacheDirectory: true,
|
|
165
|
+
sourceMaps: false,
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
]
|
|
170
|
+
//...
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Осталось создать файл `babel.config.js` в корне проекта. Файл должен содержать следующую конфигурацию для babel:
|
|
174
|
+
|
|
175
|
+
```js
|
|
176
|
+
module.exports = function (api) {
|
|
177
|
+
api.cache(true);
|
|
178
|
+
const presets = [
|
|
179
|
+
[
|
|
180
|
+
'@babel/preset-env',
|
|
181
|
+
{
|
|
182
|
+
corejs:"3",
|
|
183
|
+
useBuiltIns: 'entry',
|
|
184
|
+
targets: {
|
|
185
|
+
browsers: [
|
|
186
|
+
"edge >= 16",
|
|
187
|
+
"safari >= 9",
|
|
188
|
+
"firefox >= 57",
|
|
189
|
+
"ie >= 11",
|
|
190
|
+
"ios >= 9",
|
|
191
|
+
"chrome >= 49"
|
|
192
|
+
]
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
]
|
|
196
|
+
];
|
|
197
|
+
const plugins= [
|
|
198
|
+
["@babel/plugin-proposal-decorators", { decoratorsBeforeExport: true }],
|
|
199
|
+
["@babel/plugin-proposal-class-properties", { "loose": true }],
|
|
200
|
+
["@babel/plugin-transform-spread"]
|
|
201
|
+
];
|
|
202
|
+
return {
|
|
203
|
+
presets,
|
|
204
|
+
plugins
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Настройка успешно завершена, теперь вы можете наслаждаться пользованием WorkflowDesigner и в IE11.
|