fix(web): workflow details not updated when version changes
This commit is contained in:
		
							parent
							
								
									9d8f570b4d
								
							
						
					
					
						commit
						04ca3760ce
					
				@ -1,12 +1,12 @@
 | 
				
			|||||||
import { DeploymentsTable, RunsTable } from "../../../components/RunsTable";
 | 
					import { DeploymentsTable, RunsTable } from "../../../components/RunsTable";
 | 
				
			||||||
import { findFirstTableWithVersion } from "../../../server/findFirstTableWithVersion";
 | 
					import { findFirstTableWithVersion } from "../../../server/findFirstTableWithVersion";
 | 
				
			||||||
import { MachinesWSMain } from "@/components/MachinesWS";
 | 
					import { MachinesWSMain } from "@/components/MachinesWS";
 | 
				
			||||||
 | 
					import { VersionDetails } from "@/components/VersionDetails";
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  CopyWorkflowVersion,
 | 
					  CopyWorkflowVersion,
 | 
				
			||||||
  CreateDeploymentButton,
 | 
					  CreateDeploymentButton,
 | 
				
			||||||
  MachineSelect,
 | 
					  MachineSelect,
 | 
				
			||||||
  RunWorkflowButton,
 | 
					  RunWorkflowButton,
 | 
				
			||||||
  VersionDetails,
 | 
					 | 
				
			||||||
  VersionSelect,
 | 
					  VersionSelect,
 | 
				
			||||||
} from "@/components/VersionSelect";
 | 
					} from "@/components/VersionSelect";
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										72
									
								
								web/src/components/VersionDetails.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								web/src/components/VersionDetails.tsx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					"use client";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { getInputsFromWorkflow } from "../lib/getInputsFromWorkflow";
 | 
				
			||||||
 | 
					import { getWorkflowVersionFromVersionIndex } from "./VersionSelect";
 | 
				
			||||||
 | 
					import { customInputNodes } from "./customInputNodes";
 | 
				
			||||||
 | 
					import { Badge } from "@/components/ui/badge";
 | 
				
			||||||
 | 
					import {
 | 
				
			||||||
 | 
					  Tooltip,
 | 
				
			||||||
 | 
					  TooltipContent,
 | 
				
			||||||
 | 
					  TooltipTrigger,
 | 
				
			||||||
 | 
					} from "@/components/ui/tooltip";
 | 
				
			||||||
 | 
					import type { findFirstTableWithVersion } from "@/server/findFirstTableWithVersion";
 | 
				
			||||||
 | 
					import { parseAsInteger, useQueryState } from "next-usequerystate";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function VersionDetails({
 | 
				
			||||||
 | 
					  workflow,
 | 
				
			||||||
 | 
					}: {
 | 
				
			||||||
 | 
					  workflow: Awaited<ReturnType<typeof findFirstTableWithVersion>>;
 | 
				
			||||||
 | 
					}) {
 | 
				
			||||||
 | 
					  const [version] = useQueryState("version", {
 | 
				
			||||||
 | 
					    defaultValue: workflow?.versions[0].version ?? 1,
 | 
				
			||||||
 | 
					    ...parseAsInteger,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  const workflow_version = getWorkflowVersionFromVersionIndex(
 | 
				
			||||||
 | 
					    workflow,
 | 
				
			||||||
 | 
					    version
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					  const inputs = getInputsFromWorkflow(workflow_version);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return (
 | 
				
			||||||
 | 
					    <div className="mt-4">
 | 
				
			||||||
 | 
					      Workflow Details
 | 
				
			||||||
 | 
					      <div className="border rounded-lg p-2">
 | 
				
			||||||
 | 
					        {inputs && inputs.length > 0 ? (
 | 
				
			||||||
 | 
					          <div className="flex flex-col gap-2">
 | 
				
			||||||
 | 
					            {inputs.map((value) => {
 | 
				
			||||||
 | 
					              if (!value || !value.class_type) return <> </>;
 | 
				
			||||||
 | 
					              const nodeType = customInputNodes[value.class_type];
 | 
				
			||||||
 | 
					              if (nodeType) {
 | 
				
			||||||
 | 
					                const input_id = value.input_id;
 | 
				
			||||||
 | 
					                const defaultValue = value.default_value;
 | 
				
			||||||
 | 
					                return (
 | 
				
			||||||
 | 
					                  <div key={input_id}>
 | 
				
			||||||
 | 
					                    <Tooltip>
 | 
				
			||||||
 | 
					                      <TooltipTrigger>
 | 
				
			||||||
 | 
					                        <Badge variant="secondary">
 | 
				
			||||||
 | 
					                          <div>
 | 
				
			||||||
 | 
					                            {input_id}
 | 
				
			||||||
 | 
					                            {" : "}
 | 
				
			||||||
 | 
					                            <span className="text-orange-500">{nodeType}</span>
 | 
				
			||||||
 | 
					                          </div>
 | 
				
			||||||
 | 
					                        </Badge>
 | 
				
			||||||
 | 
					                        {/* {nodeType}{" "} */}
 | 
				
			||||||
 | 
					                        {/* <Button variant="outline">Hover</Button> */}
 | 
				
			||||||
 | 
					                      </TooltipTrigger>
 | 
				
			||||||
 | 
					                      <TooltipContent>
 | 
				
			||||||
 | 
					                        Default Value: {defaultValue}
 | 
				
			||||||
 | 
					                      </TooltipContent>
 | 
				
			||||||
 | 
					                    </Tooltip>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					              return <></>;
 | 
				
			||||||
 | 
					            })}
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        ) : (
 | 
				
			||||||
 | 
					          <span className="text-sm">No external inputs</span>
 | 
				
			||||||
 | 
					        )}
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,10 +1,7 @@
 | 
				
			|||||||
"use client";
 | 
					"use client";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { getInputsFromWorkflow } from "../lib/getInputsFromWorkflow";
 | 
					 | 
				
			||||||
import { callServerPromise } from "./callServerPromise";
 | 
					import { callServerPromise } from "./callServerPromise";
 | 
				
			||||||
import { customInputNodes } from "./customInputNodes";
 | 
					 | 
				
			||||||
import { LoadingIcon } from "@/components/LoadingIcon";
 | 
					import { LoadingIcon } from "@/components/LoadingIcon";
 | 
				
			||||||
import { Badge } from "@/components/ui/badge";
 | 
					 | 
				
			||||||
import { Button } from "@/components/ui/button";
 | 
					import { Button } from "@/components/ui/button";
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  DropdownMenu,
 | 
					  DropdownMenu,
 | 
				
			||||||
@ -21,11 +18,6 @@ import {
 | 
				
			|||||||
  SelectTrigger,
 | 
					  SelectTrigger,
 | 
				
			||||||
  SelectValue,
 | 
					  SelectValue,
 | 
				
			||||||
} from "@/components/ui/select";
 | 
					} from "@/components/ui/select";
 | 
				
			||||||
import {
 | 
					 | 
				
			||||||
  Tooltip,
 | 
					 | 
				
			||||||
  TooltipContent,
 | 
					 | 
				
			||||||
  TooltipTrigger,
 | 
					 | 
				
			||||||
} from "@/components/ui/tooltip";
 | 
					 | 
				
			||||||
import { createRun } from "@/server/createRun";
 | 
					import { createRun } from "@/server/createRun";
 | 
				
			||||||
import { createDeployments } from "@/server/curdDeploments";
 | 
					import { createDeployments } from "@/server/curdDeploments";
 | 
				
			||||||
import type { getMachines } from "@/server/curdMachine";
 | 
					import type { getMachines } from "@/server/curdMachine";
 | 
				
			||||||
@ -258,65 +250,7 @@ export function getWorkflowVersionFromVersionIndex(
 | 
				
			|||||||
  workflow: Awaited<ReturnType<typeof findFirstTableWithVersion>>,
 | 
					  workflow: Awaited<ReturnType<typeof findFirstTableWithVersion>>,
 | 
				
			||||||
  version: number
 | 
					  version: number
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
  const workflow_version = workflow?.versions.find(
 | 
					  const workflow_version = workflow?.versions.find((x) => x.version == version);
 | 
				
			||||||
    (x) => x.version === version
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return workflow_version;
 | 
					  return workflow_version;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
export function VersionDetails({
 | 
					 | 
				
			||||||
  workflow,
 | 
					 | 
				
			||||||
}: {
 | 
					 | 
				
			||||||
  workflow: Awaited<ReturnType<typeof findFirstTableWithVersion>>;
 | 
					 | 
				
			||||||
}) {
 | 
					 | 
				
			||||||
  const [version] = useQueryState("version", {
 | 
					 | 
				
			||||||
    defaultValue: workflow?.versions[0].version ?? 1,
 | 
					 | 
				
			||||||
    ...parseAsInteger,
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
  const workflow_version = getWorkflowVersionFromVersionIndex(
 | 
					 | 
				
			||||||
    workflow,
 | 
					 | 
				
			||||||
    version
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
  const inputs = getInputsFromWorkflow(workflow_version);
 | 
					 | 
				
			||||||
  return (
 | 
					 | 
				
			||||||
    <div className="mt-4">
 | 
					 | 
				
			||||||
      Workflow Details
 | 
					 | 
				
			||||||
      <div className="border rounded-lg p-2">
 | 
					 | 
				
			||||||
        {inputs && (
 | 
					 | 
				
			||||||
          <div className="flex flex-col gap-2">
 | 
					 | 
				
			||||||
            {inputs.map((value) => {
 | 
					 | 
				
			||||||
              if (!value || !value.class_type) return <> </>;
 | 
					 | 
				
			||||||
              const nodeType = customInputNodes[value.class_type];
 | 
					 | 
				
			||||||
              if (nodeType) {
 | 
					 | 
				
			||||||
                const input_id = value.input_id;
 | 
					 | 
				
			||||||
                const defaultValue = value.default_value;
 | 
					 | 
				
			||||||
                return (
 | 
					 | 
				
			||||||
                  <div key={input_id}>
 | 
					 | 
				
			||||||
                    <Tooltip>
 | 
					 | 
				
			||||||
                      <TooltipTrigger>
 | 
					 | 
				
			||||||
                        <Badge variant="secondary">
 | 
					 | 
				
			||||||
                          <div>
 | 
					 | 
				
			||||||
                            {input_id}
 | 
					 | 
				
			||||||
                            {" : "}
 | 
					 | 
				
			||||||
                            <span className="text-orange-500">{nodeType}</span>
 | 
					 | 
				
			||||||
                          </div>
 | 
					 | 
				
			||||||
                        </Badge>
 | 
					 | 
				
			||||||
                        {/* {nodeType}{" "} */}
 | 
					 | 
				
			||||||
                        {/* <Button variant="outline">Hover</Button> */}
 | 
					 | 
				
			||||||
                      </TooltipTrigger>
 | 
					 | 
				
			||||||
                      <TooltipContent>
 | 
					 | 
				
			||||||
                        Default Value: {defaultValue}
 | 
					 | 
				
			||||||
                      </TooltipContent>
 | 
					 | 
				
			||||||
                    </Tooltip>
 | 
					 | 
				
			||||||
                  </div>
 | 
					 | 
				
			||||||
                );
 | 
					 | 
				
			||||||
              }
 | 
					 | 
				
			||||||
              return <></>;
 | 
					 | 
				
			||||||
            })}
 | 
					 | 
				
			||||||
          </div>
 | 
					 | 
				
			||||||
        )}
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user