From e26ed382fa1ae68b0a214a7060d1b82faee9ceff Mon Sep 17 00:00:00 2001 From: yflory Date: Tue, 20 Feb 2024 18:42:44 +0100 Subject: [PATCH] New support: delete user ticket --- www/common/outer/support.js | 16 ++++++++++++++++ www/support/inner.js | 11 ++++++++++- www/support/ui.js | 18 ++++++++++++++++-- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/www/common/outer/support.js b/www/common/outer/support.js index 25e0610dd..f5d2624eb 100644 --- a/www/common/outer/support.js +++ b/www/common/outer/support.js @@ -241,6 +241,7 @@ define([ else { t.messages = messages; } if (messages[messages.length -1].close) { + ctx.supportData[ticket].closed = true; t.closed = true; } @@ -273,6 +274,13 @@ define([ cb({closed: true}); }); }; + var deleteMyTicket = function (ctx, data, cId, cb) { + let support = ctx.supportData; + let channel = data.channel; + if (!support[channel] || !support[channel].closed) { return void cb({error: 'ENOTCLOSED'}); } + delete support[channel]; + cb({deleted: true}); + }; // ADMIN COMMANDS @@ -422,6 +430,11 @@ define([ }; var updateUserTicket = function (ctx, data) { notifyClient(ctx, false, 'UPDATE_TICKET', data.channel); + if (data.isClose) { + let ticket = ctx.supportData[data.channel]; + if (!ticket) { return; } + ticket.closed = true; + } }; // INITIALIZE ADMIN @@ -558,6 +571,9 @@ define([ if (cmd === 'CLOSE_TICKET') { return void closeMyTicket(ctx, data, clientId, cb); } + if (cmd === 'DELETE_TICKET') { + return void deleteMyTicket(ctx, data, clientId, cb); + } cb({error: 'NOT_SUPPORTED'}); }; diff --git a/www/support/inner.js b/www/support/inner.js index 3df89d4e4..6dea486c7 100644 --- a/www/support/inner.js +++ b/www/support/inner.js @@ -187,6 +187,15 @@ define([ refresh(); }); }; + const onDelete = function (ticket, channel, data) { + APP.supportModule.execCommand('DELETE_TICKET', { + channel: channel + }, function (obj) { + console.error(obj); + if (obj && obj.error) { return void UI.warn(Messages.error); } + refresh(); + }); + }; APP.supportModule.execCommand('GET_MY_TICKETS', {}, function (obj) { if (obj && obj.error) { @@ -213,7 +222,7 @@ define([ id: data.id, content: data, form: activeForms[data.id], - onClose, onReply + onClose, onReply, onDelete }); $list.append(ticket); let $ticket = $(ticket); diff --git a/www/support/ui.js b/www/support/ui.js index a161091cd..0275e1b86 100644 --- a/www/support/ui.js +++ b/www/support/ui.js @@ -319,14 +319,21 @@ define([ }; var makeTicket = function (ctx, opts) { - let { id, content, form, onShow, onHide, onClose, onReply, onForm } = opts; + let { id, content, form, onShow, onHide, onClose, onReply, onForm, onDelete } = opts; var common = ctx.common; var metadataMgr = common.getMetadataMgr(); var privateData = metadataMgr.getPrivateData(); var answer = h('button.btn.btn-primary.cp-support-answer', Messages.support_answer); var close = h('button.btn.btn-danger.cp-support-close', Messages.support_close); - var actions = h('div.cp-support-list-actions', [ answer, close ]); + var remove = h('button.btn.btn-danger.cp-support-hide', Messages.support_remove); + var _actions = [answer, close]; + + if (content.closed && !ctx.isAdmin) { + _actions = [remove]; // XXX update key to "Delete permanently" ? + } + + var actions = h('div.cp-support-list-actions', _actions); var adminActions; var adminClasses = ''; @@ -397,6 +404,13 @@ define([ onClose(ticket, id, content); }); + UI.confirmButton(remove, { + classes: 'btn-danger' + }, function() { + $(remove).remove(); + onDelete(ticket, id, content); + }); + var addForm = function () { $ticket.find('.cp-support-form-container').remove(); $(actions).hide();