wekan/client/lib/fixDuplicateLists.js

95 lines
2.6 KiB
JavaScript
Raw Permalink Normal View History

import { Meteor } from 'meteor/meteor';
/**
* Client-side interface for fixing duplicate lists
*/
export const fixDuplicateLists = {
/**
* Get a report of all boards with duplicate lists/swimlanes
*/
async getReport() {
try {
const result = await Meteor.callAsync('fixDuplicateLists.getReport');
return result;
} catch (error) {
console.error('Error getting duplicate lists report:', error);
throw error;
}
},
/**
* Fix duplicate lists for a specific board
*/
async fixBoard(boardId) {
try {
const result = await Meteor.callAsync('fixDuplicateLists.fixBoard', boardId);
console.log(`Fixed duplicate lists for board ${boardId}:`, result);
return result;
} catch (error) {
console.error(`Error fixing board ${boardId}:`, error);
throw error;
}
},
/**
* Fix duplicate lists for all boards
*/
async fixAllBoards() {
try {
console.log('Starting fix for all boards...');
const result = await Meteor.callAsync('fixDuplicateLists.fixAllBoards');
console.log('Fix completed:', result);
return result;
} catch (error) {
console.error('Error fixing all boards:', error);
throw error;
}
},
/**
* Interactive fix with user confirmation
*/
async interactiveFix() {
try {
// Get report first
console.log('Getting duplicate lists report...');
const report = await this.getReport();
if (report.boardsWithDuplicates === 0) {
console.log('No duplicate lists found!');
return { message: 'No duplicate lists found!' };
}
console.log(`Found ${report.boardsWithDuplicates} boards with duplicate lists:`);
report.report.forEach(board => {
console.log(`- Board "${board.boardTitle}" (${board.boardId}): ${board.duplicateSwimlanes} duplicate swimlanes, ${board.duplicateLists} duplicate lists`);
});
// Ask for confirmation
const confirmed = confirm(
`Found ${report.boardsWithDuplicates} boards with duplicate lists. ` +
`This will fix ${report.report.reduce((sum, board) => sum + board.duplicateSwimlanes + board.duplicateLists, 0)} duplicates. ` +
'Continue?'
);
if (!confirmed) {
return { message: 'Fix cancelled by user' };
}
// Perform the fix
const result = await this.fixAllBoards();
return result;
} catch (error) {
console.error('Error in interactive fix:', error);
throw error;
}
}
};
// Make it available globally for console access
if (typeof window !== 'undefined') {
window.fixDuplicateLists = fixDuplicateLists;
}