mirror of
https://codeberg.org/artfulrobot/contactcats.git
synced 2025-06-25 19:38:05 +02:00
Main edit interface functinonal except save and execution order
This commit is contained in:
parent
4978eeb828
commit
b0983603e5
6 changed files with 346 additions and 72 deletions
|
@ -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);
|
||||
// };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue