2026-08-09 08:52:28 +00:00
|
|
|
|
import { useState } from 'react'
|
|
|
|
|
|
import { FcAcceptDatabase } from 'react-icons/fc'
|
|
|
|
|
|
import { Button } from '@/components/ui'
|
|
|
|
|
|
import ConfirmDialog from '@/components/shared/ConfirmDialog'
|
|
|
|
|
|
import { UiEvalService } from '@/services/UiEvalService'
|
|
|
|
|
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
|
|
|
|
|
import { usePermission } from '@/utils/hooks/usePermission'
|
|
|
|
|
|
import { DB_MIGRATE } from '@/constants/permission.constant'
|
|
|
|
|
|
|
|
|
|
|
|
interface DbMigrateButtonProps {
|
|
|
|
|
|
/** Küçük ekranlarda etiketi gizle (yalnızca ikon göster). */
|
|
|
|
|
|
hideLabelOnMobile?: boolean
|
|
|
|
|
|
className?: string
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* "DB Migrate" aksiyonu — onay diyaloğu ve yetki kontrolü dahil.
|
|
|
|
|
|
*
|
|
|
|
|
|
* SQL Query Manager ve Wizard dosya yöneticisi aynı işi yaptığı için tek bileşende
|
|
|
|
|
|
* toplanmıştır. Yetkisi olmayan kullanıcıya buton hiç render edilmez; asıl kontrol
|
|
|
|
|
|
* yine de sunucuda (`App.Setup.Migrate`) yapılır.
|
|
|
|
|
|
*/
|
|
|
|
|
|
const DbMigrateButton = ({ hideLabelOnMobile = false, className }: DbMigrateButtonProps) => {
|
|
|
|
|
|
const { translate } = useLocalization()
|
|
|
|
|
|
const { checkPermission } = usePermission()
|
|
|
|
|
|
const [isConfirmOpen, setIsConfirmOpen] = useState(false)
|
|
|
|
|
|
|
|
|
|
|
|
if (!checkPermission(DB_MIGRATE)) {
|
|
|
|
|
|
return null
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-08-14 11:32:31 +00:00
|
|
|
|
const label = translate('::ListForms.ListForm.DbMigrate')
|
2026-08-09 08:52:28 +00:00
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
|
<>
|
|
|
|
|
|
<Button
|
|
|
|
|
|
size="sm"
|
|
|
|
|
|
variant="default"
|
|
|
|
|
|
icon={<FcAcceptDatabase />}
|
|
|
|
|
|
className={className}
|
|
|
|
|
|
onClick={() => setIsConfirmOpen(true)}
|
2026-08-14 11:32:31 +00:00
|
|
|
|
title={translate('::App.DbMigrate.StartMessage')}
|
2026-08-09 08:52:28 +00:00
|
|
|
|
>
|
|
|
|
|
|
{hideLabelOnMobile ? <span className="hidden sm:inline">{label}</span> : label}
|
|
|
|
|
|
</Button>
|
|
|
|
|
|
|
|
|
|
|
|
<ConfirmDialog
|
|
|
|
|
|
isOpen={isConfirmOpen}
|
|
|
|
|
|
type="info"
|
|
|
|
|
|
title={label}
|
|
|
|
|
|
cancelText={translate('::Cancel')}
|
2026-08-14 11:32:31 +00:00
|
|
|
|
confirmText={translate('::App.Platform.Execute')}
|
2026-08-09 08:52:28 +00:00
|
|
|
|
onCancel={() => setIsConfirmOpen(false)}
|
|
|
|
|
|
onClose={() => setIsConfirmOpen(false)}
|
|
|
|
|
|
onConfirm={() => {
|
|
|
|
|
|
setIsConfirmOpen(false)
|
|
|
|
|
|
UiEvalService.ApiDbMigrate()
|
|
|
|
|
|
}}
|
|
|
|
|
|
>
|
|
|
|
|
|
<p className="text-gray-600 dark:text-gray-400">
|
2026-08-14 11:32:31 +00:00
|
|
|
|
{translate('::App.DbMigrate.ConfirmMessage')}
|
2026-08-09 08:52:28 +00:00
|
|
|
|
</p>
|
|
|
|
|
|
</ConfirmDialog>
|
|
|
|
|
|
</>
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export default DbMigrateButton
|