/*!
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/* global document, window, CustomEvent, $ */
import { getMetaValue } from "./utils";
import { approxTimeFromNow, formatDateTime } from "./datetime_utils";
import { openDatasetModal, getDatasetTooltipInfo } from "./datasetUtils";
const dagId = getMetaValue("dag_id");
const pausedUrl = getMetaValue("paused_url");
// eslint-disable-next-line import/prefer-default-export
export const dagTZ = getMetaValue("dag_timezone");
const datasetsUrl = getMetaValue("datasets_url");
const nextRun = {
createAfter: getMetaValue("next_dagrun_create_after"),
intervalStart: getMetaValue("next_dagrun_data_interval_start"),
intervalEnd: getMetaValue("next_dagrun_data_interval_end"),
};
let nextDatasets = [];
let nextDatasetsError;
const setNextDatasets = (datasets, error) => {
nextDatasets = datasets;
nextDatasetsError = error;
};
$(window).on("load", function onLoad() {
$(`a[href*="${this.location.pathname}"]`).parent().addClass("active");
$(".never_active").removeClass("active");
const run = $("#next-dataset-tooltip");
const singleDatasetUri = $(run).data("uri");
if (!singleDatasetUri) {
getDatasetTooltipInfo(dagId, run, setNextDatasets);
}
});
$("#pause_resume").on("change", function onChange() {
const $input = $(this);
const id = $input.data("dag-id");
const isPaused = $input.is(":checked");
const requireConfirmation = $input.is("[data-require-confirmation]");
if (requireConfirmation) {
const confirmation = window.confirm(
`Are you sure you want to ${isPaused ? "resume" : "pause"} this DAG?`
);
if (!confirmation) {
$input.prop("checked", !isPaused);
return;
}
}
const url = `${pausedUrl}?is_paused=${isPaused}&dag_id=${encodeURIComponent(
id
)}`;
// Remove focus on element so the tooltip will go away
$input.trigger("blur");
$input.removeClass("switch-input--error");
// dispatch an event that React can listen for
const event = new CustomEvent("paused", { detail: isPaused });
document.dispatchEvent(event);
$.post(url).fail(() => {
setTimeout(() => {
$input.prop("checked", !isPaused);
$input.addClass("switch-input--error");
event.value = !isPaused;
document.dispatchEvent(event);
}, 500);
});
});
$("#next-run").on("mouseover", () => {
$("#next-run").attr("data-original-title", () => {
let newTitle = "";
if (nextRun.createAfter) {
newTitle += `Run After: ${formatDateTime(
nextRun.createAfter
)}
`;
newTitle += `Next Run: ${approxTimeFromNow(nextRun.createAfter)}
`;
}
if (nextRun.intervalStart && nextRun.intervalEnd) {
newTitle += "Data Interval
";
newTitle += `Start: ${formatDateTime(nextRun.intervalStart)}
`;
newTitle += `End: ${formatDateTime(nextRun.intervalEnd)}`;
}
return newTitle;
});
});
$(".next-dataset-triggered").on("click", (e) => {
const run = $("#next-dataset-tooltip");
const summary = $(e.target).data("summary");
const singleDatasetUri = $(run).data("uri");
if (!singleDatasetUri) {
openDatasetModal(dagId, summary, nextDatasets, nextDatasetsError);
} else {
window.location.href = `${datasetsUrl}?uri=${encodeURIComponent(
singleDatasetUri
)}`;
}
});