blob: 95745f24ab12f3961262260f1b3464b1be7828be [file] [log] [blame]
/**
* @fileoverview The bulk of the Admin Tasks page of CT.
*/
import '../../../elements-sk/modules/icons/delete-icon-sk';
import '../../../elements-sk/modules/icons/cancel-icon-sk';
import '../../../elements-sk/modules/icons/check-circle-icon-sk';
import '../../../elements-sk/modules/icons/help-icon-sk';
import '../../../elements-sk/modules/toast-sk';
import '../../../elements-sk/modules/tabs-sk';
import '../../../elements-sk/modules/tabs-panel-sk';
import '../suggest-input-sk';
import '../input-sk';
import '../pageset-selector-sk';
import '../task-repeater-sk';
import { html } from 'lit-html';
import { $$, $ } from '../../../infra-sk/modules/dom';
import { define } from '../../../elements-sk/modules/define';
import '../../../elements-sk/modules/select-sk';
import { errorMessage } from '../../../elements-sk/modules/errorMessage';
import { ElementSk } from '../../../infra-sk/modules/ElementSk';
import { PagesetSelectorSk } from '../pageset-selector-sk/pageset-selector-sk';
import { TaskRepeaterSk } from '../task-repeater-sk/task-repeater-sk';
import { AdminAddTaskVars } from '../json';
import { moreThanThreeActiveTasksChecker } from '../ctfe_utils';
export class AdminTasksSk extends ElementSk {
_activeTab: Element | null = null;
private _triggeringTask = false;
private _moreThanThreeActiveTasks = moreThanThreeActiveTasksChecker();
constructor() {
super(AdminTasksSk.template);
}
private static template = (el: AdminTasksSk) => html`
<div>
<tabs-sk @tab-selected-sk=${el._setActiveTab}>
<button class="selected">Recreate Pagesets</button>
<button>Recreate Webpage Archives</button>
</tabs-sk>
<tabs-panel-sk>
<div id="pagesets">${AdminTasksSk.tabTemplate(el)}</div>
<div id="archives">${AdminTasksSk.tabTemplate(el)}</div>
</tabs-panel-sk>
</div>
`;
private static tabTemplate = (el: AdminTasksSk) => html`
<table class="options">
<tr>
<td>PageSets Type</td>
<td>
<pageset-selector-sk id="pageset_selector" disable-custom-webpages>
</pageset-selector-sk>
</td>
</tr>
<tr>
<td>Repeat this task</td>
<td>
<task-repeater-sk id="repeat_after_days"></task-repeater-sk>
</td>
</tr>
<tr>
<td colspan="2" class="center">
<div class="triggering-spinner">
<spinner-sk
.active=${el._triggeringTask}
alt="Trigger task"></spinner-sk>
</div>
<button
id="submit"
?disabled=${el._triggeringTask}
@click=${el._validateTask}>
Queue Task
</button>
</td>
</tr>
<tr>
<td colspan="2" class="center">
<button id="view_history" @click=${el._gotoRunsHistory}>
View runs history
</button>
</td>
</tr>
</table>
`;
connectedCallback(): void {
super.connectedCallback();
this._render();
this._activeTab = $('tabs-panel-sk div')[0];
}
_setActiveTab(e: CustomEvent): void {
// For template simplicity we have some same-IDed elements, we use the
// active tab as the parent in selectors.
this._activeTab = $('tabs-panel-sk>div', this)[e.detail.index];
}
_validateTask(): void {
const pagesetSelector = $$(
'#pageset_selector',
this._activeTab!
) as PagesetSelectorSk;
if (!pagesetSelector.selected) {
errorMessage('Please select a page set type');
pagesetSelector.focus();
return;
}
if (this._moreThanThreeActiveTasks()) {
return;
}
const confirmed = window.confirm('Proceed with queueing task?');
if (confirmed) {
this._queueTask();
}
}
_queueTask(): void {
this._triggeringTask = true;
const params = {} as AdminAddTaskVars;
params.page_sets = (
$$('#pageset_selector', this._activeTab!) as PagesetSelectorSk
).selected;
params.repeat_after_days = (
$$('#repeat_after_days', this._activeTab!) as TaskRepeaterSk
).frequency;
let url = '/_/add_recreate_page_sets_task';
if (this._activeTab!.id === 'archives') {
url = '/_/add_recreate_webpage_archives_task';
}
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(params),
})
.then(() => this._gotoRunsHistory())
.catch((e) => {
this._triggeringTask = false;
errorMessage(e);
});
}
_gotoRunsHistory(): void {
if (this._activeTab!.id === 'archives') {
window.location.href = '/recreate_webpage_archives_runs/';
} else {
window.location.href = '/recreate_page_sets_runs/';
}
}
}
define('admin-tasks-sk', AdminTasksSk);