@airplane/views
Version:
A React library for building Airplane views. Views components are optimized in style and functionality to produce internal apps that are easy to build and maintain.
96 lines (95 loc) • 3.06 kB
JavaScript
import { createElement, useMemo } from "react";
import { useSetLatestRunInTaskQuery } from "../errorBoundary/LatestRunDetails.js";
import { getFullMutation } from "../query.js";
import { displayTaskBackedError } from "../../errors/displayTaskBackedError.js";
import { ConnectedTable } from "./ConnectedTable.js";
import { useTaskQuery } from "../../state/tasks/useTaskQuery.js";
const TableWithTask = ({
outputTransform,
task,
rowActions,
rowActionsMenu,
setLatestRun,
...tableProps
}) => {
const fullQuery = useSetLatestRunInTaskQuery(task, setLatestRun);
const {
error,
loading,
output,
runID
} = useTaskQuery(fullQuery);
const data = useOutputToData(output, outputTransform);
let arrayRowActions = rowActions ? Array.isArray(rowActions) ? rowActions : [rowActions] : [];
arrayRowActions = arrayRowActions.map((rowAction) => {
if (typeof rowAction === "function") {
return rowAction;
}
if (typeof rowAction !== "string" && !("slug" in rowAction) && !("fn" in rowAction)) {
return rowAction;
}
const fullMutation = getFullMutation(rowAction);
if (!fullMutation.refetchTasks) {
fullMutation.refetchTasks = task;
}
return fullMutation;
});
let arrayRowMenuActions = rowActionsMenu ? Array.isArray(rowActionsMenu) ? rowActionsMenu : [rowActionsMenu] : [];
arrayRowMenuActions = arrayRowMenuActions.map((rowAction) => {
if (typeof rowAction !== "string" && !("slug" in rowAction) && !("fn" in rowAction)) {
return rowAction;
}
const fullMutation = getFullMutation(rowAction);
if (!fullMutation.refetchTasks) {
fullMutation.refetchTasks = task;
}
return fullMutation;
});
if (error) {
return displayTaskBackedError({
error,
taskSlug: fullQuery.slug,
runID,
componentName: "Table"
});
} else {
return /* @__PURE__ */ createElement(
ConnectedTable,
{
...tableProps,
data,
loading,
key: loading && !!tableProps.isDefaultSelectedRow ? "loading" : void 0,
rowActions: arrayRowActions,
rowActionsMenu: arrayRowMenuActions
}
);
}
};
function useOutputToData(output, outputTransform) {
return useMemo(() => {
if (!output)
return [];
const unwrapQ1 = (output2) => {
if (output2 && !Array.isArray(output2) && typeof output2 === "object" && Object.keys(output2).length === 1 && Object.keys(output2)[0] === "Q1" && // eslint-disable-next-line @typescript-eslint/no-explicit-any
Array.isArray(output2["Q1"])) {
return output2["Q1"];
}
return output2;
};
const unwrappedOutput = unwrapQ1(output);
const transformedOutput = outputTransform ? outputTransform(unwrappedOutput) : unwrappedOutput;
if (Array.isArray(transformedOutput)) {
return transformedOutput;
}
return [];
}, [output, outputTransform]);
}
function doesUseTask(props) {
return Boolean(props.task);
}
export {
TableWithTask,
doesUseTask
};
//# sourceMappingURL=TableWithTask.js.map