This is an automated email from the ASF dual-hosted git repository. ephraimanierobi pushed a commit to branch v2-3-test in repository https://gitbox.apache.org/repos/asf/airflow.git
commit af913793fd6a0c808fbbe49e8df859c5d62eb998 Author: Brent Bovenzi <[email protected]> AuthorDate: Mon May 2 21:19:22 2022 -0400 Refactor code references from tree to grid (#23254) (cherry picked from commit 22b49d334ef0008be7bd3d8481b55b8ab5d71c80) --- airflow/www/static/css/{tree.css => grid.css} | 0 airflow/www/static/js/{tree => grid}/Clipboard.jsx | 0 .../www/static/js/{tree/Tree.jsx => grid/Grid.jsx} | 8 ++-- .../static/js/{tree => grid}/InstanceTooltip.jsx | 0 airflow/www/static/js/{tree => grid}/README.md | 0 airflow/www/static/js/{tree => grid}/ResetRoot.jsx | 0 airflow/www/static/js/{tree => grid}/StatusBox.jsx | 0 airflow/www/static/js/{tree => grid}/Table.jsx | 0 airflow/www/static/js/{tree => grid}/TaskName.jsx | 0 airflow/www/static/js/{tree => grid}/Time.jsx | 0 airflow/www/static/js/{tree => grid}/api/index.js | 4 +- .../static/js/{tree => grid}/api/useClearRun.js | 2 +- .../static/js/{tree => grid}/api/useClearTask.js | 2 +- .../js/{tree => grid}/api/useConfirmMarkTask.js | 0 .../static/js/{tree => grid}/api/useExtraLinks.js | 0 .../api/useTreeData.js => grid/api/useGridData.js} | 16 +++---- .../api/useGridData.test.jsx} | 20 ++++---- .../js/{tree => grid}/api/useMappedInstances.js | 0 .../js/{tree => grid}/api/useMarkFailedRun.js | 2 +- .../js/{tree => grid}/api/useMarkFailedTask.js | 2 +- .../js/{tree => grid}/api/useMarkSuccessRun.js | 2 +- .../js/{tree => grid}/api/useMarkSuccessTask.js | 2 +- .../static/js/{tree => grid}/api/useQueueRun.js | 2 +- .../www/static/js/{tree => grid}/api/useRunTask.js | 2 +- .../www/static/js/{tree => grid}/api/useTasks.js | 0 .../js/{tree => grid}/context/autorefresh.jsx | 6 +-- .../js/{tree => grid}/context/containerRef.jsx | 0 airflow/www/static/js/grid/context/selection.jsx | 56 ++++++++++++++++++++++ .../static/js/{tree => grid}/context/timezone.jsx | 0 .../www/static/js/{tree => grid}/dagRuns/Bar.jsx | 0 .../static/js/{tree => grid}/dagRuns/Tooltip.jsx | 0 .../www/static/js/{tree => grid}/dagRuns/index.jsx | 4 +- .../js/{tree => grid}/dagRuns/index.test.jsx | 6 +-- .../static/js/{tree => grid}/details/Header.jsx | 4 +- .../details/content/ConfirmDialog.jsx | 0 .../js/{tree => grid}/details/content/Dag.jsx | 4 +- .../details/content/dagRun/ClearRun.jsx | 0 .../details/content/dagRun/MarkFailedRun.jsx | 0 .../details/content/dagRun/MarkSuccessRun.jsx | 0 .../details/content/dagRun/QueueRun.jsx | 0 .../details/content/dagRun/index.jsx | 4 +- .../details/content/taskInstance/Details.jsx | 0 .../details/content/taskInstance/ExtraLinks.jsx | 0 .../details/content/taskInstance/Logs.jsx | 0 .../content/taskInstance/MappedInstances.jsx | 0 .../details/content/taskInstance/Nav.jsx | 0 .../details/content/taskInstance/index.jsx | 4 +- .../taskInstance/taskActions/ActionButton.jsx | 0 .../content/taskInstance/taskActions/Clear.jsx | 0 .../taskInstance/taskActions/MarkFailed.jsx | 0 .../taskInstance/taskActions/MarkSuccess.jsx | 0 .../content/taskInstance/taskActions/Run.jsx | 0 .../www/static/js/{tree => grid}/details/index.jsx | 0 airflow/www/static/js/{tree => grid}/index.jsx | 4 +- .../static/js/{tree => grid}/renderTaskRows.jsx | 0 .../js/{tree => grid}/renderTaskRows.test.jsx | 12 ++--- .../utils/treeData.js => grid/utils/gridData.js} | 0 .../static/js/{tree => grid}/utils/testUtils.jsx | 0 .../js/{tree => grid}/utils/useErrorToast.js | 0 .../js/{tree => grid}/utils/useSelection.jsx | 0 airflow/www/templates/airflow/chart.html | 2 +- airflow/www/templates/airflow/dag.html | 2 +- airflow/www/templates/airflow/duration_chart.html | 2 +- airflow/www/templates/airflow/gantt.html | 2 +- .../www/templates/airflow/{tree.html => grid.html} | 4 +- airflow/www/views.py | 16 +++---- airflow/www/webpack.config.js | 2 +- 67 files changed, 127 insertions(+), 71 deletions(-) diff --git a/airflow/www/static/css/tree.css b/airflow/www/static/css/grid.css similarity index 100% rename from airflow/www/static/css/tree.css rename to airflow/www/static/css/grid.css diff --git a/airflow/www/static/js/tree/Clipboard.jsx b/airflow/www/static/js/grid/Clipboard.jsx similarity index 100% rename from airflow/www/static/js/tree/Clipboard.jsx rename to airflow/www/static/js/grid/Clipboard.jsx diff --git a/airflow/www/static/js/tree/Tree.jsx b/airflow/www/static/js/grid/Grid.jsx similarity index 97% rename from airflow/www/static/js/tree/Tree.jsx rename to airflow/www/static/js/grid/Grid.jsx index b2d1c1dfb1..6a252b30f5 100644 --- a/airflow/www/static/js/tree/Tree.jsx +++ b/airflow/www/static/js/grid/Grid.jsx @@ -34,7 +34,7 @@ import { Button, } from '@chakra-ui/react'; -import { useTreeData } from './api'; +import { useGridData } from './api'; import renderTaskRows from './renderTaskRows'; import ResetRoot from './ResetRoot'; import DagRuns from './dagRuns'; @@ -44,10 +44,10 @@ import { useAutoRefresh } from './context/autorefresh'; const sidePanelKey = 'hideSidePanel'; -const Tree = () => { +const Grid = () => { const scrollRef = useRef(); const tableRef = useRef(); - const { data: { groups, dagRuns } } = useTreeData(); + const { data: { groups, dagRuns } } = useGridData(); const { isRefreshOn, toggleRefresh, isPaused } = useAutoRefresh(); const isPanelOpen = localStorage.getItem(sidePanelKey) !== 'true'; const { isOpen, onToggle } = useDisclosure({ defaultIsOpen: isPanelOpen }); @@ -141,4 +141,4 @@ const Tree = () => { ); }; -export default Tree; +export default Grid; diff --git a/airflow/www/static/js/tree/InstanceTooltip.jsx b/airflow/www/static/js/grid/InstanceTooltip.jsx similarity index 100% rename from airflow/www/static/js/tree/InstanceTooltip.jsx rename to airflow/www/static/js/grid/InstanceTooltip.jsx diff --git a/airflow/www/static/js/tree/README.md b/airflow/www/static/js/grid/README.md similarity index 100% rename from airflow/www/static/js/tree/README.md rename to airflow/www/static/js/grid/README.md diff --git a/airflow/www/static/js/tree/ResetRoot.jsx b/airflow/www/static/js/grid/ResetRoot.jsx similarity index 100% rename from airflow/www/static/js/tree/ResetRoot.jsx rename to airflow/www/static/js/grid/ResetRoot.jsx diff --git a/airflow/www/static/js/tree/StatusBox.jsx b/airflow/www/static/js/grid/StatusBox.jsx similarity index 100% rename from airflow/www/static/js/tree/StatusBox.jsx rename to airflow/www/static/js/grid/StatusBox.jsx diff --git a/airflow/www/static/js/tree/Table.jsx b/airflow/www/static/js/grid/Table.jsx similarity index 100% rename from airflow/www/static/js/tree/Table.jsx rename to airflow/www/static/js/grid/Table.jsx diff --git a/airflow/www/static/js/tree/TaskName.jsx b/airflow/www/static/js/grid/TaskName.jsx similarity index 100% rename from airflow/www/static/js/tree/TaskName.jsx rename to airflow/www/static/js/grid/TaskName.jsx diff --git a/airflow/www/static/js/tree/Time.jsx b/airflow/www/static/js/grid/Time.jsx similarity index 100% rename from airflow/www/static/js/tree/Time.jsx rename to airflow/www/static/js/grid/Time.jsx diff --git a/airflow/www/static/js/tree/api/index.js b/airflow/www/static/js/grid/api/index.js similarity index 97% rename from airflow/www/static/js/tree/api/index.js rename to airflow/www/static/js/grid/api/index.js index 3543c97e2e..3487ecd6ea 100644 --- a/airflow/www/static/js/tree/api/index.js +++ b/airflow/www/static/js/grid/api/index.js @@ -31,7 +31,7 @@ import useMarkFailedTask from './useMarkFailedTask'; import useMarkSuccessTask from './useMarkSuccessTask'; import useExtraLinks from './useExtraLinks'; import useConfirmMarkTask from './useConfirmMarkTask'; -import useTreeData from './useTreeData'; +import useGridData from './useGridData'; import useMappedInstances from './useMappedInstances'; axios.interceptors.response.use( @@ -52,6 +52,6 @@ export { useMarkSuccessTask, useExtraLinks, useConfirmMarkTask, - useTreeData, + useGridData, useMappedInstances, }; diff --git a/airflow/www/static/js/tree/api/useClearRun.js b/airflow/www/static/js/grid/api/useClearRun.js similarity index 97% rename from airflow/www/static/js/tree/api/useClearRun.js rename to airflow/www/static/js/grid/api/useClearRun.js index 52dcb21e5c..1994453c66 100644 --- a/airflow/www/static/js/tree/api/useClearRun.js +++ b/airflow/www/static/js/grid/api/useClearRun.js @@ -49,7 +49,7 @@ export default function useClearRun(dagId, runId) { { onSuccess: () => { // Invalidating the query will force a new API request - queryClient.invalidateQueries('treeData'); + queryClient.invalidateQueries('gridData'); startRefresh(); }, onError: (error) => errorToast({ error }), diff --git a/airflow/www/static/js/tree/api/useClearTask.js b/airflow/www/static/js/grid/api/useClearTask.js similarity index 97% rename from airflow/www/static/js/tree/api/useClearTask.js rename to airflow/www/static/js/grid/api/useClearTask.js index 0733b402b4..b9a1b389ac 100644 --- a/airflow/www/static/js/tree/api/useClearTask.js +++ b/airflow/www/static/js/grid/api/useClearTask.js @@ -65,7 +65,7 @@ export default function useClearTask({ }, { onSuccess: () => { - queryClient.invalidateQueries('treeData'); + queryClient.invalidateQueries('gridData'); queryClient.invalidateQueries('mappedInstances', dagId, runId, taskId); startRefresh(); }, diff --git a/airflow/www/static/js/tree/api/useConfirmMarkTask.js b/airflow/www/static/js/grid/api/useConfirmMarkTask.js similarity index 100% rename from airflow/www/static/js/tree/api/useConfirmMarkTask.js rename to airflow/www/static/js/grid/api/useConfirmMarkTask.js diff --git a/airflow/www/static/js/tree/api/useExtraLinks.js b/airflow/www/static/js/grid/api/useExtraLinks.js similarity index 100% rename from airflow/www/static/js/tree/api/useExtraLinks.js rename to airflow/www/static/js/grid/api/useExtraLinks.js diff --git a/airflow/www/static/js/tree/api/useTreeData.js b/airflow/www/static/js/grid/api/useGridData.js similarity index 84% rename from airflow/www/static/js/tree/api/useTreeData.js rename to airflow/www/static/js/grid/api/useGridData.js index 2a0468cac3..8c16947c8c 100644 --- a/airflow/www/static/js/tree/api/useTreeData.js +++ b/airflow/www/static/js/grid/api/useGridData.js @@ -17,19 +17,19 @@ * under the License. */ -/* global treeData, autoRefreshInterval */ +/* global gridData, autoRefreshInterval */ import { useQuery } from 'react-query'; import axios from 'axios'; import { getMetaValue } from '../../utils'; import { useAutoRefresh } from '../context/autorefresh'; -import { formatData, areActiveRuns } from '../utils/treeData'; +import { formatData, areActiveRuns } from '../utils/gridData'; import useErrorToast from '../utils/useErrorToast'; // dagId comes from dag.html const dagId = getMetaValue('dag_id'); -const treeDataUrl = getMetaValue('tree_data_url') || ''; +const gridDataUrl = getMetaValue('grid_data_url') || ''; const numRuns = getMetaValue('num_runs'); const urlRoot = getMetaValue('root'); const baseDate = getMetaValue('base_date'); @@ -39,11 +39,11 @@ const emptyData = { groups: {}, }; -const useTreeData = () => { - const initialData = formatData(treeData, emptyData); +const useGridData = () => { + const initialData = formatData(gridData, emptyData); const { isRefreshOn, stopRefresh } = useAutoRefresh(); const errorToast = useErrorToast(); - return useQuery('treeData', async () => { + return useQuery('gridData', async () => { try { const params = new URLSearchParams({ dag_id: dagId, @@ -52,7 +52,7 @@ const useTreeData = () => { if (urlRoot) params.append('root', urlRoot); if (baseDate) params.append('base_date', baseDate); - const newData = await axios.get(treeDataUrl, { params }); + const newData = await axios.get(gridDataUrl, { params }); // turn off auto refresh if there are no active runs if (!areActiveRuns(newData.dagRuns)) stopRefresh(); return newData; @@ -72,4 +72,4 @@ const useTreeData = () => { }); }; -export default useTreeData; +export default useGridData; diff --git a/airflow/www/static/js/tree/api/useTreeData.test.jsx b/airflow/www/static/js/grid/api/useGridData.test.jsx similarity index 81% rename from airflow/www/static/js/tree/api/useTreeData.test.jsx rename to airflow/www/static/js/grid/api/useGridData.test.jsx index 01c59ef346..06a1cb9a08 100644 --- a/airflow/www/static/js/tree/api/useTreeData.test.jsx +++ b/airflow/www/static/js/grid/api/useGridData.test.jsx @@ -18,12 +18,12 @@ */ import { renderHook } from '@testing-library/react-hooks'; -import useTreeData from './useTreeData'; +import useGridData from './useGridData'; import { Wrapper } from '../utils/testUtils'; /* global describe, test, expect, beforeAll */ -const pendingTreeData = { +const pendingGridData = { groups: {}, dag_runs: [ { @@ -46,9 +46,9 @@ describe('Test useTreeData hook', () => { }); test('data is valid camelcase json', () => { - global.treeData = JSON.stringify(pendingTreeData); + global.gridData = JSON.stringify(pendingGridData); - const { result } = renderHook(() => useTreeData(), { wrapper: Wrapper }); + const { result } = renderHook(() => useGridData(), { wrapper: Wrapper }); const { data } = result.current; expect(typeof data === 'object').toBe(true); @@ -56,20 +56,20 @@ describe('Test useTreeData hook', () => { expect(data.dag_runs).toBeUndefined(); }); - test('Can handle no treeData', () => { - global.treeData = null; + test('Can handle no gridData', () => { + global.gridData = null; - const { result } = renderHook(() => useTreeData(), { wrapper: Wrapper }); + const { result } = renderHook(() => useGridData(), { wrapper: Wrapper }); const { data } = result.current; expect(data.dagRuns).toStrictEqual([]); expect(data.groups).toStrictEqual({}); }); - test('Can handle empty treeData object', () => { - global.treeData = {}; + test('Can handle empty gridData object', () => { + global.gridData = {}; - const { result } = renderHook(() => useTreeData(), { wrapper: Wrapper }); + const { result } = renderHook(() => useGridData(), { wrapper: Wrapper }); const { data } = result.current; expect(data.dagRuns).toStrictEqual([]); diff --git a/airflow/www/static/js/tree/api/useMappedInstances.js b/airflow/www/static/js/grid/api/useMappedInstances.js similarity index 100% rename from airflow/www/static/js/tree/api/useMappedInstances.js rename to airflow/www/static/js/grid/api/useMappedInstances.js diff --git a/airflow/www/static/js/tree/api/useMarkFailedRun.js b/airflow/www/static/js/grid/api/useMarkFailedRun.js similarity index 97% rename from airflow/www/static/js/tree/api/useMarkFailedRun.js rename to airflow/www/static/js/grid/api/useMarkFailedRun.js index 697a49aa4d..6c5873a3ae 100644 --- a/airflow/www/static/js/tree/api/useMarkFailedRun.js +++ b/airflow/www/static/js/grid/api/useMarkFailedRun.js @@ -48,7 +48,7 @@ export default function useMarkFailedRun(dagId, runId) { }, { onSuccess: () => { - queryClient.invalidateQueries('treeData'); + queryClient.invalidateQueries('gridData'); startRefresh(); }, onError: (error) => errorToast({ error }), diff --git a/airflow/www/static/js/tree/api/useMarkFailedTask.js b/airflow/www/static/js/grid/api/useMarkFailedTask.js similarity index 97% rename from airflow/www/static/js/tree/api/useMarkFailedTask.js rename to airflow/www/static/js/grid/api/useMarkFailedTask.js index 3c8f14c7d0..5a5d8fbf50 100644 --- a/airflow/www/static/js/tree/api/useMarkFailedTask.js +++ b/airflow/www/static/js/grid/api/useMarkFailedTask.js @@ -61,7 +61,7 @@ export default function useMarkFailedTask({ }, { onSuccess: () => { - queryClient.invalidateQueries('treeData'); + queryClient.invalidateQueries('gridData'); queryClient.invalidateQueries('mappedInstances', dagId, runId, taskId); startRefresh(); }, diff --git a/airflow/www/static/js/tree/api/useMarkSuccessRun.js b/airflow/www/static/js/grid/api/useMarkSuccessRun.js similarity index 97% rename from airflow/www/static/js/tree/api/useMarkSuccessRun.js rename to airflow/www/static/js/grid/api/useMarkSuccessRun.js index 0d171e2ed8..1009d78ea2 100644 --- a/airflow/www/static/js/tree/api/useMarkSuccessRun.js +++ b/airflow/www/static/js/grid/api/useMarkSuccessRun.js @@ -48,7 +48,7 @@ export default function useMarkSuccessRun(dagId, runId) { }, { onSuccess: () => { - queryClient.invalidateQueries('treeData'); + queryClient.invalidateQueries('gridData'); startRefresh(); }, onError: (error) => errorToast({ error }), diff --git a/airflow/www/static/js/tree/api/useMarkSuccessTask.js b/airflow/www/static/js/grid/api/useMarkSuccessTask.js similarity index 97% rename from airflow/www/static/js/tree/api/useMarkSuccessTask.js rename to airflow/www/static/js/grid/api/useMarkSuccessTask.js index 41d68fe24c..3c7ea1e42a 100644 --- a/airflow/www/static/js/tree/api/useMarkSuccessTask.js +++ b/airflow/www/static/js/grid/api/useMarkSuccessTask.js @@ -62,7 +62,7 @@ export default function useMarkSuccessTask({ }, { onSuccess: () => { - queryClient.invalidateQueries('treeData'); + queryClient.invalidateQueries('gridData'); queryClient.invalidateQueries('mappedInstances', dagId, runId, taskId); startRefresh(); }, diff --git a/airflow/www/static/js/tree/api/useQueueRun.js b/airflow/www/static/js/grid/api/useQueueRun.js similarity index 97% rename from airflow/www/static/js/tree/api/useQueueRun.js rename to airflow/www/static/js/grid/api/useQueueRun.js index 0acae34110..413a3ca571 100644 --- a/airflow/www/static/js/tree/api/useQueueRun.js +++ b/airflow/www/static/js/grid/api/useQueueRun.js @@ -48,7 +48,7 @@ export default function useQueueRun(dagId, runId) { }, { onSuccess: () => { - queryClient.invalidateQueries('treeData'); + queryClient.invalidateQueries('gridData'); startRefresh(); }, onError: (error) => errorToast({ error }), diff --git a/airflow/www/static/js/tree/api/useRunTask.js b/airflow/www/static/js/grid/api/useRunTask.js similarity index 97% rename from airflow/www/static/js/tree/api/useRunTask.js rename to airflow/www/static/js/grid/api/useRunTask.js index 4616d2b123..abfa34f8dc 100644 --- a/airflow/www/static/js/tree/api/useRunTask.js +++ b/airflow/www/static/js/grid/api/useRunTask.js @@ -59,7 +59,7 @@ export default function useRunTask(dagId, runId, taskId) { ), { onSuccess: () => { - queryClient.invalidateQueries('treeData'); + queryClient.invalidateQueries('gridData'); queryClient.invalidateQueries('mappedInstances', dagId, runId, taskId); startRefresh(); }, diff --git a/airflow/www/static/js/tree/api/useTasks.js b/airflow/www/static/js/grid/api/useTasks.js similarity index 100% rename from airflow/www/static/js/tree/api/useTasks.js rename to airflow/www/static/js/grid/api/useTasks.js diff --git a/airflow/www/static/js/tree/context/autorefresh.jsx b/airflow/www/static/js/grid/context/autorefresh.jsx similarity index 94% rename from airflow/www/static/js/tree/context/autorefresh.jsx rename to airflow/www/static/js/grid/context/autorefresh.jsx index dc21552028..ae242e5bf6 100644 --- a/airflow/www/static/js/tree/context/autorefresh.jsx +++ b/airflow/www/static/js/grid/context/autorefresh.jsx @@ -17,11 +17,11 @@ * under the License. */ -/* global localStorage, treeData, document */ +/* global localStorage, gridData, document */ import React, { useContext, useState, useEffect } from 'react'; import { getMetaValue } from '../../utils'; -import { formatData, areActiveRuns } from '../utils/treeData'; +import { formatData, areActiveRuns } from '../utils/gridData'; const autoRefreshKey = 'disabledAutoRefresh'; @@ -33,7 +33,7 @@ const AutoRefreshContext = React.createContext(null); export const AutoRefreshProvider = ({ children }) => { let dagRuns = []; try { - const data = JSON.parse(treeData); + const data = JSON.parse(gridData); if (data.dag_runs) dagRuns = formatData(data.dag_runs); } catch { dagRuns = []; diff --git a/airflow/www/static/js/tree/context/containerRef.jsx b/airflow/www/static/js/grid/context/containerRef.jsx similarity index 100% rename from airflow/www/static/js/tree/context/containerRef.jsx rename to airflow/www/static/js/grid/context/containerRef.jsx diff --git a/airflow/www/static/js/grid/context/selection.jsx b/airflow/www/static/js/grid/context/selection.jsx new file mode 100644 index 0000000000..29fcece223 --- /dev/null +++ b/airflow/www/static/js/grid/context/selection.jsx @@ -0,0 +1,56 @@ +/*! + * 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. + */ + +import React, { useContext, useReducer } from 'react'; + +const SelectionContext = React.createContext(null); + +const SELECT = 'SELECT'; +const DESELECT = 'DESELECT'; + +const selectionReducer = (state, { type, payload }) => { + switch (type) { + case SELECT: + // Deselect if it is the same selection + if (payload.taskId === state.taskId && payload.runId === state.runId) { + return {}; + } + return payload; + case DESELECT: + return {}; + default: + return state; + } +}; + +// Expose the grid selection to any react component instead of passing around lots of props +export const SelectionProvider = ({ children }) => { + const [selected, dispatch] = useReducer(selectionReducer, {}); + + const clearSelection = () => dispatch({ type: DESELECT }); + const onSelect = (payload) => dispatch({ type: SELECT, payload }); + + return ( + <SelectionContext.Provider value={{ selected, clearSelection, onSelect }}> + {children} + </SelectionContext.Provider> + ); +}; + +export const useSelection = () => useContext(SelectionContext); diff --git a/airflow/www/static/js/tree/context/timezone.jsx b/airflow/www/static/js/grid/context/timezone.jsx similarity index 100% rename from airflow/www/static/js/tree/context/timezone.jsx rename to airflow/www/static/js/grid/context/timezone.jsx diff --git a/airflow/www/static/js/tree/dagRuns/Bar.jsx b/airflow/www/static/js/grid/dagRuns/Bar.jsx similarity index 100% rename from airflow/www/static/js/tree/dagRuns/Bar.jsx rename to airflow/www/static/js/grid/dagRuns/Bar.jsx diff --git a/airflow/www/static/js/tree/dagRuns/Tooltip.jsx b/airflow/www/static/js/grid/dagRuns/Tooltip.jsx similarity index 100% rename from airflow/www/static/js/tree/dagRuns/Tooltip.jsx rename to airflow/www/static/js/grid/dagRuns/Tooltip.jsx diff --git a/airflow/www/static/js/tree/dagRuns/index.jsx b/airflow/www/static/js/grid/dagRuns/index.jsx similarity index 97% rename from airflow/www/static/js/tree/dagRuns/index.jsx rename to airflow/www/static/js/grid/dagRuns/index.jsx index 462fffc8e3..5303dc8799 100644 --- a/airflow/www/static/js/tree/dagRuns/index.jsx +++ b/airflow/www/static/js/grid/dagRuns/index.jsx @@ -26,7 +26,7 @@ import { Flex, } from '@chakra-ui/react'; -import { useTreeData } from '../api'; +import { useGridData } from '../api'; import DagRunBar from './Bar'; import { getDuration, formatDuration } from '../../datetime_utils'; import useSelection from '../utils/useSelection'; @@ -38,7 +38,7 @@ const DurationTick = ({ children, ...rest }) => ( ); const DagRuns = () => { - const { data: { dagRuns } } = useTreeData(); + const { data: { dagRuns } } = useGridData(); const { selected, onSelect } = useSelection(); const durations = []; const runs = dagRuns.map((dagRun) => { diff --git a/airflow/www/static/js/tree/dagRuns/index.test.jsx b/airflow/www/static/js/grid/dagRuns/index.test.jsx similarity index 97% rename from airflow/www/static/js/tree/dagRuns/index.test.jsx rename to airflow/www/static/js/grid/dagRuns/index.test.jsx index 550504b0fc..7cc52355eb 100644 --- a/airflow/www/static/js/tree/dagRuns/index.test.jsx +++ b/airflow/www/static/js/grid/dagRuns/index.test.jsx @@ -52,7 +52,7 @@ const dagRuns = [ describe('Test DagRuns', () => { test('Durations and manual run arrow render correctly, but without any date ticks', () => { - global.treeData = JSON.stringify({ + global.gridData = JSON.stringify({ groups: {}, dagRuns, }); @@ -68,7 +68,7 @@ describe('Test DagRuns', () => { }); test('Top date ticks appear when there are 4 or more runs', () => { - global.treeData = JSON.stringify({ + global.gridData = JSON.stringify({ groups: {}, dagRuns: [ ...dagRuns, @@ -101,7 +101,7 @@ describe('Test DagRuns', () => { }); test('Handles empty data correctly', () => { - global.treeData = null; + global.gridData = null; const { queryByTestId } = render( <DagRuns />, { wrapper: TableWrapper }, ); diff --git a/airflow/www/static/js/tree/details/Header.jsx b/airflow/www/static/js/grid/details/Header.jsx similarity index 97% rename from airflow/www/static/js/tree/details/Header.jsx rename to airflow/www/static/js/grid/details/Header.jsx index 2bdaa47361..e2041b3665 100644 --- a/airflow/www/static/js/tree/details/Header.jsx +++ b/airflow/www/static/js/grid/details/Header.jsx @@ -31,7 +31,7 @@ import { MdPlayArrow } from 'react-icons/md'; import { getMetaValue } from '../../utils'; import useSelection from '../utils/useSelection'; import Time from '../Time'; -import { useTasks, useTreeData } from '../api'; +import { useTasks, useGridData } from '../api'; const dagId = getMetaValue('dag_id'); @@ -43,7 +43,7 @@ const LabelValue = ({ label, value }) => ( ); const Header = () => { - const { data: { dagRuns } } = useTreeData(); + const { data: { dagRuns } } = useGridData(); const { selected: { taskId, runId }, onSelect, clearSelection } = useSelection(); const { data: { tasks } } = useTasks(); const dagRun = dagRuns.find((r) => r.runId === runId); diff --git a/airflow/www/static/js/tree/details/content/ConfirmDialog.jsx b/airflow/www/static/js/grid/details/content/ConfirmDialog.jsx similarity index 100% rename from airflow/www/static/js/tree/details/content/ConfirmDialog.jsx rename to airflow/www/static/js/grid/details/content/ConfirmDialog.jsx diff --git a/airflow/www/static/js/tree/details/content/Dag.jsx b/airflow/www/static/js/grid/details/content/Dag.jsx similarity index 98% rename from airflow/www/static/js/tree/details/content/Dag.jsx rename to airflow/www/static/js/grid/details/content/Dag.jsx index 511844d72e..a6a48e7887 100644 --- a/airflow/www/static/js/tree/details/content/Dag.jsx +++ b/airflow/www/static/js/grid/details/content/Dag.jsx @@ -33,7 +33,7 @@ import { mean } from 'lodash'; import { getDuration, formatDuration } from '../../../datetime_utils'; import { finalStatesMap, getMetaValue } from '../../../utils'; -import { useTasks, useTreeData } from '../../api'; +import { useTasks, useGridData } from '../../api'; import Time from '../../Time'; import { SimpleStatus } from '../../StatusBox'; @@ -42,7 +42,7 @@ const dagDetailsUrl = getMetaValue('dag_details_url'); const Dag = () => { const { data: taskData } = useTasks(dagId); - const { data: { dagRuns } } = useTreeData(); + const { data: { dagRuns } } = useGridData(); if (!taskData) return null; const { tasks = [], totalEntries = '' } = taskData; diff --git a/airflow/www/static/js/tree/details/content/dagRun/ClearRun.jsx b/airflow/www/static/js/grid/details/content/dagRun/ClearRun.jsx similarity index 100% rename from airflow/www/static/js/tree/details/content/dagRun/ClearRun.jsx rename to airflow/www/static/js/grid/details/content/dagRun/ClearRun.jsx diff --git a/airflow/www/static/js/tree/details/content/dagRun/MarkFailedRun.jsx b/airflow/www/static/js/grid/details/content/dagRun/MarkFailedRun.jsx similarity index 100% rename from airflow/www/static/js/tree/details/content/dagRun/MarkFailedRun.jsx rename to airflow/www/static/js/grid/details/content/dagRun/MarkFailedRun.jsx diff --git a/airflow/www/static/js/tree/details/content/dagRun/MarkSuccessRun.jsx b/airflow/www/static/js/grid/details/content/dagRun/MarkSuccessRun.jsx similarity index 100% rename from airflow/www/static/js/tree/details/content/dagRun/MarkSuccessRun.jsx rename to airflow/www/static/js/grid/details/content/dagRun/MarkSuccessRun.jsx diff --git a/airflow/www/static/js/tree/details/content/dagRun/QueueRun.jsx b/airflow/www/static/js/grid/details/content/dagRun/QueueRun.jsx similarity index 100% rename from airflow/www/static/js/tree/details/content/dagRun/QueueRun.jsx rename to airflow/www/static/js/grid/details/content/dagRun/QueueRun.jsx diff --git a/airflow/www/static/js/tree/details/content/dagRun/index.jsx b/airflow/www/static/js/grid/details/content/dagRun/index.jsx similarity index 97% rename from airflow/www/static/js/tree/details/content/dagRun/index.jsx rename to airflow/www/static/js/grid/details/content/dagRun/index.jsx index bd096f1510..41bf4e5146 100644 --- a/airflow/www/static/js/tree/details/content/dagRun/index.jsx +++ b/airflow/www/static/js/grid/details/content/dagRun/index.jsx @@ -35,7 +35,7 @@ import MarkFailedRun from './MarkFailedRun'; import MarkSuccessRun from './MarkSuccessRun'; import QueueRun from './QueueRun'; import ClearRun from './ClearRun'; -import { useTreeData } from '../../../api'; +import { useGridData } from '../../../api'; import { appendSearchParams, getMetaValue } from '../../../../utils'; const dagId = getMetaValue('dag_id'); @@ -43,7 +43,7 @@ const graphUrl = getMetaValue('graph_url'); const dagRunDetailsUrl = getMetaValue('dagrun_details_url'); const DagRun = ({ runId }) => { - const { data: { dagRuns } } = useTreeData(); + const { data: { dagRuns } } = useGridData(); const run = dagRuns.find((dr) => dr.runId === runId); if (!run) return null; const { diff --git a/airflow/www/static/js/tree/details/content/taskInstance/Details.jsx b/airflow/www/static/js/grid/details/content/taskInstance/Details.jsx similarity index 100% rename from airflow/www/static/js/tree/details/content/taskInstance/Details.jsx rename to airflow/www/static/js/grid/details/content/taskInstance/Details.jsx diff --git a/airflow/www/static/js/tree/details/content/taskInstance/ExtraLinks.jsx b/airflow/www/static/js/grid/details/content/taskInstance/ExtraLinks.jsx similarity index 100% rename from airflow/www/static/js/tree/details/content/taskInstance/ExtraLinks.jsx rename to airflow/www/static/js/grid/details/content/taskInstance/ExtraLinks.jsx diff --git a/airflow/www/static/js/tree/details/content/taskInstance/Logs.jsx b/airflow/www/static/js/grid/details/content/taskInstance/Logs.jsx similarity index 100% rename from airflow/www/static/js/tree/details/content/taskInstance/Logs.jsx rename to airflow/www/static/js/grid/details/content/taskInstance/Logs.jsx diff --git a/airflow/www/static/js/tree/details/content/taskInstance/MappedInstances.jsx b/airflow/www/static/js/grid/details/content/taskInstance/MappedInstances.jsx similarity index 100% rename from airflow/www/static/js/tree/details/content/taskInstance/MappedInstances.jsx rename to airflow/www/static/js/grid/details/content/taskInstance/MappedInstances.jsx diff --git a/airflow/www/static/js/tree/details/content/taskInstance/Nav.jsx b/airflow/www/static/js/grid/details/content/taskInstance/Nav.jsx similarity index 100% rename from airflow/www/static/js/tree/details/content/taskInstance/Nav.jsx rename to airflow/www/static/js/grid/details/content/taskInstance/Nav.jsx diff --git a/airflow/www/static/js/tree/details/content/taskInstance/index.jsx b/airflow/www/static/js/grid/details/content/taskInstance/index.jsx similarity index 97% rename from airflow/www/static/js/tree/details/content/taskInstance/index.jsx rename to airflow/www/static/js/grid/details/content/taskInstance/index.jsx index e40471f071..d30f65acc2 100644 --- a/airflow/www/static/js/tree/details/content/taskInstance/index.jsx +++ b/airflow/www/static/js/grid/details/content/taskInstance/index.jsx @@ -35,7 +35,7 @@ import Logs from './Logs'; import TaskNav from './Nav'; import Details from './Details'; -import { useTreeData, useTasks } from '../../../api'; +import { useGridData, useTasks } from '../../../api'; import MappedInstances from './MappedInstances'; import { getMetaValue } from '../../../../utils'; @@ -56,7 +56,7 @@ const getTask = ({ taskId, runId, task }) => { const TaskInstance = ({ taskId, runId }) => { const [selectedRows, setSelectedRows] = useState([]); - const { data: { groups, dagRuns } } = useTreeData(); + const { data: { groups, dagRuns } } = useGridData(); const group = getTask({ taskId, runId, task: groups }); const run = dagRuns.find((r) => r.runId === runId); const { executionDate } = run; diff --git a/airflow/www/static/js/tree/details/content/taskInstance/taskActions/ActionButton.jsx b/airflow/www/static/js/grid/details/content/taskInstance/taskActions/ActionButton.jsx similarity index 100% rename from airflow/www/static/js/tree/details/content/taskInstance/taskActions/ActionButton.jsx rename to airflow/www/static/js/grid/details/content/taskInstance/taskActions/ActionButton.jsx diff --git a/airflow/www/static/js/tree/details/content/taskInstance/taskActions/Clear.jsx b/airflow/www/static/js/grid/details/content/taskInstance/taskActions/Clear.jsx similarity index 100% rename from airflow/www/static/js/tree/details/content/taskInstance/taskActions/Clear.jsx rename to airflow/www/static/js/grid/details/content/taskInstance/taskActions/Clear.jsx diff --git a/airflow/www/static/js/tree/details/content/taskInstance/taskActions/MarkFailed.jsx b/airflow/www/static/js/grid/details/content/taskInstance/taskActions/MarkFailed.jsx similarity index 100% rename from airflow/www/static/js/tree/details/content/taskInstance/taskActions/MarkFailed.jsx rename to airflow/www/static/js/grid/details/content/taskInstance/taskActions/MarkFailed.jsx diff --git a/airflow/www/static/js/tree/details/content/taskInstance/taskActions/MarkSuccess.jsx b/airflow/www/static/js/grid/details/content/taskInstance/taskActions/MarkSuccess.jsx similarity index 100% rename from airflow/www/static/js/tree/details/content/taskInstance/taskActions/MarkSuccess.jsx rename to airflow/www/static/js/grid/details/content/taskInstance/taskActions/MarkSuccess.jsx diff --git a/airflow/www/static/js/tree/details/content/taskInstance/taskActions/Run.jsx b/airflow/www/static/js/grid/details/content/taskInstance/taskActions/Run.jsx similarity index 100% rename from airflow/www/static/js/tree/details/content/taskInstance/taskActions/Run.jsx rename to airflow/www/static/js/grid/details/content/taskInstance/taskActions/Run.jsx diff --git a/airflow/www/static/js/tree/details/index.jsx b/airflow/www/static/js/grid/details/index.jsx similarity index 100% rename from airflow/www/static/js/tree/details/index.jsx rename to airflow/www/static/js/grid/details/index.jsx diff --git a/airflow/www/static/js/tree/index.jsx b/airflow/www/static/js/grid/index.jsx similarity index 97% rename from airflow/www/static/js/tree/index.jsx rename to airflow/www/static/js/grid/index.jsx index abe135bebb..15eaa4a669 100644 --- a/airflow/www/static/js/tree/index.jsx +++ b/airflow/www/static/js/grid/index.jsx @@ -27,7 +27,7 @@ import { CacheProvider } from '@emotion/react'; import createCache from '@emotion/cache'; import { QueryClient, QueryClientProvider } from 'react-query'; -import Tree from './Tree'; +import Grid from './Grid'; import { ContainerRefProvider } from './context/containerRef'; import { TimezoneProvider } from './context/timezone'; import { AutoRefreshProvider } from './context/autorefresh'; @@ -78,7 +78,7 @@ function App() { <TimezoneProvider> <AutoRefreshProvider> <BrowserRouter> - <Tree /> + <Grid /> </BrowserRouter> </AutoRefreshProvider> </TimezoneProvider> diff --git a/airflow/www/static/js/tree/renderTaskRows.jsx b/airflow/www/static/js/grid/renderTaskRows.jsx similarity index 100% rename from airflow/www/static/js/tree/renderTaskRows.jsx rename to airflow/www/static/js/grid/renderTaskRows.jsx diff --git a/airflow/www/static/js/tree/renderTaskRows.test.jsx b/airflow/www/static/js/grid/renderTaskRows.test.jsx similarity index 94% rename from airflow/www/static/js/tree/renderTaskRows.test.jsx rename to airflow/www/static/js/grid/renderTaskRows.test.jsx index 415f18b89d..baaa65c17e 100644 --- a/airflow/www/static/js/tree/renderTaskRows.test.jsx +++ b/airflow/www/static/js/grid/renderTaskRows.test.jsx @@ -25,7 +25,7 @@ import { render, fireEvent } from '@testing-library/react'; import renderTaskRows from './renderTaskRows'; import { TableWrapper } from './utils/testUtils'; -const mockTreeData = { +const mockGridData = { groups: { id: null, label: null, @@ -90,9 +90,9 @@ const mockTreeData = { describe('Test renderTaskRows', () => { test('Group defaults to closed but clicking on the name will open a group', () => { - global.treeData = mockTreeData; - const dagRunIds = mockTreeData.dagRuns.map((dr) => dr.runId); - const task = mockTreeData.groups; + global.gridData = mockGridData; + const dagRunIds = mockGridData.dagRuns.map((dr) => dr.runId); + const task = mockGridData.groups; const { getByTestId, getByText, getAllByTestId } = render( <>{renderTaskRows({ task, dagRunIds })}</>, @@ -113,7 +113,7 @@ describe('Test renderTaskRows', () => { }); test('Still renders names if there are no instances', () => { - global.treeData = { + global.gridData = { groups: { id: null, label: null, @@ -137,7 +137,7 @@ describe('Test renderTaskRows', () => { }, dagRuns: [], }; - const task = mockTreeData.groups; + const task = mockGridData.groups; const { queryByTestId, getByText } = render( <>{renderTaskRows({ task, dagRunIds: [] })}</>, diff --git a/airflow/www/static/js/tree/utils/treeData.js b/airflow/www/static/js/grid/utils/gridData.js similarity index 100% rename from airflow/www/static/js/tree/utils/treeData.js rename to airflow/www/static/js/grid/utils/gridData.js diff --git a/airflow/www/static/js/tree/utils/testUtils.jsx b/airflow/www/static/js/grid/utils/testUtils.jsx similarity index 100% rename from airflow/www/static/js/tree/utils/testUtils.jsx rename to airflow/www/static/js/grid/utils/testUtils.jsx diff --git a/airflow/www/static/js/tree/utils/useErrorToast.js b/airflow/www/static/js/grid/utils/useErrorToast.js similarity index 100% rename from airflow/www/static/js/tree/utils/useErrorToast.js rename to airflow/www/static/js/grid/utils/useErrorToast.js diff --git a/airflow/www/static/js/tree/utils/useSelection.jsx b/airflow/www/static/js/grid/utils/useSelection.jsx similarity index 100% rename from airflow/www/static/js/tree/utils/useSelection.jsx rename to airflow/www/static/js/grid/utils/useSelection.jsx diff --git a/airflow/www/templates/airflow/chart.html b/airflow/www/templates/airflow/chart.html index 3f34023428..040dcd98b7 100644 --- a/airflow/www/templates/airflow/chart.html +++ b/airflow/www/templates/airflow/chart.html @@ -23,7 +23,7 @@ {% block head_css %} {{ super() }} - <link rel="stylesheet" type="text/css" href="{{ url_for_asset('tree.css') }}"> + <link rel="stylesheet" type="text/css" href="{{ url_for_asset('grid.css') }}"> <link rel="stylesheet" type="text/css" href="{{ url_for_asset('nv.d3.min.css') }}"> <script src="{{ url_for_asset('d3.min.js') }}"></script> <script src="{{ url_for_asset('nv.d3.min.js') }}"></script> diff --git a/airflow/www/templates/airflow/dag.html b/airflow/www/templates/airflow/dag.html index 70adcf81d1..ee7dd64994 100644 --- a/airflow/www/templates/airflow/dag.html +++ b/airflow/www/templates/airflow/dag.html @@ -53,7 +53,7 @@ <meta name="failed_url" content="{{ url_for('Airflow.failed') }}"> <meta name="success_url" content="{{ url_for('Airflow.success') }}"> <meta name="confirm_url" content="{{ url_for('Airflow.confirm') }}"> - <meta name="tree_data_url" content="{{ url_for('Airflow.tree_data') }}"> + <meta name="grid_data_url" content="{{ url_for('Airflow.grid_data') }}"> <meta name="run_url" content="{{ url_for('Airflow.run') }}"> <meta name="grid_url" content="{{ url_for('Airflow.grid', dag_id=dag.dag_id) }}"> <meta name="grid_url_no_root" content="{{ url_for('Airflow.grid', dag_id=dag.dag_id, num_runs=num_runs_arg, base_date=base_date_arg) }}"> diff --git a/airflow/www/templates/airflow/duration_chart.html b/airflow/www/templates/airflow/duration_chart.html index 7fdbb21b9e..eddc4c334f 100644 --- a/airflow/www/templates/airflow/duration_chart.html +++ b/airflow/www/templates/airflow/duration_chart.html @@ -22,7 +22,7 @@ {% block head_css %} {{ super() }} - <link rel="stylesheet" type="text/css" href="{{ url_for_asset('tree.css') }}"> + <link rel="stylesheet" type="text/css" href="{{ url_for_asset('grid.css') }}"> <link rel="stylesheet" type="text/css" href="{{ url_for_asset('nv.d3.min.css') }}"> <script src="{{ url_for_asset('d3.min.js') }}"></script> <script src="{{ url_for_asset('nv.d3.min.js') }}"></script> diff --git a/airflow/www/templates/airflow/gantt.html b/airflow/www/templates/airflow/gantt.html index 9e5606c331..e6711749c7 100644 --- a/airflow/www/templates/airflow/gantt.html +++ b/airflow/www/templates/airflow/gantt.html @@ -24,7 +24,7 @@ {% block head_css %} {{ super() }} <link rel="stylesheet" type="text/css" href="{{ url_for_asset('gantt.css') }}"> - <link rel="stylesheet" type="text/css" href="{{ url_for_asset('tree.css') }}"> + <link rel="stylesheet" type="text/css" href="{{ url_for_asset('grid.css') }}"> <style type="text/css"> {% for state, state_color in state_color_mapping.items() %} rect.{{state}} { diff --git a/airflow/www/templates/airflow/tree.html b/airflow/www/templates/airflow/grid.html similarity index 97% rename from airflow/www/templates/airflow/tree.html rename to airflow/www/templates/airflow/grid.html index 1394cbc61b..06461d42b4 100644 --- a/airflow/www/templates/airflow/tree.html +++ b/airflow/www/templates/airflow/grid.html @@ -78,9 +78,9 @@ {% block tail_js %} {{ super() }} <script> - const treeData = {{ data|tojson }}; + const gridData = {{ data|tojson }}; const stateColors = {{ state_color_mapping|tojson }}; const autoRefreshInterval = {{ auto_refresh_interval }}; </script> - <script src="{{ url_for_asset('tree.js') }}"></script> + <script src="{{ url_for_asset('grid.js') }}"></script> {% endblock %} diff --git a/airflow/www/views.py b/airflow/www/views.py index 7292f79787..6a4a191c67 100644 --- a/airflow/www/views.py +++ b/airflow/www/views.py @@ -231,7 +231,7 @@ def get_date_time_num_runs_dag_runs_form_data(www_request, session, dag): } -def task_group_to_tree(task_item_or_group, dag, dag_runs, tis, session): +def task_group_to_grid(task_item_or_group, dag, dag_runs, tis, session): """ Create a nested dict representation of this TaskGroup and its children used to construct the Graph. @@ -253,7 +253,7 @@ def task_group_to_tree(task_item_or_group, dag, dag_runs, tis, session): task_group = task_item_or_group children = [ - task_group_to_tree(child, dag, dag_runs, tis, session) for child in task_group.topological_sort() + task_group_to_grid(child, dag, dag_runs, tis, session) for child in task_group.topological_sort() ] def get_summary(dag_run, children): @@ -2620,7 +2620,7 @@ class Airflow(AirflowBaseView): tis = dag.get_task_instances(start_date=min_date, end_date=base_date, session=session) data = { - 'groups': task_group_to_tree(dag.task_group, dag, dag_runs, tis, session), + 'groups': task_group_to_grid(dag.task_group, dag, dag_runs, tis, session), 'dag_runs': encoded_runs, } @@ -2628,7 +2628,7 @@ class Airflow(AirflowBaseView): data = htmlsafe_json_dumps(data, separators=(',', ':')) return self.render_template( - 'airflow/tree.html', + 'airflow/grid.html', operators=sorted({op.task_type: op for op in dag.tasks}.values(), key=lambda x: x.task_type), root=root, form=form, @@ -3451,15 +3451,15 @@ class Airflow(AirflowBaseView): return json.dumps(task_instances, cls=utils_json.AirflowJsonEncoder) - @expose('/object/tree_data') + @expose('/object/grid_data') @auth.has_access( [ (permissions.ACTION_CAN_READ, permissions.RESOURCE_DAG), (permissions.ACTION_CAN_READ, permissions.RESOURCE_TASK_INSTANCE), ] ) - def tree_data(self): - """Returns tree data""" + def grid_data(self): + """Returns grid data""" dag_id = request.args.get('dag_id') dag = current_app.dag_bag.get_dag(dag_id) @@ -3495,7 +3495,7 @@ class Airflow(AirflowBaseView): min_date = min(dag_run_dates, default=None) tis = dag.get_task_instances(start_date=min_date, end_date=base_date, session=session) data = { - 'groups': task_group_to_tree(dag.task_group, dag, dag_runs, tis, session), + 'groups': task_group_to_grid(dag.task_group, dag, dag_runs, tis, session), 'dag_runs': encoded_runs, } diff --git a/airflow/www/webpack.config.js b/airflow/www/webpack.config.js index 548fbb09be..32d7e7370f 100644 --- a/airflow/www/webpack.config.js +++ b/airflow/www/webpack.config.js @@ -73,7 +73,7 @@ const config = { task: `${JS_DIR}/task.js`, taskInstances: `${JS_DIR}/task_instances.js`, tiLog: `${JS_DIR}/ti_log.js`, - tree: [`${CSS_DIR}/tree.css`, `${JS_DIR}/tree/index.jsx`], + grid: [`${CSS_DIR}/grid.css`, `${JS_DIR}/grid/index.jsx`], calendar: [`${CSS_DIR}/calendar.css`, `${JS_DIR}/calendar.js`], durationChart: `${JS_DIR}/duration_chart.js`, trigger: `${JS_DIR}/trigger.js`,
