{"version":3,"file":"ArrayFieldTemplate.mjs","sources":["../../src/templates/ArrayFieldTemplate.tsx"],"sourcesContent":["import {\n  getTemplate,\n  getUiOptions,\n  ArrayFieldTemplateProps,\n  ArrayFieldTemplateItemType,\n  FormContextType,\n  RJSFSchema,\n  StrictRJSFSchema,\n} from '@rjsf/utils';\n\nimport { Group, Box, Divider } from '@mantine/core';\nimport { DragDropContext, Droppable } from '@hello-pangea/dnd';\nimport { useState } from 'react';\nimport classes from './ArrayFieldTemplate.module.css';\nimport { IconCopy, IconTrash } from '@tabler/icons-react';\nimport ArrayFieldItemTemplate from './ArrayFieldItemTemplate'; // do not use getTemplate here\n\n/** The `ArrayFieldTemplate` component is the template used to render all items in an array.\n *\n * @param props - The `ArrayFieldTemplateItemType` props for the component\n */\nexport default function ArrayFieldTemplate<\n  T = any,\n  S extends StrictRJSFSchema = RJSFSchema,\n  F extends FormContextType = any,\n>(props: ArrayFieldTemplateProps<T, S, F>) {\n  const {\n    canAdd,\n    className,\n    disabled,\n    idSchema,\n    uiSchema,\n    items,\n    onAddClick,\n    readonly,\n    registry,\n    required,\n    schema,\n    title,\n  } = props;\n  const uiOptions = getUiOptions<T, S, F>(uiSchema);\n  const ArrayFieldDescriptionTemplate = getTemplate<'ArrayFieldDescriptionTemplate', T, S, F>(\n    'ArrayFieldDescriptionTemplate',\n    registry,\n    uiOptions,\n  );\n  const ArrayFieldTitleTemplate = getTemplate<'ArrayFieldTitleTemplate', T, S, F>(\n    'ArrayFieldTitleTemplate',\n    registry,\n    uiOptions,\n  );\n  // Button templates are not overridden in the uiSchema\n  const {\n    ButtonTemplates: { AddButton },\n  } = registry.templates;\n\n  const _title = uiOptions.title || title;\n  const legendNode = (\n    <Group gap='xs'>\n      {title && (\n        <ArrayFieldTitleTemplate\n          idSchema={idSchema}\n          title={_title}\n          required={required}\n          schema={schema}\n          uiSchema={uiSchema}\n          registry={registry}\n        />\n      )}\n\n      <ArrayFieldDescriptionTemplate\n        idSchema={idSchema}\n        description={uiOptions.description || schema.description}\n        schema={schema}\n        uiSchema={uiSchema}\n        registry={registry}\n      />\n    </Group>\n  );\n\n  const orderable = (uiOptions.orderable ?? false) && !readonly && !disabled;\n  const removable = (uiOptions.removable ?? true) && !readonly && !disabled;\n  const copyable = (uiOptions.copyable ?? false) && !readonly && !disabled;\n\n  const [isDragging, setIsDragging] = useState(false);\n\n  let arrItems;\n  if (items && items.length > 0) {\n    arrItems = (\n      <>\n        <Divider my='xs' label={`${_title || '配列'} の先頭`} labelPosition='center' />\n        <DragDropContext\n          onBeforeCapture={() => setIsDragging(true)}\n          onDragEnd={({ destination, source }) => {\n            setIsDragging(false);\n            if (destination?.droppableId === 'array') {\n              // ad hoc solution for calling onReorderClick\n              items[0].onReorderClick(source.index, destination?.index || 0)();\n            } else if (destination?.droppableId === 'copy') {\n              items[0].onCopyIndexClick(source.index)();\n            } else if (destination?.droppableId === 'remove') {\n              items[0].onDropIndexClick(source.index)();\n            }\n          }}\n        >\n          <Droppable droppableId='array' direction='vertical'>\n            {(provided) => (\n              <div {...provided.droppableProps} ref={provided.innerRef}>\n                {items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType<T, S, F>) => {\n                  return (\n                    <ArrayFieldItemTemplate key={key} {...itemProps} orderable={orderable} removable={!!removable} />\n                  );\n                })}\n                {provided.placeholder}\n              </div>\n            )}\n          </Droppable>\n          {items[0].hasToolbar && isDragging && (\n            <Group m='sm'>\n              {copyable && (\n                <DropToAction icon={<IconCopy />} label='コピー' className={classes.dropToCopy} droppableId='copy' />\n              )}\n              {removable && (\n                <DropToAction icon={<IconTrash />} label='削除' className={classes.dropToRemove} droppableId='remove' />\n              )}\n            </Group>\n          )}\n        </DragDropContext>\n        <Divider my='xs' label={`${_title || '配列'} の末尾`} labelPosition='center' />\n      </>\n    );\n  } else {\n    arrItems = <Divider my='xs' label={`${_title || '配列'} は空です`} labelPosition='center' />;\n  }\n\n  return (\n    <Box\n      id={idSchema.$id}\n      style={{\n        width: '100%',\n      }}\n      className={`armt-template-arrayfield ${className}`}\n    >\n      <Group gap='xs' justify='space-between'>\n        {legendNode}\n        {canAdd && (\n          <AddButton onClick={onAddClick} disabled={disabled || readonly} uiSchema={uiSchema} registry={registry} />\n        )}\n      </Group>\n      {arrItems}\n    </Box>\n  );\n}\n\nfunction DropToAction({\n  icon,\n  label,\n  className,\n  droppableId,\n}: {\n  icon: React.ReactNode;\n  label: string;\n  className: string;\n  droppableId: string;\n}) {\n  return (\n    <Droppable droppableId={droppableId} direction='horizontal'>\n      {(provided, snapshot) => (\n        <div\n          className={`${classes.dropToAction} ${className} ${snapshot.isDraggingOver && classes.dtaDraggingOver}`}\n          {...provided.droppableProps}\n          ref={provided.innerRef}\n        >\n          <div className={classes.dtaIcon}>{icon}</div>\n          <div className={classes.dtaLabel}>{label}</div>\n        </div>\n      )}\n    </Droppable>\n  );\n}\n"],"names":[],"mappings":"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"}