- Add CloudronStack/output/CloudronPackages-Artifacts/tirreno/ directory and its contents - Includes package manifest, Dockerfile, source code, documentation, and build artifacts - Add tirreno-1761840148.tar.gz as a build artifact - Add tirreno-cloudron-package-1761841304.tar.gz as the Cloudron package - Include all necessary files for the tirreno Cloudron package This adds the complete tirreno Cloudron package artifacts to the repository.
		
			
				
	
	
		
			135 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import {renderUserActionButtons} from './DataRenderers.js?v=2';
 | 
						|
import {handleAjaxError} from './utils/ErrorHandler.js?v=2';
 | 
						|
 | 
						|
export class UserGridActionButtons {
 | 
						|
 | 
						|
    constructor(tableId) {
 | 
						|
        this.tableId = tableId;
 | 
						|
        const onTableLoaded = this.onTableLoaded.bind(this);
 | 
						|
        window.addEventListener('tableLoaded', onTableLoaded, false);
 | 
						|
    }
 | 
						|
 | 
						|
    onTableLoaded(e) {
 | 
						|
        const tableId = e.detail.tableId;
 | 
						|
        const buttons = document.querySelectorAll(`#${tableId} button`);
 | 
						|
 | 
						|
        const onButtonClick = this.onButtonClick.bind(this);
 | 
						|
        buttons.forEach(button => button.addEventListener('click', onButtonClick, false));
 | 
						|
    }
 | 
						|
 | 
						|
    onButtonClick(e) {
 | 
						|
        e.preventDefault();
 | 
						|
        e.stopPropagation();
 | 
						|
 | 
						|
        const me = this;
 | 
						|
        const target = e.target;
 | 
						|
        const url = '/admin/manageUser';
 | 
						|
        const token = document.head.querySelector('[name=\'csrf-token\'][content]').content;
 | 
						|
        const data = {userId: target.dataset.userId, type: target.dataset.type, token: token};
 | 
						|
 | 
						|
        target.classList.add('is-loading');
 | 
						|
 | 
						|
        $.ajax({
 | 
						|
            type: 'POST',
 | 
						|
            url: url,
 | 
						|
            data: data,
 | 
						|
            scope: me,
 | 
						|
            target: target,
 | 
						|
            success: me.onSuccess,
 | 
						|
            error: handleAjaxError,
 | 
						|
            dataType: 'json'
 | 
						|
        });
 | 
						|
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
 | 
						|
    onSuccessCount(data) {
 | 
						|
        const span = document.querySelector('span.reviewed-users-tile');
 | 
						|
        span.textContent = data.total;
 | 
						|
    }
 | 
						|
 | 
						|
    setMenuCount() {
 | 
						|
        const token = document.head.querySelector('[name=\'csrf-token\'][content]').content;
 | 
						|
        $.ajax({
 | 
						|
            type: 'GET',
 | 
						|
            url: '/admin/loadReviewQueueCount',
 | 
						|
            data: {token: token},
 | 
						|
            success: this.onSuccessCount,
 | 
						|
            error: handleAjaxError,
 | 
						|
        });
 | 
						|
    }
 | 
						|
 | 
						|
    onSuccess() {
 | 
						|
        const me   = this.scope;
 | 
						|
 | 
						|
        const target     = this.target;
 | 
						|
        const type       = target.dataset.type;
 | 
						|
        const buttonType = target.dataset.buttonType;
 | 
						|
        const accountId  = target.dataset.userId;
 | 
						|
        const tableRow   = target.closest('tr');
 | 
						|
 | 
						|
        target.classList.remove('is-loading');
 | 
						|
 | 
						|
        const twoButtonsContainer = target.closest('.legitfraud');
 | 
						|
        if (twoButtonsContainer && !twoButtonsContainer.hasAttribute('counterUpdated')) {
 | 
						|
            twoButtonsContainer.setAttribute('counterUpdated', 0);
 | 
						|
        }
 | 
						|
 | 
						|
        if ('fraudButton' === buttonType) {
 | 
						|
            const td = target.closest('td');
 | 
						|
            const fraudButton = td.querySelector('[data-type="fraud"]');
 | 
						|
            const legitButton = td.querySelector('[data-type="legit"]');
 | 
						|
 | 
						|
            if ('fraud' === type) {
 | 
						|
                fraudButton.classList.replace('is-neutral', 'is-highlighted');
 | 
						|
                fraudButton.setAttribute('disabled', '');
 | 
						|
 | 
						|
                legitButton.classList.replace('is-highlighted', 'is-neutral');
 | 
						|
                legitButton.removeAttribute('disabled');
 | 
						|
            } else {
 | 
						|
                legitButton.classList.replace('is-neutral', 'is-highlighted');
 | 
						|
                legitButton.setAttribute('disabled', '');
 | 
						|
 | 
						|
                fraudButton.classList.replace('is-highlighted', 'is-neutral');
 | 
						|
                fraudButton.removeAttribute('disabled');
 | 
						|
            }
 | 
						|
 | 
						|
            const counterUpdated    = twoButtonsContainer.getAttribute('counterUpdated');
 | 
						|
            const wasCounterUpdated = parseInt(counterUpdated, 10);
 | 
						|
            if (!wasCounterUpdated) {
 | 
						|
                const card = target.closest('.card');
 | 
						|
                const span = card.querySelector('.card-header-title span');
 | 
						|
                let total  = parseInt(span.innerHTML, 10);
 | 
						|
 | 
						|
                if (total > 0) {
 | 
						|
                    total -= 1;
 | 
						|
                }
 | 
						|
 | 
						|
                span.textContent = total;
 | 
						|
 | 
						|
                twoButtonsContainer.setAttribute('counterUpdated', 1);
 | 
						|
            }
 | 
						|
 | 
						|
            if (tableRow) {
 | 
						|
                const dataTable = $(`#${me.tableId}`).DataTable();
 | 
						|
                dataTable.row(tableRow).remove().draw(false);
 | 
						|
                me.setMenuCount();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        if ('reviewedButton' === buttonType) {
 | 
						|
            //Get HTML w/ new fraud&legit buttons
 | 
						|
            const record = {reviewed: true, accountid: accountId};
 | 
						|
            const html   = renderUserActionButtons(record);
 | 
						|
 | 
						|
            const td = target.closest('td');
 | 
						|
            td.replaceChildren(html);
 | 
						|
 | 
						|
            //Add event listener to newly created buttons
 | 
						|
            const buttons = td.querySelectorAll('button');
 | 
						|
            const onButtonClick = me.onButtonClick.bind(me);
 | 
						|
            buttons.forEach(button => button.addEventListener('click', onButtonClick, false));
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |