UNPKG

@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
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