|
@@ -28,6 +28,68 @@
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ window.autoSaveSegment = function(_trigger) {
|
|
|
+ saveVisitForm(_trigger, true);
|
|
|
+ };
|
|
|
+
|
|
|
+ function saveVisitForm(_trigger, _silent = false) {
|
|
|
+ let form = $(_trigger).closest('form');
|
|
|
+
|
|
|
+ if (!_silent && !form[0].checkValidity()) {
|
|
|
+ form[0].reportValidity();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // add [data-name] values to payload
|
|
|
+ let dataField = form.find('[name="data"]').first();
|
|
|
+ let parsed = null;
|
|
|
+ if(dataField.val()) {
|
|
|
+ parsed = JSON.parse(dataField.val());
|
|
|
+ }
|
|
|
+ form.find('[data-name]').each(function() {
|
|
|
+ if(!parsed) parsed = {};
|
|
|
+
|
|
|
+ let keys = $(this).attr('data-name').split('->');
|
|
|
+ let currentNode = parsed;
|
|
|
+ for (let i = 0; i < keys.length; i++) {
|
|
|
+ if(i !== keys.length - 1) {
|
|
|
+ if(typeof currentNode[keys[i]] === 'undefined') {
|
|
|
+ currentNode[keys[i]] = {};
|
|
|
+ }
|
|
|
+ currentNode = currentNode[keys[i]];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if($(this).is(':checkbox')) {
|
|
|
+ currentNode[keys[i]] = $(this).prop('checked');
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ currentNode[keys[i]] = $(this).val();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+ if(parsed) {
|
|
|
+ dataField.val(JSON.stringify(parsed));
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!_silent) showMask();
|
|
|
+
|
|
|
+ let closeOnSave = false, noteSection = form.closest('.note-section');
|
|
|
+ if($(_trigger).closest('[visit-moe]').is('[close-on-save]')) {
|
|
|
+ closeOnSave = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ $.post(form.attr('url'), form.serialize(), _data => {
|
|
|
+ if(!_silent) hideMask();
|
|
|
+ updateAllSegmentsInResponse(_data);
|
|
|
+ if(!_silent && closeOnSave) {
|
|
|
+ noteSection.removeClass('edit');
|
|
|
+ }
|
|
|
+ }, 'json');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
function initSegmentMoes(_parent) {
|
|
|
|
|
|
$('body')
|
|
@@ -42,61 +104,7 @@
|
|
|
_parent.find('[visit-moe] [submit]')
|
|
|
.off('click.visit-moe-submit')
|
|
|
.on('click.visit-moe-submit', function() {
|
|
|
- let form = $(this).closest('form');
|
|
|
-
|
|
|
- if (!form[0].checkValidity()) {
|
|
|
- form[0].reportValidity();
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- // add [data-name] values to payload
|
|
|
- let dataField = form.find('[name="data"]').first();
|
|
|
- let parsed = null;
|
|
|
- if(dataField.val()) {
|
|
|
- parsed = JSON.parse(dataField.val());
|
|
|
- }
|
|
|
- form.find('[data-name]').each(function() {
|
|
|
- if(!parsed) parsed = {};
|
|
|
-
|
|
|
- let keys = $(this).attr('data-name').split('->');
|
|
|
- let currentNode = parsed;
|
|
|
- for (let i = 0; i < keys.length; i++) {
|
|
|
- if(i !== keys.length - 1) {
|
|
|
- if(typeof currentNode[keys[i]] === 'undefined') {
|
|
|
- currentNode[keys[i]] = {};
|
|
|
- }
|
|
|
- currentNode = currentNode[keys[i]];
|
|
|
- }
|
|
|
- else {
|
|
|
- if($(this).is(':checkbox')) {
|
|
|
- currentNode[keys[i]] = $(this).prop('checked');
|
|
|
- }
|
|
|
- else {
|
|
|
- currentNode[keys[i]] = $(this).val();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- });
|
|
|
- if(parsed) {
|
|
|
- dataField.val(JSON.stringify(parsed));
|
|
|
- }
|
|
|
-
|
|
|
- showMask();
|
|
|
-
|
|
|
- let closeOnSave = false, noteSection = form.closest('.note-section');
|
|
|
- if($(this).closest('[visit-moe]').is('[close-on-save]')) {
|
|
|
- closeOnSave = true;
|
|
|
- }
|
|
|
-
|
|
|
- $.post(form.attr('url'), form.serialize(), _data => {
|
|
|
- hideMask();
|
|
|
- updateAllSegmentsInResponse(_data);
|
|
|
- if(closeOnSave) {
|
|
|
- noteSection.removeClass('edit');
|
|
|
- }
|
|
|
- }, 'json');
|
|
|
- return false;
|
|
|
+ saveVisitForm(this);
|
|
|
});
|
|
|
|
|
|
_parent.find('[visit-moe]>a[start]')
|