Vikunja para Wordpress
This commit is contained in:
65
includes/assets/kanban-board.js
Normal file
65
includes/assets/kanban-board.js
Normal file
@@ -0,0 +1,65 @@
|
||||
jQuery(document).ready(function($) {
|
||||
const board = $('#kanban-board');
|
||||
if (board.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Função para inicializar o 'sortable' (arrastar e soltar)
|
||||
$('.kanban-column-body').sortable({
|
||||
connectWith: ".kanban-column-body", // Permite arrastar entre colunas
|
||||
placeholder: "kanban-card-placeholder", // Estilo do espaço reservado
|
||||
opacity: 0.8, // Deixa o card semitransparente ao arrastar
|
||||
revert: 200, // Animação suave ao soltar
|
||||
start: function(event, ui) {
|
||||
// Garante que o placeholder tenha a mesma altura do card arrastado
|
||||
ui.placeholder.height(ui.item.outerHeight());
|
||||
},
|
||||
// Função chamada quando um card é solto em uma nova coluna
|
||||
receive: function(event, ui) {
|
||||
const postId = ui.item.data('post-id');
|
||||
const newStatus = $(this).data('status-slug');
|
||||
const originalFooterHTML = ui.item.find('.kanban-card-footer').html(); // Salva o estado original
|
||||
|
||||
// --- ATUALIZAÇÃO OTIMISTA ---
|
||||
// 1. Atualiza a UI imediatamente para parecer instantâneo.
|
||||
// Adiciona uma classe para um feedback visual sutil.
|
||||
ui.item.addClass('kanban-card-saving');
|
||||
|
||||
// 2. Envia a atualização para o WordPress em segundo plano.
|
||||
$.ajax({
|
||||
url: kanban_ajax.ajax_url,
|
||||
type: 'POST',
|
||||
data: {
|
||||
action: 'update_demand_status', // Ação do WordPress
|
||||
nonce: kanban_ajax.nonce,
|
||||
post_id: postId,
|
||||
new_status: newStatus
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
// Sucesso! A UI já está correta. Apenas damos um feedback de sucesso.
|
||||
ui.item.addClass('kanban-card-success');
|
||||
setTimeout(function() {
|
||||
ui.item.removeClass('kanban-card-success');
|
||||
}, 1500);
|
||||
} else {
|
||||
// Erro! Desfaz a alteração na UI e avisa o usuário.
|
||||
$(ui.sender).sortable('cancel');
|
||||
ui.item.find('.kanban-card-footer').html(originalFooterHTML); // Restaura o rodapé
|
||||
alert('Erro ao atualizar o status: ' + (response.data.message || 'Tente novamente.'));
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
// Erro de conexão! Também desfaz a alteração.
|
||||
$(ui.sender).sortable('cancel');
|
||||
ui.item.find('.kanban-card-footer').html(originalFooterHTML); // Restaura o rodapé
|
||||
alert('Erro de comunicação. Tente novamente.');
|
||||
},
|
||||
complete: function() {
|
||||
// Independentemente do resultado, remove a classe de "salvando".
|
||||
ui.item.removeClass('kanban-card-saving');
|
||||
}
|
||||
});
|
||||
}
|
||||
}).disableSelection();
|
||||
});
|
Reference in New Issue
Block a user