Main edit interface functinonal except save and execution order

This commit is contained in:
Rich Lott / Artful Robot 2025-02-20 19:38:42 +00:00
parent 4978eeb828
commit b0983603e5
6 changed files with 346 additions and 72 deletions

View file

@ -22,11 +22,109 @@
// this.$onInit gets run after the this controller is called, and after the bindings have been applied.
this.$onInit = async function() {
ctrl.saved = false;
ctrl.view = 'list';
ctrl.moveIdx = null;
ctrl.categoryToEdit = null;
ctrl.categoryDefinitions = null;
ctrl.categoryDefinitions = await crmApi4("ContactCategoryDefinition", 'get', { orderBy: { label: 'ASC' }, withLabels: true });
$scope.$digest();
ctrl.edit = idx => {
if (idx === -1) {
// New item.
// Create a random dark colour
let [r, g, b] = [Math.random(), Math.random(), Math.random()],
min = Math.min(r, g, b),
range = Math.max(r, g, b) - min,
conv = (x) => ('0' + Math.ceil((x-min)/range * 128).toString(16)).replace(/^.*(..)$/, '$1');
// Create a blank
ctrl.categoryToEdit = {
idx: ctrl.categoryDefinitions.length,
label: '',
search_type: 'search',
search_data: { saved_search_id: null },
color: '#' + [r, g, b].map(conv).join(''),
icon: '',
description: '',
};
}
else {
ctrl.categoryToEdit = Object.assign({idx}, JSON.parse(JSON.stringify(ctrl.categoryDefinitions[idx])));
}
ctrl.view = 'edit';
};
ctrl.moveTo = idx => {
let item = ctrl.categoryDefinitions.splice(ctrl.moveIdx, 1)[0];
if (idx > ctrl.moveIdx) {
idx--;
}
ctrl.categoryDefinitions.splice(idx, 0, item);
ctrl.moveIdx = null;
};
ctrl.deleteCategory = idx => {
if (!confirm(ts(
'Confirm deleting category %1. You will lose history related to this category. Sure?',
{1: ctrl.categoryDefinitions[idx].label}
))) {
return;
}
ctrl.categoryDefinitions[idx].deleted = true;
ctrl.categoryToEdit = null;
ctrl.view = 'list';
};
ctrl.updateEditedThing = () => {
// @todo validate, e.g.
if (!ctrl.categoryToEdit.label) {
alert("No name");
return;
}
const search_data = ctrl.categoryToEdit.search_data;
console.log("search_data", search_data);
if (ctrl.categoryToEdit.search_type === 'group') {
// Only store what we need.
const {group_id} = search_data;
console.log("group_id", group_id, search_data);
ctrl.categoryToEdit.search_data = {group_id};
}
else if (ctrl.categoryToEdit.search_type === 'search') {
const {saved_search_id} = search_data;
ctrl.categoryToEdit.search_data = {saved_search_id};
}
const edited = ctrl.categoryToEdit;
const idx = edited.idx;
delete(edited.idx);
ctrl.categoryDefinitions[idx] = edited;
ctrl.categoryToEdit = null;
ctrl.view = 'list';
console.log("done editing");
}
// We need to ensure the search_data object contains the fields required for the selected search_type
ctrl.fixSearchData = () => {
const search_data = ctrl.categoryToEdit.search_data;
if (ctrl.categoryToEdit.search_type === 'group') {
if (!('group_id' in search_data)) {
search_data.group_id = null;
}
}
else if (ctrl.categoryToEdit.search_type === 'search') {
if (!('saved_search_id' in search_data)) {
search_data.saved_search_id = null;
}
}
};
ctrl.save = async () => {
if (!confirm(ts("Confirm saving changes to categories? Note that categories will not be fully applied until tomorrow."))) { return; }
};
// ctrl.deleteRow = idx => {
// ctrl.catmap.splice(idx, 1);
// };