<script>
$(function() {
const itemClass = '.product_feature_row';
const $body = $('#product_feature_body');
let index = $body.find(itemClass).length;
function addForm() {
const prototype = $body.data('prototype');
const newForm = prototype.replace(/__name__/g, index);
$body.append(newForm);
index++;
}
$('#add_product_feature').on('click',addForm);
$(document).on('click','#remove_product_feature',function() {
if(!confirm('削除しますか?')) {
return false;
}
const deleteIndex = $(this).data('index');
$(document).find('#product_feature_row'+deleteIndex).remove();
});
});
$(function() {
const featureBodyElem = document.getElementById('product_feature_body');
var observer = new MutationObserver(function () {
// 子要素が変化したときの処理
initFeatureFilePond();
});
observer.observe(featureBodyElem, {
attributes: true,
childList: true,
characterData: true,
});
initFeatureFilePond();
});
function initFeatureFilePond() {
$("[id^=product_feature_row]").each(function(index) {
// ファイルアップロード
// see https://pqina.nl/filepond/
var productFeatureFileId = `admin_product_ProductFeatures_${index}_file_name`;
var inputFileElement = document.querySelector(`input[id="${productFeatureFileId}"]`);
var files = inputFileElement && inputFileElement.value ? [
{
source: inputFileElement.value,
options: {
type: 'local'
}
}
] : [];
var pond = FilePond.create(inputFileElement, {
allowFileTypeValidation: true,
acceptedFileTypes: [
'image/gif',
'image/png',
'image/jpeg'
],
allowFileSizeValidation: true,
maxFileSize: 10000000,
maxFiles: 1,
allowBrowse: true,
labelIdle: '<i class="fa fa-cloud-upload fa-3x text-ec-lightGray mx-3 align-middle" aria-hidden="true" style="font-size: 40px"></i>{{ 'admin.common.drag_and_drop_image_description'|trans }}<span class="filepond--label-action">{{ 'admin.common.file_select'|trans }}</span>',
// 保存されている画像のロード
files: files,
server: {
process: {
url: '{{ path('admin_product_image_process_entity_key', { entity_name: "ProductFeatures", key_name: "file_name" }) }}',
headers: {
'ECCUBE-CSRF-TOKEN': $('meta[name="eccube-csrf-token"]').attr('content'),
'X-Requested-With': 'XMLHttpRequest'
}
},
load: {
url: '{{ path('admin_product_image_load') }}?source=',
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
},
revert: {
url: '{{ path('admin_product_image_revert') }}',
headers: {
'ECCUBE-CSRF-TOKEN': $('meta[name="eccube-csrf-token"]').attr('content'),
'X-Requested-With': 'XMLHttpRequest'
}
}
}
});
pond.on('initfile', function() {
$(`#product_feature_image_error${index}`).hide();
});
pond.on('error', function(error, file) {
var message = '{{ 'admin.common.upload_error'|trans }}';
if (error.main !== undefined) {
message = `${error.main}: ${error.sub}`;
}
$(`#product_feature_image_error${index}`)
.show()
.find('.form-error-message').text(message);
// エラーメッセージが表示されてからプレビューエリアのエラーメッセージを非表示にする
setTimeout(function() {
$('.filepond--file-status').hide();
}, 300);
});
// 画像が追加されたら payment_image にファイル名を追加する
pond.on('processfile', function(error, file) {
if (error) {
console.log(error);
} else {
$(`#${productFeatureFileId}`).val(file.serverId);
}
});
// 画像が削除されたら payment_image のファイル名を削除する
pond.on('removefile', function(error, file) {
if (error) {
console.log(error);
} else {
$(`#${productFeatureFileId}`).val('');
}
});
});
}
</script>