"Fix allowExport prop in CodeTabsComponent and ApiModal" (#1918)

* fix(codeTabsComponent): add allowExport prop to CodeTabsComponent to conditionally
render ExportModal component based on the prop value
feat(apiModal): pass allowExport prop to CodeTabsComponent in ApiModal view
feat(types): add allowExport prop to codeTabsPropsType in components index file

* fix bug on delete edge
This commit is contained in:
anovazzi1 2024-05-19 21:12:47 -03:00 committed by GitHub
commit 75642cc2d6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 50 additions and 41 deletions

View file

@ -54,6 +54,7 @@ export default function CodeTabsComponent({
tweaks,
setActiveTweaks,
activeTweaks,
allowExport = false,
}: codeTabsPropsType) {
const [isCopied, setIsCopied] = useState<Boolean>(false);
const [data, setData] = useState(flow ? flow["data"]!["nodes"] : null);
@ -141,39 +142,43 @@ export default function CodeTabsComponent({
)}
<div className="float-right mx-1 mb-1 mt-2 flex gap-2">
<div
className={
Number(activeTab) > 2
? "hidden"
: "relative top-[2.5px] flex gap-2"
}
>
<Switch
style={{
transform: `scaleX(${0.7}) scaleY(${0.7})`,
}}
id="tweaks-switch"
onCheckedChange={setActiveTweaks}
autoFocus={false}
/>
<Label
{tweaks && (
<div
className={
"relative right-1 top-[4px] text-xs font-medium text-gray-500 dark:text-gray-300 " +
(activeTweaks
? "font-bold text-black dark:text-white"
: "font-medium")
Number(activeTab) > 2
? "hidden"
: "relative top-[2.5px] flex gap-2"
}
htmlFor="tweaks-switch"
>
Tweaks
</Label>
</div>
<ExportModal>
<div className="flex cursor-pointer items-center gap-1.5 rounded bg-none p-1 text-xs text-gray-500 dark:text-gray-300">
<IconComponent name="FileDown" className="h-4 w-4" />
Export Flow
<Switch
style={{
transform: `scaleX(${0.7}) scaleY(${0.7})`,
}}
id="tweaks-switch"
onCheckedChange={setActiveTweaks}
autoFocus={false}
/>
<Label
className={
"relative right-1 top-[4px] text-xs font-medium text-gray-500 dark:text-gray-300 " +
(activeTweaks
? "font-bold text-black dark:text-white"
: "font-medium")
}
htmlFor="tweaks-switch"
>
Tweaks
</Label>
</div>
</ExportModal>
)}
{allowExport && (
<ExportModal>
<div className="flex cursor-pointer items-center gap-1.5 rounded bg-none p-1 text-xs text-gray-500 dark:text-gray-300">
<IconComponent name="FileDown" className="h-4 w-4" />
Export Flow
</div>
</ExportModal>
)}
{Number(activeTab) < 4 && (
<>

View file

@ -212,6 +212,7 @@ const ApiModal = forwardRef(
}}
activeTweaks={activeTweaks}
setActiveTweaks={setActiveTweaks}
allowExport
/>
</BaseModal.Content>
</BaseModal>

View file

@ -663,6 +663,7 @@ export type codeTabsPropsType = {
};
activeTweaks?: boolean;
setActiveTweaks?: (value: boolean) => void;
allowExport?: boolean;
};
export type crashComponentPropsType = {

View file

@ -740,28 +740,30 @@ export function validateSelection(
selection: OnSelectionChangeParams,
edges: Edge[],
): Array<string> {
const clonedSelection = cloneDeep(selection);
const clonedEdges = cloneDeep(edges);
//add edges to selection if selection mode selected only nodes
if (selection.edges.length === 0) {
selection.edges = edges;
if (clonedSelection.edges.length === 0) {
clonedSelection.edges = clonedEdges;
}
// get only edges that are connected to the nodes in the selection
// first creates a set of all the nodes ids
let nodesSet = new Set(selection.nodes.map((n) => n.id));
let nodesSet = new Set(clonedSelection.nodes.map((n) => n.id));
// then filter the edges that are connected to the nodes in the set
let connectedEdges = selection.edges.filter(
let connectedEdges = clonedSelection.edges.filter(
(e) => nodesSet.has(e.source) && nodesSet.has(e.target),
);
// add the edges to the selection
selection.edges = connectedEdges;
clonedSelection.edges = connectedEdges;
let errorsArray: Array<string> = [];
// check if there is more than one node
if (selection.nodes.length < 2) {
if (clonedSelection.nodes.length < 2) {
errorsArray.push("Please select more than one node");
}
if (
selection.nodes.some(
clonedSelection.nodes.some(
(node) =>
isInputNode(node.data as NodeDataType) ||
isOutputNode(node.data as NodeDataType),
@ -773,8 +775,8 @@ export function validateSelection(
}
//check if there are two or more nodes with free outputs
if (
selection.nodes.filter(
(n) => !selection.edges.some((e) => e.source === n.id),
clonedSelection.nodes.filter(
(n) => !clonedSelection.edges.some((e) => e.source === n.id),
).length > 1
) {
errorsArray.push("Please select only one node with free outputs");
@ -782,10 +784,10 @@ export function validateSelection(
// check if there is any node that does not have any connection
if (
selection.nodes.some(
clonedSelection.nodes.some(
(node) =>
!selection.edges.some((edge) => edge.target === node.id) &&
!selection.edges.some((edge) => edge.source === node.id),
!clonedSelection.edges.some((edge) => edge.target === node.id) &&
!clonedSelection.edges.some((edge) => edge.source === node.id),
)
) {
errorsArray.push("Please select only nodes that are connected");