This is an automated email from the ASF dual-hosted git repository.

bbovenzi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 8dc5fcdc6af Use UI config (#44364)
8dc5fcdc6af is described below

commit 8dc5fcdc6af7cd8e472d8ae06c80e1d5d6a72f6c
Author: Brent Bovenzi <[email protected]>
AuthorDate: Mon Nov 25 12:14:22 2024 -0500

    Use UI config (#44364)
    
    * Swap to use ui/config
    
    * Fix type checks
    
    * Change from True to boolean types
---
 airflow/ui/src/components/DataTable/useTableUrlState.ts |  4 +---
 airflow/ui/src/components/TogglePause.tsx               |  5 +++--
 airflow/ui/src/context/timezone/TimezoneProvider.tsx    |  2 +-
 airflow/ui/src/layouts/BaseLayout.tsx                   |  2 +-
 airflow/ui/src/layouts/Nav/DocsButton.tsx               |  2 +-
 airflow/ui/src/pages/DagsList/Dag/Code/Code.tsx         |  2 +-
 airflow/ui/src/pages/DagsList/DagsFilters.tsx           |  8 +++-----
 airflow/ui/src/pages/DagsList/DagsList.tsx              |  8 +++-----
 airflow/ui/src/pages/Dashboard/Health/Health.tsx        | 13 +++++--------
 airflow/ui/src/queries/useConfig.tsx                    | 16 +++++-----------
 10 files changed, 24 insertions(+), 38 deletions(-)

diff --git a/airflow/ui/src/components/DataTable/useTableUrlState.ts 
b/airflow/ui/src/components/DataTable/useTableUrlState.ts
index bb249b735c8..286882bd025 100644
--- a/airflow/ui/src/components/DataTable/useTableUrlState.ts
+++ b/airflow/ui/src/components/DataTable/useTableUrlState.ts
@@ -27,9 +27,7 @@ import type { TableState } from "./types";
 export const useTableURLState = (defaultState?: Partial<TableState>) => {
   const [searchParams, setSearchParams] = useSearchParams();
 
-  const configPageSize = useConfig("webserver", "page_size");
-  const pageSize =
-    typeof configPageSize === "string" ? parseInt(configPageSize, 10) : 50;
+  const pageSize = useConfig("page_size") as number;
 
   const defaultTableState = {
     pagination: {
diff --git a/airflow/ui/src/components/TogglePause.tsx 
b/airflow/ui/src/components/TogglePause.tsx
index 9670eb372c6..87dea1cec6b 100644
--- a/airflow/ui/src/components/TogglePause.tsx
+++ b/airflow/ui/src/components/TogglePause.tsx
@@ -60,8 +60,9 @@ export const TogglePause = ({
     onSuccess,
   });
 
-  const showConfirmation =
-    useConfig("webserver", "require_confirmation_dag_change") === "True";
+  const showConfirmation = Boolean(
+    useConfig("require_confirmation_dag_change"),
+  );
 
   const onToggle = useCallback(() => {
     mutate({
diff --git a/airflow/ui/src/context/timezone/TimezoneProvider.tsx 
b/airflow/ui/src/context/timezone/TimezoneProvider.tsx
index 5b1ef11558d..6d4dd5eb29e 100644
--- a/airflow/ui/src/context/timezone/TimezoneProvider.tsx
+++ b/airflow/ui/src/context/timezone/TimezoneProvider.tsx
@@ -33,7 +33,7 @@ export const TimezoneContext = 
createContext<TimezoneContextType | undefined>(
 const TIMEZONE_KEY = "timezone";
 
 export const TimezoneProvider = ({ children }: PropsWithChildren) => {
-  const defaultUITimezone = useConfig("webserver", "default_ui_timezone");
+  const defaultUITimezone = useConfig("default_ui_timezone");
 
   const [selectedTimezone, setSelectedTimezone] = useLocalStorage(
     TIMEZONE_KEY,
diff --git a/airflow/ui/src/layouts/BaseLayout.tsx 
b/airflow/ui/src/layouts/BaseLayout.tsx
index 73b43a40a25..ddc3dc16ba8 100644
--- a/airflow/ui/src/layouts/BaseLayout.tsx
+++ b/airflow/ui/src/layouts/BaseLayout.tsx
@@ -25,7 +25,7 @@ import { useConfig } from "src/queries/useConfig";
 import { Nav } from "./Nav";
 
 export const BaseLayout = ({ children }: PropsWithChildren) => {
-  const instanceName = useConfig("webserver", "instance_name");
+  const instanceName = useConfig("instance_name");
   // const instanceNameHasMarkup =
   //   webserverConfig?.options.find(
   //     ({ key }) => key === "instance_name_has_markup",
diff --git a/airflow/ui/src/layouts/Nav/DocsButton.tsx 
b/airflow/ui/src/layouts/Nav/DocsButton.tsx
index 8b305e87f0e..b6e494b4fc4 100644
--- a/airflow/ui/src/layouts/Nav/DocsButton.tsx
+++ b/airflow/ui/src/layouts/Nav/DocsButton.tsx
@@ -40,7 +40,7 @@ const links = [
 ];
 
 export const DocsButton = () => {
-  const showAPIDocs = useConfig("webserver", "enable_swagger_ui") === "True";
+  const showAPIDocs = Boolean(useConfig("enable_swagger_ui"));
 
   return (
     <Menu.Root positioning={{ placement: "right" }}>
diff --git a/airflow/ui/src/pages/DagsList/Dag/Code/Code.tsx 
b/airflow/ui/src/pages/DagsList/Dag/Code/Code.tsx
index 8dd9a68472d..e224db5a362 100644
--- a/airflow/ui/src/pages/DagsList/Dag/Code/Code.tsx
+++ b/airflow/ui/src/pages/DagsList/Dag/Code/Code.tsx
@@ -60,7 +60,7 @@ export const Code = () => {
     dagId: dagId ?? "",
   });
 
-  const defaultWrap = useConfig("webserver", "default_wrap") === "True";
+  const defaultWrap = Boolean(useConfig("default_wrap"));
 
   const [wrap, setWrap] = useState(defaultWrap);
 
diff --git a/airflow/ui/src/pages/DagsList/DagsFilters.tsx 
b/airflow/ui/src/pages/DagsList/DagsFilters.tsx
index 9ec45dff164..fbce68971b2 100644
--- a/airflow/ui/src/pages/DagsList/DagsFilters.tsx
+++ b/airflow/ui/src/pages/DagsList/DagsFilters.tsx
@@ -70,12 +70,10 @@ export const DagsFilters = () => {
     orderBy: "name",
   });
 
-  const hidePausedDagsByDefault = useConfig(
-    "webserver",
-    "hide_paused_dags_by_default",
+  const hidePausedDagsByDefault = Boolean(
+    useConfig("hide_paused_dags_by_default"),
   );
-  const defaultShowPaused =
-    hidePausedDagsByDefault === "True" ? "false" : "all";
+  const defaultShowPaused = hidePausedDagsByDefault ? "false" : "all";
 
   const { setTableURLState, tableURLState } = useTableURLState();
   const { pagination, sorting } = tableURLState;
diff --git a/airflow/ui/src/pages/DagsList/DagsList.tsx 
b/airflow/ui/src/pages/DagsList/DagsList.tsx
index daa931e5464..66f1bd8a700 100644
--- a/airflow/ui/src/pages/DagsList/DagsList.tsx
+++ b/airflow/ui/src/pages/DagsList/DagsList.tsx
@@ -159,12 +159,10 @@ export const DagsList = () => {
     "card",
   );
 
-  const hidePausedDagsByDefault = useConfig(
-    "webserver",
-    "hide_paused_dags_by_default",
+  const hidePausedDagsByDefault = Boolean(
+    useConfig("hide_paused_dags_by_default"),
   );
-  const defaultShowPaused =
-    hidePausedDagsByDefault === "True" ? false : undefined;
+  const defaultShowPaused = hidePausedDagsByDefault ? false : undefined;
 
   const showPaused = searchParams.get(PAUSED_PARAM);
 
diff --git a/airflow/ui/src/pages/Dashboard/Health/Health.tsx 
b/airflow/ui/src/pages/Dashboard/Health/Health.tsx
index 42829a69581..0694283930c 100644
--- a/airflow/ui/src/pages/Dashboard/Health/Health.tsx
+++ b/airflow/ui/src/pages/Dashboard/Health/Health.tsx
@@ -21,16 +21,12 @@ import { MdOutlineHealthAndSafety } from "react-icons/md";
 
 import { useMonitorServiceGetHealth } from "openapi/queries";
 import { ErrorAlert } from "src/components/ErrorAlert";
-import { useConfig } from "src/queries/useConfig";
 
 import { HealthTag } from "./HealthTag";
 
 export const Health = () => {
   const { data, error, isLoading } = useMonitorServiceGetHealth();
 
-  const isStandaloneDagProcessor =
-    useConfig("scheduler", "standalone_dag_processor") === "True";
-
   return (
     <Box>
       <Flex color="fg.muted" mb={2}>
@@ -58,14 +54,15 @@ export const Health = () => {
           status={data?.triggerer.status}
           title="Triggerer"
         />
-        {isStandaloneDagProcessor ? (
+        {/* TODO: Update this to match the API when we move the config check 
to the API level */}
+        {data?.dag_processor.status === undefined ? undefined : (
           <HealthTag
             isLoading={isLoading}
-            
latestHeartbeat={data?.dag_processor.latest_dag_processor_heartbeat}
-            status={data?.dag_processor.status}
+            latestHeartbeat={data.dag_processor.latest_dag_processor_heartbeat}
+            status={data.dag_processor.status}
             title="Dag Processor"
           />
-        ) : undefined}
+        )}
       </HStack>
     </Box>
   );
diff --git a/airflow/ui/src/queries/useConfig.tsx 
b/airflow/ui/src/queries/useConfig.tsx
index 7dd17ef27bf..a77a6613bfa 100644
--- a/airflow/ui/src/queries/useConfig.tsx
+++ b/airflow/ui/src/queries/useConfig.tsx
@@ -16,17 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-import { useConfigServiceGetConfig } from "openapi/queries";
+import { useConfigServiceGetConfigs } from "openapi/queries";
+import type { ConfigResponse } from "openapi/requests/types.gen";
 
-export const useConfig = (sectionName: string, configKey: string) => {
-  // TODO: replace with a ui/config endpoint which will always return what the 
UI need to render
-  const { data: config } = useConfigServiceGetConfig({
-    accept: "application/json",
-  });
+export const useConfig = (configKey: keyof ConfigResponse) => {
+  const { data: config } = useConfigServiceGetConfigs();
 
-  const configSection = config?.sections.find(
-    (section) => section.name === sectionName,
-  );
-
-  return configSection?.options.find(({ key }) => key === configKey)?.value;
+  return config?.[configKey];
 };

Reply via email to