This commit is contained in:
54
frontend/app/services/ActionRegistry.js
Normal file
54
frontend/app/services/ActionRegistry.js
Normal file
@@ -0,0 +1,54 @@
|
||||
import { ref } from 'vue';
|
||||
|
||||
const actions = ref([]);
|
||||
|
||||
function register(action) {
|
||||
if (!action.id || !action.execute) {
|
||||
console.warn('[ActionRegistry] Action missing id or execute:', action);
|
||||
return;
|
||||
}
|
||||
|
||||
const existingIndex = actions.value.findIndex(a => a.id === action.id);
|
||||
if (existingIndex !== -1) {
|
||||
actions.value[existingIndex] = action;
|
||||
} else {
|
||||
actions.value.push(action);
|
||||
}
|
||||
}
|
||||
|
||||
function unregister(id) {
|
||||
actions.value = actions.value.filter(a => a.id !== id);
|
||||
}
|
||||
|
||||
function search(query) {
|
||||
if (!query || query.trim() === '') return [];
|
||||
|
||||
const q = query.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().trim();
|
||||
if (q === '') return [];
|
||||
|
||||
return actions.value.filter(action => {
|
||||
if (typeof action.isActive === 'function' && !action.isActive()) {
|
||||
return false;
|
||||
}
|
||||
const label = (action.label || '').normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
|
||||
const description = (action.description || '').normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
|
||||
return label.includes(q) || description.includes(q);
|
||||
}).sort((a, b) => {
|
||||
const aLabel = (a.label || '').toLowerCase();
|
||||
const bLabel = (b.label || '').toLowerCase();
|
||||
const qLower = q;
|
||||
const aStarts = aLabel.startsWith(qLower) ? 0 : 1;
|
||||
const bStarts = bLabel.startsWith(qLower) ? 0 : 1;
|
||||
return aStarts - bStarts || aLabel.localeCompare(bLabel);
|
||||
});
|
||||
}
|
||||
|
||||
function execute(id, params = {}) {
|
||||
const action = actions.value.find(a => a.id === id);
|
||||
if (action && action.execute) {
|
||||
action.execute(params);
|
||||
}
|
||||
}
|
||||
|
||||
export { register, unregister, search, execute };
|
||||
export default { register, unregister, search, execute };
|
||||
Reference in New Issue
Block a user