{"version":3,"file":"Demo.jsx","sourceRoot":"","sources":["../../../src/dnd/StandardDragDropList/Demo.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport type { MouseEvent, ReactNode } from 'react';\n\nimport { StandardDragDropList, DragDropManager } from '@pega/cosmos-react-dnd';\nimport type {\n  StandardDragDropListItemProps,\n  StandardDragDropListProps\n} from '@pega/cosmos-react-dnd';\nimport { Button, Flex, Icon, useElement } from '@pega/cosmos-react-core';\nimport type { MultiSelectInputProps } from '@pega/cosmos-react-core/lib/components/ComboBox/MultiSelectInput/MultiSelectInput.types';\n\nimport { mockQuery, mockFields, mockGroups, mockViews } from './mockData';\nimport type { MockRawItem } from './mockData';\nimport ItemConfig from './ItemConfig';\nimport SelectionMenu from './SelectionMenu';\nimport type { SelectionMenuProps } from './SelectionMenu';\n\nexport interface StandardDragDropListDemoProps {\n  items: MockRawItem[];\n  draggable?: boolean;\n  info?: ReactNode;\n  icons?: boolean;\n  onConfigure?: boolean;\n  onRemove?: boolean;\n  onAddTo?: boolean;\n  selectable?: boolean;\n  footer?: boolean;\n  onSelectionChange?: () => void;\n}\n\nexport default ({\n  items,\n  draggable,\n  info,\n  icons,\n  onConfigure,\n  onRemove,\n  onAddTo,\n  selectable,\n  footer,\n  onSelectionChange\n}: StandardDragDropListDemoProps): JSX.Element => {\n  // The state of the list's content is maintained here and the raw item objects are transformed below prior to render.\n  const [mockRawItems, setMockRawItems] = useState<MockRawItem[]>(items);\n\n  const [configItemId, setConfigItemId] = useState<MockRawItem['id'] | null>(null);\n\n  const [configTarget, setConfigTarget] = useElement(null);\n\n  const [selectionMenuTarget, setSelectionMenuTarget] = useElement(null);\n\n  const [selectionConstraint, setSelectionConstraint] =\n    useState<SelectionMenuProps['constraint']>();\n\n  const [addToItemId, setAddToItemId] = useState<MockRawItem['id'] | null>(null);\n\n  const [errors, setErrors] = useState<{ rawItemId: MockRawItem['id']; message: string }[]>([]);\n\n  const onAddContent = useCallback(\n    async (selected: NonNullable<MultiSelectInputProps['selected']>) => {\n      setSelectionMenuTarget(null);\n      setSelectionConstraint(undefined);\n\n      if (selected.length === 0) return;\n\n      const addedItems = await mockQuery({ id: selected.map(({ id }) => id) });\n\n      setMockRawItems(cur => {\n        if (addToItemId) {\n          return cur.map(item => {\n            if (item.id === addToItemId && item.items) {\n              return {\n                ...item,\n                items: [\n                  ...item.items,\n                  ...addedItems.map(nestedItem => ({\n                    ...nestedItem,\n                    id: `${addToItemId}:${nestedItem.id}`\n                  }))\n                ]\n              };\n            }\n            return item;\n          });\n        }\n\n        return [...cur, ...addedItems.filter(newItem => !cur.find(({ id }) => id === newItem.id))];\n      });\n    },\n    [addToItemId, setSelectionMenuTarget]\n  );\n\n  const onItemConfigure = useCallback(\n    (id: StandardDragDropListItemProps['id'], e: MouseEvent<HTMLButtonElement>) => {\n      setConfigTarget(e.currentTarget);\n      setConfigItemId(id);\n    },\n    [setConfigTarget]\n  );\n\n  const onItemRemove = useCallback((id: StandardDragDropListItemProps['id']) => {\n    setMockRawItems(cur =>\n      cur.filter(rawItem => {\n        if (rawItem.id === id) return false;\n        // See if it's there before setting a new array instance.\n        if (rawItem.items && rawItem.items.find(ri => ri.id === id)) {\n          rawItem.items = rawItem.items.filter(ri => ri.id !== id);\n        }\n        return true;\n      })\n    );\n  }, []);\n\n  const onAddToGroup = useCallback(\n    (groupId: StandardDragDropListItemProps['id'], e: MouseEvent<Element>) => {\n      setAddToItemId(groupId);\n      setSelectionMenuTarget(e.currentTarget);\n      setSelectionConstraint({ types: ['Field'] });\n    },\n    [setSelectionMenuTarget]\n  );\n\n  const showSelectionMenu = useCallback(\n    (e: MouseEvent<HTMLButtonElement>) => {\n      setSelectionMenuTarget(e.currentTarget);\n    },\n    [setSelectionMenuTarget]\n  );\n\n  const onChange = useCallback<NonNullable<StandardDragDropListProps['onChange']>>(updatedItems => {\n    setMockRawItems(cur => {\n      const findRawItem = (id: string) => {\n        for (let i = 0; i < cur.length; i += 1) {\n          if (cur[i].id === id) return cur[i];\n\n          if (cur[i].items) {\n            const subItem = cur[i].items!.find(s => s.id === id);\n            if (subItem) return subItem;\n          }\n        }\n\n        return [...mockFields, ...mockViews, ...mockGroups].find(rawItem => rawItem.id === id)!;\n      };\n\n      return updatedItems.map(item => {\n        const rawItem = findRawItem(item.id);\n\n        if (item.items) {\n          const rawSubItems = item.items.map(subItem => {\n            return findRawItem(subItem.id);\n          });\n\n          return { ...rawItem, items: rawSubItems };\n        }\n\n        return rawItem;\n      });\n    });\n  }, []);\n\n  const createListItems = useCallback(\n    (mci: MockRawItem[], onATG: typeof onAddToGroup): StandardDragDropListProps['items'] => {\n      return mci.map(rawItem => {\n        const itemError = errors?.find(error => error.rawItemId === rawItem.id);\n\n        const primary =\n          rawItem.type === 'View'\n            ? {\n                text: rawItem.label,\n                href: '/some-url',\n                onClick: (e: MouseEvent) => {\n                  e.preventDefault();\n                  // Navigate or present a dialog/panel for clicked item...\n                }\n              }\n            : rawItem.label;\n\n        const baseItem: StandardDragDropListItemProps = {\n          // type property is being spread in via the mock content item.\n          ...rawItem,\n          primary,\n          draggable,\n          info,\n          secondary: rawItem.subType ?? rawItem.type,\n          status: itemError ? { type: 'error', message: itemError.message } : undefined,\n          onConfigure: onConfigure ? onItemConfigure : undefined,\n          onRemove: onRemove ? onItemRemove : undefined,\n          icon: icons ? rawItem.icon : undefined,\n          items: undefined\n        };\n\n        return rawItem.type === 'Group'\n          ? {\n              ...baseItem,\n              items: rawItem.items ? createListItems(rawItem.items, onATG) : [],\n              accept: 'Field',\n              onAddTo: onAddTo ? onATG : undefined\n            }\n          : baseItem;\n      });\n    },\n    [\n      errors,\n      onItemConfigure,\n      onItemRemove,\n      draggable,\n      info,\n      icons,\n      onConfigure,\n      onRemove,\n      onAddTo,\n      footer,\n      selectable\n    ]\n  );\n\n  // Here we transform MockRawItems -> StandardDragDropListProps['items']\n  const itemsToRender: StandardDragDropListProps['items'] = useMemo(() => {\n    return createListItems(mockRawItems, onAddToGroup);\n  }, [mockRawItems, onAddToGroup, createListItems]);\n\n  const handleSelectionChange = (item: StandardDragDropListItemProps) => {\n    const updateItemSelection = (rawItem: MockRawItem) => {\n      if (rawItem.id === item.id) return { ...rawItem, selected: item.selected };\n      if (rawItem.items?.find(ri => ri.id === item.id)) {\n        return {\n          ...rawItem,\n          items: rawItem.items.map(ri =>\n            ri.id === item.id ? { ...ri, selected: item.selected } : ri\n          )\n        };\n      }\n      return rawItem;\n    };\n    setMockRawItems(cur => cur.map(updateItemSelection));\n    onSelectionChange?.();\n  };\n\n  return (\n    <>\n      <DragDropManager>\n        {useMemo(\n          () => (\n            <StandardDragDropList\n              accept={['Field', 'View', 'Group']}\n              heading='Mock view'\n              info={info}\n              items={itemsToRender}\n              onChange={onChange}\n              onItemSelection={selectable ? handleSelectionChange : undefined}\n              footer={\n                footer ? (\n                  <Button onClick={showSelectionMenu} variant='link'>\n                    <Flex container={{ inline: true, alignItems: 'center', gap: 1 }}>\n                      <Icon name='plus' />\n                      <span>Add</span>\n                    </Flex>\n                  </Button>\n                ) : undefined\n              }\n            />\n          ),\n          [itemsToRender, showSelectionMenu, onChange]\n        )}\n      </DragDropManager>\n      {configTarget && configItemId && (\n        <ItemConfig\n          itemId={configItemId}\n          target={configTarget}\n          onCancel={() => {\n            setConfigTarget(null);\n            setConfigItemId(null);\n            setErrors(currentErrors => {\n              const currentItemError = currentErrors?.find(err => err.rawItemId === configItemId);\n\n              return currentItemError\n                ? currentErrors.filter(err => err.rawItemId !== configItemId)\n                : [\n                    ...currentErrors,\n                    { rawItemId: configItemId, message: 'Misconfiguration detected' }\n                  ];\n            });\n          }}\n          onSubmit={() => {\n            setConfigTarget(null);\n            setConfigItemId(null);\n          }}\n        />\n      )}\n      {selectionMenuTarget && (\n        <SelectionMenu\n          target={selectionMenuTarget}\n          constraint={selectionConstraint}\n          onCancel={() => {\n            setSelectionMenuTarget(null);\n            setAddToItemId(null);\n            setSelectionConstraint(undefined);\n          }}\n          onSubmit={onAddContent}\n        />\n      )}\n    </>\n  );\n};\n"]}