PHP 8.2.30
Preview: use-modal.ts Size: 2.28 KB
/proc/thread-self/root/home/byroehnu/.trash/node_modules11/adminjs/src/frontend/hooks/use-modal.ts

import type { ModalProps } from '@adminjs/design-system'
import { useCallback } from 'react'
import { useDispatch } from 'react-redux'

import { ModalData, ModalFunctions } from '../interfaces/index.js'
import { hideModal, showModal } from '../store/actions/index.js'
import useTranslation from './use-translation.js'

export const useModal = (): ModalFunctions => {
  const dispatch = useDispatch()
  const { translateButton, translateLabel, translateMessage } = useTranslation()

  const closeModal = useCallback(() => {
    dispatch(hideModal())
  }, [])

  const openModal = (props: ModalData) => {
    const { modalProps, type, confirmAction, resourceId } = props
    let buttons: ModalProps['buttons'] = modalProps.buttons || []

    const handleConfirm = () => {
      closeModal()
      if (confirmAction) confirmAction()
    }

    if (buttons.length) {
      buttons = buttons.map((button) => {
        button.variant = button.variant || 'default'
        if (button.label === 'cancel') {
          button.onClick = button.onClick || closeModal
        }
        button.label = translateButton(button.label || '', resourceId)
        return button
      })
    }

    if (type === 'confirm') {
      buttons.push({ label: translateButton('cancel', resourceId), onClick: closeModal })
      buttons.push({
        label: translateButton('confirm', resourceId),
        variant: modalProps.variant || 'primary',
        onClick: handleConfirm,
      })
    }

    if (type === 'alert') {
      buttons.push({ label: translateButton('ok', resourceId), variant: 'primary', onClick: closeModal })
    }

    const getDefaultTranslationKey = (placement: string) => `modal-${placement}`

    const data: ModalData = {
      modalProps: {
        ...modalProps,
        label: translateLabel(modalProps.label ?? getDefaultTranslationKey('label'), resourceId),
        title: translateMessage(modalProps.title ?? getDefaultTranslationKey('title'), resourceId),
        subTitle: translateMessage(modalProps.subTitle ?? getDefaultTranslationKey('subTitle'), resourceId),
        variant: modalProps.variant,
        buttons,
        onClose: modalProps.onClose || closeModal,
        onOverlayClick: modalProps.onOverlayClick || closeModal,
      },
    }
    dispatch(showModal(data))
  }

  return {
    openModal,
    closeModal,
  }
}

Directory Contents

Dirs: 6 × Files: 10

Name Size Perms Modified Actions
- drwxr-xr-x 2026-02-28 00:32:46
Edit Download
- drwxr-xr-x 2026-02-28 00:32:46
Edit Download
- drwxr-xr-x 2026-02-28 00:32:50
Edit Download
- drwxr-xr-x 2026-02-28 00:32:46
Edit Download
- drwxr-xr-x 2026-02-28 00:32:46
Edit Download
- drwxr-xr-x 2026-02-28 00:32:46
Edit Download
550 B lrw-r--r-- 2026-02-28 00:32:28
Edit Download
1.52 KB lrw-r--r-- 2026-02-28 00:32:46
Edit Download
946 B lrw-r--r-- 2026-02-28 00:32:50
Edit Download
1.13 KB lrw-r--r-- 2026-02-28 00:32:46
Edit Download
3.07 KB lrw-r--r-- 2026-02-28 00:31:56
Edit Download
2.28 KB lrw-r--r-- 2026-02-28 00:32:46
Edit Download
2.59 KB lrw-r--r-- 2026-02-28 00:32:46
Edit Download
890 B lrw-r--r-- 2026-02-28 00:32:46
Edit Download
2.39 KB lrw-r--r-- 2026-02-28 00:32:46
Edit Download
1.65 KB lrw-r--r-- 2026-02-28 00:32:46
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).