File size: 2,168 Bytes
979853c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import { useTranslation } from 'react-i18next'
import { useSettingsStore } from '@/stores/settings'
import {
  Dialog,
  DialogContent,
  DialogDescription,
  DialogFooter,
  DialogHeader,
  DialogTitle
} from '@/components/ui/Dialog'
import Button from '@/components/ui/Button'

interface MergeDialogProps {
  mergeDialogOpen: boolean
  mergeDialogInfo: {
    targetEntity: string
    sourceEntity: string
  } | null
  onOpenChange: (open: boolean) => void
  onRefresh: (useMergedStart: boolean) => void
}

/**
 * MergeDialog component that appears after a successful entity merge
 * Allows user to choose whether to use the merged entity or keep current start point
 */
const MergeDialog = ({
  mergeDialogOpen,
  mergeDialogInfo,
  onOpenChange,
  onRefresh
}: MergeDialogProps) => {
  const { t } = useTranslation()
  const currentQueryLabel = useSettingsStore.use.queryLabel()

  return (
    <Dialog open={mergeDialogOpen} onOpenChange={onOpenChange}>
      <DialogContent>
        <DialogHeader>
          <DialogTitle>{t('graphPanel.propertiesView.mergeDialog.title')}</DialogTitle>
          <DialogDescription>
            {t('graphPanel.propertiesView.mergeDialog.description', {
              source: mergeDialogInfo?.sourceEntity ?? '',
              target: mergeDialogInfo?.targetEntity ?? '',
            })}
          </DialogDescription>
        </DialogHeader>
        <p className="text-sm text-muted-foreground">
          {t('graphPanel.propertiesView.mergeDialog.refreshHint')}
        </p>
        <DialogFooter className="mt-4 flex-col gap-2 sm:flex-row sm:justify-end">
          {currentQueryLabel !== mergeDialogInfo?.sourceEntity && (
            <Button
              type="button"
              variant="outline"
              onClick={() => onRefresh(false)}
            >
              {t('graphPanel.propertiesView.mergeDialog.keepCurrentStart')}
            </Button>
          )}
          <Button type="button" onClick={() => onRefresh(true)}>
            {t('graphPanel.propertiesView.mergeDialog.useMergedStart')}
          </Button>
        </DialogFooter>
      </DialogContent>
    </Dialog>
  )
}

export default MergeDialog