diff --git a/public/viewjs/components/userfieldsform.js b/public/viewjs/components/userfieldsform.js index b6691307..5b2b8b52 100644 --- a/public/viewjs/components/userfieldsform.js +++ b/public/viewjs/components/userfieldsform.js @@ -30,16 +30,17 @@ Grocy.Components.UserfieldsForm.Save = function(success, error) } else if (input.attr("type") == "file") { - var old_file = input.data('old-file') - if (old_file) + var oldFile = input.data('old-file') + if (oldFile) { - Grocy.Api.Delete('files/userfiles/' + old_file, null, null, + Grocy.Api.Delete('files/userfiles/' + oldFile, null, null, function(xhr) { Grocy.FrontendHelpers.ShowGenericError('Could not delete file', xhr); }); jsonData[fieldName] = ""; } + if (input[0].files.length > 0) { // Files service requires an extension @@ -52,14 +53,11 @@ Grocy.Components.UserfieldsForm.Save = function(success, error) }, function(xhr) { - Grocy.FrontendHelpers.ShowGenericError('Error while saving, probably this item already exists', xhr.response) + // When navigating away immediately from the current page, this is maybe a false positive - so ignore this for now + // Grocy.FrontendHelpers.ShowGenericError('Error while saving, probably this item already exists', xhr.response) } ); } - else - { - //jsonData[fieldName] = null; - } } else if ($(this).hasAttr("multiple")) { @@ -116,24 +114,30 @@ Grocy.Components.UserfieldsForm.Load = function() { if (value != null && !value.isEmpty()) { - var file_name = atob(value.split('_')[1]); - var file_src = value.split('_')[0]; - input.hide(); - var file_info = input.siblings('.userfield-file'); - file_info.removeClass('d-none'); - file_info.find('a.userfield-current-file') - .attr('href', U('/files/userfiles/' + value)) - .text(file_name); - file_info.find('img.userfield-current-file') - .attr('src', U('/files/userfiles/' + value + '?force_serve_as=picture&best_fit_width=250&best_fit_height=250')) - file_info.find('button.userfield-file-delete').click( + var fileName = atob(value.split('_')[1]); + var fileSrc = value.split('_')[0]; + var formGroup = input.parent().parent().parent(); + + formGroup.find("label.custom-file-label").text(fileName); + formGroup.find(".userfield-file-show").attr('href', U('/files/userfiles/' + value)); + formGroup.find('.userfield-file-show').removeClass('d-none'); + formGroup.find('img.userfield-current-file') + .attr('src', U('/files/userfiles/' + value + '?force_serve_as=picture&best_fit_width=250&best_fit_height=250')); + LoadImagesLazy(); + + formGroup.find('.userfield-file-delete').click( function() { - file_info.addClass('d-none'); - input.data('old-file', file_src); - input.show(); + formGroup.find("label.custom-file-label").text(__t("No file selected")); + formGroup.find(".userfield-file-show").addClass('d-none'); + input.attr('data-old-file', fileSrc); } ); + + input.on("change", function(e) + { + formGroup.find(".userfield-file-show").addClass('d-none'); + }); } } else diff --git a/views/components/userfields_tbody.blade.php b/views/components/userfields_tbody.blade.php index ec2a8b76..1bb3c524 100644 --- a/views/components/userfields_tbody.blade.php +++ b/views/components/userfields_tbody.blade.php @@ -14,8 +14,7 @@ {{ $userfieldObject->value }} @elseif($userfield->type == \Grocy\Services\UserfieldsService::USERFIELD_TYPE_FILE) - {{ base64_decode(explode('_', $userfieldObject->value)[1]) }} @elseif($userfield->type == \Grocy\Services\UserfieldsService::USERFIELD_TYPE_IMAGE) @elseif($userfield->type == \Grocy\Services\UserfieldsService::USERFIELD_TYPE_FILE)
- - -
- - + +
+
+ + +
+
+ +
+
+ +
@elseif($userfield->type == \Grocy\Services\UserfieldsService::USERFIELD_TYPE_IMAGE)
- - -
- {{ $userfield->name }} - + +
+
+ + +
+
+ +
+ {{ $userfield->name }}
@endif