vgapp 0.7.4 → 0.7.5
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/CHANGELOG.md +35 -0
- package/app/modules/vgformsender/js/vgformsender.js +59 -33
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,38 @@
|
|
|
1
|
+
# VEGAS-APP 0.7.5 (Декабрь, 08, 2025)
|
|
2
|
+
* В модуль VGFORSENDER добавлен параметр `fields` для программного добавление новых полей в FormData,
|
|
3
|
+
если в значении объекта окажется массив или объект, то сформируется json строка
|
|
4
|
+
```
|
|
5
|
+
{
|
|
6
|
+
...
|
|
7
|
+
fields: [
|
|
8
|
+
{
|
|
9
|
+
name: Andranik,
|
|
10
|
+
surname: Gasparyan
|
|
11
|
+
},
|
|
12
|
+
...
|
|
13
|
+
{
|
|
14
|
+
json: [{key: value}]
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
* Хак на кнопку отправки `onclick` можно повесить колбек на событие
|
|
20
|
+
```
|
|
21
|
+
<button type="submit" class="btn btn-primary"
|
|
22
|
+
onclick='vg.VGFormSender.buttonClick("#form-simple", function (form, self) {
|
|
23
|
+
self._button.innerHTML = `<span class="spinner-border spinner-border-sm"></span>`;
|
|
24
|
+
}, "before")'
|
|
25
|
+
>
|
|
26
|
+
<span>Сохранить</span>
|
|
27
|
+
</button>
|
|
28
|
+
```
|
|
29
|
+
у модуля три события `before`, `error` и `success`
|
|
30
|
+
|
|
31
|
+
* Исправлены ошибки в разных модулях
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
1
36
|
# VEGAS-APP 0.7.2 - 0.7.4 (Декабрь, 04, 2025)
|
|
2
37
|
* Новые стили и иконки для success, info, danger, warning
|
|
3
38
|
* Исправлены ошибки в разных модулях
|
|
@@ -16,12 +16,6 @@ import VGCollapse from "../../vgcollapse/js/vgcollapse";
|
|
|
16
16
|
import {getSVG} from "../../module-fn";
|
|
17
17
|
import VGHideShowPass from "./hideshowpass";
|
|
18
18
|
|
|
19
|
-
/**
|
|
20
|
-
* TODO
|
|
21
|
-
* доделай динамическое добавление полей в форму,
|
|
22
|
-
* но не меняй место их получения (их нужно получить прямо перед отправкой, после того как выполнился промис beforeSend)
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
19
|
/**
|
|
26
20
|
* Constants
|
|
27
21
|
*/
|
|
@@ -102,13 +96,15 @@ class VGFormSender extends BaseModule {
|
|
|
102
96
|
spinner: {
|
|
103
97
|
enabled: false,
|
|
104
98
|
element: '<span class="spinner-border spinner-border-sm me-2"></span>'
|
|
105
|
-
}
|
|
99
|
+
},
|
|
100
|
+
click: noop,
|
|
106
101
|
},
|
|
107
102
|
}, params));
|
|
108
103
|
|
|
104
|
+
this._button = Selectors.find('[type="submit"]', this._element) || Selectors.find('[form="' + this._element.id + '"]') || null;
|
|
105
|
+
|
|
109
106
|
this._params.ajax.route = Manipulator.get(this._element, 'action').toLowerCase();
|
|
110
107
|
this._params.ajax.method = Manipulator.get(this._element, 'method').toLowerCase();
|
|
111
|
-
this._button = Selectors.find('[type="submit"]', this._element) || Selectors.find('[form="' + this._element.id + '"]') || null;
|
|
112
108
|
|
|
113
109
|
this._params.isBtnText = Manipulator.get(this._element, 'data-btn-text') !== 'false';
|
|
114
110
|
this._params.isJsonParse = Manipulator.get(this._element, 'data-json-parse') !== 'false';
|
|
@@ -151,13 +147,23 @@ class VGFormSender extends BaseModule {
|
|
|
151
147
|
return this
|
|
152
148
|
}
|
|
153
149
|
|
|
154
|
-
request(
|
|
150
|
+
request(event, data = null) {
|
|
155
151
|
const _this = this;
|
|
152
|
+
const mergeFormData = (target, source) => {
|
|
153
|
+
source.forEach((value, key) => {
|
|
154
|
+
target.set(key, value);
|
|
155
|
+
});
|
|
156
|
+
return target;
|
|
157
|
+
}
|
|
156
158
|
|
|
157
159
|
_this._alertBefore();
|
|
158
160
|
|
|
159
161
|
const submit = () => {
|
|
160
|
-
|
|
162
|
+
let formData = new FormData(_this._element);
|
|
163
|
+
|
|
164
|
+
if (data) _this._params.ajax.data = mergeFormData(data, formData);
|
|
165
|
+
else _this._params.ajax.data = formData;
|
|
166
|
+
|
|
161
167
|
_this._route(function (status, data) {
|
|
162
168
|
_this._element.classList.remove('was-validated');
|
|
163
169
|
|
|
@@ -229,11 +235,23 @@ class VGFormSender extends BaseModule {
|
|
|
229
235
|
EventHandler.trigger(_this._element, EVENT_KEY_SUCCESS, [event, _this, data]);
|
|
230
236
|
}
|
|
231
237
|
|
|
238
|
+
static buttonClick(formID, callback, status = 'before') {
|
|
239
|
+
const form = Selectors.find(formID);
|
|
240
|
+
if (form) {
|
|
241
|
+
const instance = VGFormSender.getOrCreateInstance(formID);
|
|
242
|
+
form.addEventListener('vg.fs.' + status, e => {
|
|
243
|
+
execute(callback, [form, instance])
|
|
244
|
+
})
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
232
248
|
_statusButton(status) {
|
|
233
249
|
if (!this._button) return;
|
|
234
250
|
|
|
235
251
|
if (status === 'before') {
|
|
236
|
-
const button =
|
|
252
|
+
const button = this._button;
|
|
253
|
+
|
|
254
|
+
this._params.button.initial = this._button.innerHTML.trim();
|
|
237
255
|
|
|
238
256
|
if (this._params.button.spinner.enabled) {
|
|
239
257
|
this._button.insertAdjacentHTML('afterbegin', this._params.button.spinner.element);
|
|
@@ -246,19 +264,25 @@ class VGFormSender extends BaseModule {
|
|
|
246
264
|
if (this._params.button.disabled) {
|
|
247
265
|
Manipulator.set(this._button,'disabled', 'disabled');
|
|
248
266
|
}
|
|
267
|
+
|
|
268
|
+
execute(this._params.button.click, [this, this._button, 'before'])
|
|
249
269
|
}
|
|
250
270
|
|
|
251
271
|
if (status === 'after') {
|
|
252
272
|
if (this._params.button.enabled) {
|
|
253
273
|
this._button.innerHTML = this._params.button.initial;
|
|
254
274
|
}
|
|
275
|
+
|
|
255
276
|
if (this._params.button.disabled) {
|
|
256
277
|
Manipulator.remove(this._button,'disabled');
|
|
257
278
|
}
|
|
279
|
+
|
|
258
280
|
if (this._params.button.spinner.enabled) {
|
|
259
281
|
let spinner = this._button.querySelector('.spinner-border');
|
|
260
282
|
if (spinner) spinner.remove();
|
|
261
283
|
}
|
|
284
|
+
|
|
285
|
+
execute(this._params.button.click, [this, this._button, 'after'])
|
|
262
286
|
}
|
|
263
287
|
}
|
|
264
288
|
|
|
@@ -533,34 +557,36 @@ EventHandler.on(document, EVENT_SUBMIT_DATA_API, function (event) {
|
|
|
533
557
|
}
|
|
534
558
|
}
|
|
535
559
|
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
560
|
+
if (!instance._params.submit) {
|
|
561
|
+
event.preventDefault();
|
|
562
|
+
|
|
563
|
+
const collectData = function(data, fields) {
|
|
564
|
+
fields.forEach(function(field) {
|
|
565
|
+
if (isObject(field)) {
|
|
566
|
+
let keys = Object.keys(field);
|
|
567
|
+
keys.forEach(function(key) {
|
|
568
|
+
let value = normalizeData(field[key]);
|
|
569
|
+
|
|
570
|
+
if (Array.isArray(value) || isObject(value)) {
|
|
571
|
+
data.append(key, JSON.stringify(value));
|
|
572
|
+
} else {
|
|
573
|
+
data.append(key, value);
|
|
574
|
+
}
|
|
542
575
|
});
|
|
543
|
-
data.append(name, arr);
|
|
544
576
|
}
|
|
545
|
-
}
|
|
546
|
-
data.append(name, fields[name]);
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
return data;
|
|
551
|
-
}*/
|
|
577
|
+
});
|
|
552
578
|
|
|
553
|
-
|
|
554
|
-
|
|
579
|
+
return data;
|
|
580
|
+
}
|
|
555
581
|
|
|
556
|
-
|
|
582
|
+
let data = new FormData(instance._element),
|
|
583
|
+
fields = instance._params.fields;
|
|
557
584
|
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
}*/
|
|
585
|
+
if (Array.isArray(fields) && fields.length) {
|
|
586
|
+
data = collectData(data, fields);
|
|
587
|
+
}
|
|
562
588
|
|
|
563
|
-
return instance.request(event);
|
|
589
|
+
return instance.request(event, data);
|
|
564
590
|
}
|
|
565
591
|
})
|
|
566
592
|
|