Fixed name and description for Custom Component when they are empty
This commit is contained in:
parent
66428b730e
commit
06e17ada01
6 changed files with 22 additions and 14 deletions
|
|
@ -3,8 +3,6 @@ from langflow.field_typing import Data
|
||||||
|
|
||||||
|
|
||||||
class Component(CustomComponent):
|
class Component(CustomComponent):
|
||||||
display_name: str = "Custom Component"
|
|
||||||
description: str = "Create any custom component you want!"
|
|
||||||
documentation: str = "http://docs.langflow.org/components/custom"
|
documentation: str = "http://docs.langflow.org/components/custom"
|
||||||
|
|
||||||
def build_config(self):
|
def build_config(self):
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,8 @@ from langflow.utils import validate
|
||||||
|
|
||||||
|
|
||||||
class CustomComponent(Component):
|
class CustomComponent(Component):
|
||||||
display_name: Optional[str] = "Custom Component"
|
display_name: Optional[str] = None
|
||||||
description: Optional[str] = "Custom Component"
|
description: Optional[str] = None
|
||||||
code: Optional[str] = None
|
code: Optional[str] = None
|
||||||
field_config: dict = {}
|
field_config: dict = {}
|
||||||
code_class_base_inheritance: ClassVar[str] = "CustomComponent"
|
code_class_base_inheritance: ClassVar[str] = "CustomComponent"
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ class FrontendNode(BaseModel):
|
||||||
"template": self.template.to_dict(self.format_field),
|
"template": self.template.to_dict(self.format_field),
|
||||||
"description": self.description,
|
"description": self.description,
|
||||||
"base_classes": self.base_classes,
|
"base_classes": self.base_classes,
|
||||||
"display_name": self.display_name or self.name,
|
"display_name": self.display_name,
|
||||||
"custom_fields": self.custom_fields,
|
"custom_fields": self.custom_fields,
|
||||||
"output_types": self.output_types,
|
"output_types": self.output_types,
|
||||||
"documentation": self.documentation,
|
"documentation": self.documentation,
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ class Component(CustomComponent):
|
||||||
|
|
||||||
class CustomComponentFrontendNode(FrontendNode):
|
class CustomComponentFrontendNode(FrontendNode):
|
||||||
name: str = "CustomComponent"
|
name: str = "CustomComponent"
|
||||||
display_name: str = "Custom Component"
|
display_name: str = None
|
||||||
beta: bool = True
|
beta: bool = True
|
||||||
template: Template = Template(
|
template: Template = Template(
|
||||||
type_name="CustomComponent",
|
type_name="CustomComponent",
|
||||||
|
|
|
||||||
|
|
@ -156,11 +156,16 @@ export default function ParameterComponent({
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleNodeClass = (newNodeClass: APIClassType, code?: string): void => {
|
const handleNodeClass = (newNodeClass: APIClassType, code?: string): void => {
|
||||||
|
if (!data.node) return;
|
||||||
if (data.node!.template[name].value !== newNodeClass.template[name].value) {
|
if (data.node!.template[name].value !== newNodeClass.template[name].value) {
|
||||||
takeSnapshot();
|
takeSnapshot();
|
||||||
}
|
}
|
||||||
data.node = newNodeClass;
|
data.node! = {
|
||||||
data.node.template[name].value = code;
|
...newNodeClass,
|
||||||
|
description: newNodeClass.description ?? data.node!.description,
|
||||||
|
display_name: newNodeClass.display_name ?? data.node!.display_name,
|
||||||
|
};
|
||||||
|
data.node!.template[name].value = code;
|
||||||
updateNodeInternals(data.id);
|
updateNodeInternals(data.id);
|
||||||
// Set state to pending
|
// Set state to pending
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
|
|
|
||||||
|
|
@ -107,6 +107,8 @@ export default function GenericNode({
|
||||||
|
|
||||||
const showNode = data.showNode ?? true;
|
const showNode = data.showNode ?? true;
|
||||||
|
|
||||||
|
const nameEditable = data.node?.flow || data.type === "CustomComponent";
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<NodeToolbar>
|
<NodeToolbar>
|
||||||
|
|
@ -164,7 +166,7 @@ export default function GenericNode({
|
||||||
/>
|
/>
|
||||||
{showNode && (
|
{showNode && (
|
||||||
<div className="generic-node-tooltip-div">
|
<div className="generic-node-tooltip-div">
|
||||||
{data.node?.flow && inputName ? (
|
{nameEditable && inputName ? (
|
||||||
<div>
|
<div>
|
||||||
<InputComponent
|
<InputComponent
|
||||||
onBlur={() => {
|
onBlur={() => {
|
||||||
|
|
@ -194,7 +196,7 @@ export default function GenericNode({
|
||||||
<div className="generic-node-tooltip-div pr-2 text-primary">
|
<div className="generic-node-tooltip-div pr-2 text-primary">
|
||||||
{data.node?.display_name}
|
{data.node?.display_name}
|
||||||
</div>
|
</div>
|
||||||
{data.node?.flow && (
|
{nameEditable && (
|
||||||
<IconComponent
|
<IconComponent
|
||||||
name="Pencil"
|
name="Pencil"
|
||||||
className="h-4 w-4 text-ring"
|
className="h-4 w-4 text-ring"
|
||||||
|
|
@ -362,14 +364,14 @@ export default function GenericNode({
|
||||||
className={
|
className={
|
||||||
showNode
|
showNode
|
||||||
? "overflow-hidden " +
|
? "overflow-hidden " +
|
||||||
(data.node?.description === "" && !data.node?.flow
|
(data.node?.description === "" && !nameEditable
|
||||||
? "pb-5"
|
? "pb-5"
|
||||||
: "py-5")
|
: "py-5")
|
||||||
: ""
|
: ""
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<div className="generic-node-desc">
|
<div className="generic-node-desc">
|
||||||
{showNode && data.node?.flow && inputDescription ? (
|
{showNode && nameEditable && inputDescription ? (
|
||||||
<Textarea
|
<Textarea
|
||||||
autoFocus
|
autoFocus
|
||||||
onBlur={() => {
|
onBlur={() => {
|
||||||
|
|
@ -401,7 +403,9 @@ export default function GenericNode({
|
||||||
<div
|
<div
|
||||||
className={cn(
|
className={cn(
|
||||||
"generic-node-desc-text truncate-multiline word-break-break-word",
|
"generic-node-desc-text truncate-multiline word-break-break-word",
|
||||||
data.node?.description === "" && data.node?.flow
|
(data.node?.description === "" ||
|
||||||
|
!data.node?.description) &&
|
||||||
|
nameEditable
|
||||||
? "font-light italic"
|
? "font-light italic"
|
||||||
: ""
|
: ""
|
||||||
)}
|
)}
|
||||||
|
|
@ -410,7 +414,8 @@ export default function GenericNode({
|
||||||
takeSnapshot();
|
takeSnapshot();
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{data.node?.description === "" && data.node?.flow
|
{(data.node?.description === "" || !data.node?.description) &&
|
||||||
|
nameEditable
|
||||||
? "Double Click to Edit Description"
|
? "Double Click to Edit Description"
|
||||||
: data.node?.description}
|
: data.node?.description}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue