{"version":3,"file":"CaseHierarchy.stories.jsx","sourceRoot":"","sources":["../../../src/work/CaseHierarchy/CaseHierarchy.stories.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState, useRef } from 'react';\nimport type { Meta, StoryFn } from '@storybook/react';\nimport { action } from '@storybook/addon-actions';\n\nimport { CaseHierarchy, type CaseHierarchyProps } from '@pega/cosmos-react-work';\nimport { createUID, treeHelpers } from '@pega/cosmos-react-core';\n\nexport default {\n  title: 'Work/CaseHierarchy',\n  component: CaseHierarchy\n} as Meta;\n\ninterface CaseHierarchyStoryArgs\n  extends Pick<CaseHierarchyProps, 'lined' | 'icon' | 'heading' | 'error'> {\n  numCases: number;\n  numChildCases: number;\n  currentCaseId?: string;\n  loading?: boolean;\n  loadMore?: boolean;\n  nodes?: CaseHierarchyProps['nodes'];\n}\n\nexport const CaseHierarchyDemo: StoryFn<CaseHierarchyStoryArgs> = (\n  args: CaseHierarchyStoryArgs\n) => {\n  const [currentNodeId, setCurrentNodeId] = useState<string | undefined>(args.currentCaseId);\n  const [allNodes, setAllNodes] = useState<CaseHierarchyProps['nodes']>([]);\n  const allNodesRef = useRef<CaseHierarchyProps['nodes']>([]);\n  const [loading, setLoading] = useState<boolean>(args.loading ?? true);\n\n  useEffect(() => {\n    const timer = setTimeout(() => {\n      setLoading(false);\n    }, 500);\n\n    return () => clearTimeout(timer);\n  }, []);\n\n  const getMockNodes = ({\n    length = args.numChildCases,\n    parent = true\n  }: {\n    length?: number;\n    parent?: boolean;\n  } = {}): CaseHierarchyProps['nodes'] => {\n    return Array.from({ length }, (_, i) => {\n      const isParent = parent && i !== 2;\n      const id = createUID();\n      const generateRandomCaseId = () =>\n        'EPIC-'.concat(String(Math.floor(100000 + Math.random() * 900000)));\n      const generateRandomChildCaseId = () =>\n        'US-'.concat(String(Math.floor(100000 + Math.random() * 900000)));\n      return {\n        id,\n        label: isParent ? 'Parent Case Type' : 'Child Case Type',\n        secondary: isParent ? generateRandomCaseId() : generateRandomChildCaseId(),\n        nodes: isParent ? [] : undefined,\n        onClick: isParent\n          ? undefined\n          : nodeId => {\n              action(`Action for node: ${nodeId}`)();\n            },\n        href: id === currentNodeId ? undefined : `#${id}`,\n        onPreview: isParent ? () => {} : undefined,\n        onLoadMore:\n          isParent && args.loadMore\n            ? () => {\n                const currentNode = treeHelpers.getNode(allNodesRef.current, id);\n                if (currentNode && currentNode.nodes) {\n                  currentNode.nodes = [\n                    ...currentNode.nodes,\n                    ...getMockNodes({ length: args.numChildCases, parent: false })\n                  ];\n                  setAllNodes([...allNodesRef.current]);\n                }\n              }\n            : undefined\n      };\n    });\n  };\n\n  const getNodesCount = (nodes: CaseHierarchyProps['nodes']): number => {\n    let nodeCount = 0;\n    treeHelpers.forEachNode(nodes, () => {\n      nodeCount += 1;\n    });\n    return nodeCount;\n  };\n\n  useEffect(() => {\n    allNodesRef.current = allNodes;\n  }, [allNodes]);\n\n  useEffect(() => {\n    setAllNodes(() => {\n      if (args.nodes) return args.nodes;\n      return getMockNodes({ length: args.numCases });\n    });\n  }, []);\n\n  useEffect(() => {\n    if (args.nodes) return;\n    if (args.numCases > 0) {\n      setAllNodes(getMockNodes({ length: args.numCases }));\n    }\n  }, [args.numCases, args.numChildCases, args.nodes, args.loadMore]);\n\n  const loadChildNodes = (id: string) => {\n    setTimeout(() => {\n      setAllNodes(tree => {\n        return treeHelpers.mapNode(tree, id, node => {\n          return {\n            ...node,\n            loading: false,\n            nodes: [...(node.nodes ?? []), ...getMockNodes()]\n          };\n        });\n      });\n    }, 1000);\n  };\n\n  return (\n    <CaseHierarchy\n      heading={args.heading ?? 'Case relationships'}\n      icon={args.icon ?? 'folder-nested'}\n      lined={args.lined}\n      error={args.error}\n      currentCaseId={args.currentCaseId}\n      count={getNodesCount(allNodes)}\n      nodes={allNodes}\n      loading={args.loading ? args.loading : loading}\n      onLoadMore={\n        args.loadMore\n          ? () =>\n              setAllNodes([...allNodesRef.current, ...getMockNodes({ length: args.numChildCases })])\n          : undefined\n      }\n      onNodeClick={(id, e) => {\n        e.preventDefault();\n        setCurrentNodeId(id);\n      }}\n      onNodeToggle={id => {\n        const clickedNode = treeHelpers.getNode(allNodes, id);\n        // If a leaf node, just set to current\n        if (!clickedNode?.nodes) return;\n\n        setAllNodes(tree =>\n          treeHelpers.mapNode(tree, id, node => {\n            return {\n              ...node,\n              expanded: !node.expanded,\n              loading: node.nodes?.length === 0\n            };\n          })\n        );\n\n        // If a parent node with children already loaded, we're done.\n        if (clickedNode?.nodes?.length > 0) return;\n\n        loadChildNodes(id);\n      }}\n      selectableParents\n    />\n  );\n};\n\nCaseHierarchyDemo.args = {\n  loadMore: true,\n  lined: false,\n  numCases: 3,\n  numChildCases: 3\n};\n\nCaseHierarchyDemo.argTypes = {\n  loadMore: { control: { type: 'boolean' } },\n  lined: { control: { type: 'boolean' } },\n  numCases: { control: { type: 'number' } },\n  numChildCases: { control: { type: 'number' } }\n};\n"]}