sozsoft-platform/ui/src/components/shared/DbMigrateButton.tsx
2026-08-09 11:52:28 +03:00

69 lines
2.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
const label = translate('::ListForms.ListForm.DbMigrate') || 'DB Migrate'
return (
<>
<Button
size="sm"
variant="default"
icon={<FcAcceptDatabase />}
className={className}
onClick={() => setIsConfirmOpen(true)}
title={translate('::App.DbMigrate.StartMessage') || 'Run DB Migration'}
>
{hideLabelOnMobile ? <span className="hidden sm:inline">{label}</span> : label}
</Button>
<ConfirmDialog
isOpen={isConfirmOpen}
type="info"
title={label}
cancelText={translate('::Cancel')}
confirmText={translate('::App.Platform.Execute') || 'Çalıştır'}
onCancel={() => setIsConfirmOpen(false)}
onClose={() => setIsConfirmOpen(false)}
onConfirm={() => {
setIsConfirmOpen(false)
UiEvalService.ApiDbMigrate()
}}
>
<p className="text-gray-600 dark:text-gray-400">
{translate('::App.DbMigrate.ConfirmMessage') ||
'Are you sure you want to start the database migration process?'}
</p>
</ConfirmDialog>
</>
)
}
export default DbMigrateButton