/**
* VD Catalog - admin tree JS (folder | product)
* Atualizado: 2026-02-12 12:00 -03:00
*/
jQuery(function($){
var selectedNode = null;
function renderTreeHtml(nodes){
function nodeToHtml(node){
var hasChildren = node.children && node.children.length;
var typeLabel = node.type === 'product' ? ' (product)' : '';
var html = '
';
html += ''+(hasChildren? '▾' : (node.type==='product' ? '•' : '▸'))+' ';
html += ''+escapeHtml(node.title)+typeLabel+'';
if(hasChildren){
html += '';
node.children.forEach(function(c){ html += nodeToHtml(c); });
html += '
';
}
html += '';
return html;
}
var out = '';
nodes.forEach(function(n){ out += nodeToHtml(n); });
out += '
';
return out;
}
function escapeHtml(text){
return String(text).replace(/&/g,'&').replace(//g,'>');
}
function loadTree(){
$('#vda-tree').hide();
$('#vda-tree-loading').show().text('Carregando árvore...');
$.post(VDA_ADMIN.ajax_url, {
action: 'vda_admin_get_tree',
nonce: VDA_ADMIN.nonce
}, function(resp){
if(!resp || !resp.success){
$('#vda-tree-loading').text('Erro ao carregar a árvore.');
return;
}
var html = renderTreeHtml(resp.data);
$('#vda-tree').html(html).show();
$('#vda-tree-loading').hide();
}, 'json').fail(function(){
$('#vda-tree-loading').text('Erro de rede ao carregar árvore.');
});
}
$(document).on('click', '#vda-tree .vda-node-title', function(){
var $li = $(this).closest('.vda-node');
$('#vda-tree .vda-node-selected').removeClass('vda-node-selected');
$li.addClass('vda-node-selected');
selectedNode = { id: $li.data('id'), title: $(this).text(), type: $li.data('type') };
$('#vda-selected').text(selectedNode.title + ' (ID: ' + selectedNode.id + ', type:' + selectedNode.type + ')');
});
$(document).on('click', '#vda-tree .vda-node-toggle', function(){
var $li = $(this).closest('.vda-node');
$li.children('.vda-children').toggle();
$(this).text( $li.children('.vda-children').is(':visible') ? '▾' : '▸' );
});
$('#vda-create-node').on('click', function(e){
e.preventDefault();
var title = $('#vda-new-title').val().trim();
var type = $('#vda-new-type').val();
if(!title) { $('#vda-create-result').text('Digite um título.'); return; }
var parent = selectedNode ? selectedNode.id : 0;
$('#vda-create-result').text('Criando...');
$.post(VDA_ADMIN.ajax_url, {
action: 'vda_admin_create_node',
nonce: VDA_ADMIN.nonce,
title: title,
parent: parent,
type: type
}, function(resp){
if(!resp || !resp.success){
$('#vda-create-result').text('Erro: ' + (resp && resp.data ? resp.data : 'erro desconhecido'));
return;
}
$('#vda-create-result').text('Criado ID: ' + resp.data.id);
$('#vda-new-title').val('');
// se for product, abrir editor automaticamente
if (resp.data.type === 'product' && resp.data.edit_url) {
window.open(resp.data.edit_url, '_blank');
}
loadTree();
}, 'json').fail(function(){ $('#vda-create-result').text('Falha de rede.'); });
});
$('#vda-refresh-tree').on('click', loadTree);
$('#vda-open-edit').on('click', function(){
if(!selectedNode){ alert('Selecione um nó primeiro'); return; }
var url = '/wp-admin/post.php?post=' + selectedNode.id + '&action=edit';
window.open(url, '_blank');
});
$('#vda-delete-node').on('click', function(){
if(!selectedNode){ alert('Selecione um nó primeiro'); return; }
if(!confirm('Confirma excluir o nó "'+selectedNode.title+'" (ID:'+selectedNode.id+') ?')) return;
$.post(VDA_ADMIN.ajax_url, {
action: 'vda_admin_delete_node',
nonce: VDA_ADMIN.nonce,
id: selectedNode.id
}, function(resp){
if(!resp || !resp.success){ alert('Erro: ' + (resp && resp.data ? resp.data : 'erro')); return; }
alert('Excluído.');
selectedNode = null;
$('#vda-selected').text('Nenhum');
loadTree();
}, 'json').fail(function(){ alert('Falha de rede'); });
});
loadTree();
});