import { Badge, Button, Dialog, Notification, toast } from '@/components/ui' import { useNavigationIcons } from '@/proxy/menus/navigation-icon.config' import { useLocalization } from '@/utils/hooks/useLocalization' import CustomStore from 'devextreme/data/custom_store' import { useState } from 'react' import { FaChevronLeft, FaTrashAlt, FaPlusCircle, FaPencilAlt, FaEye, FaSave, FaCog, FaSistrix, } from 'react-icons/fa' import { useNavigate } from 'react-router-dom' import { GridColumnData } from '../list/GridColumnData' import { isWorkflowToolbarItemDisabled, useToolbar } from '../list/useToolbar' import { PermissionResults, RowMode } from './types' import { GridDto } from '@/proxy/form/models' import { ROUTES_ENUM } from '@/routes/route.constant' import { usePermission } from '@/utils/hooks/usePermission' import { usePWA } from '@/utils/hooks/usePWA' import { layoutTypes } from '../admin/listForm/edit/types' import { useStoreState } from '@/store' const FormButtons = (props: { isSubForm?: boolean mode: RowMode listFormCode: string id?: string gridDto: GridDto commandColumnData: GridColumnData dataSource: CustomStore permissions: PermissionResults handleSubmit: (e: any) => void refreshData: () => void getSelectedRowKeys: () => any[] | Promise getSelectedRowsData: () => any[] getFilter: () => void onActionEdit?: () => void onActionNew?: () => void onActionView?: () => void }) => { const { isSubForm, mode, listFormCode, id, gridDto, commandColumnData, dataSource, permissions, handleSubmit, refreshData, getSelectedRowKeys, getSelectedRowsData, getFilter, onActionEdit, onActionNew, onActionView, } = props const [deleteRowId, setDeleteRowId] = useState() const { checkPermission } = usePermission() const isPwaMode = usePWA() const navigate = useNavigate() const { translate } = useLocalization() const layout = layoutTypes.grid const { toolbarData, toolbarModalData, setToolbarModalData } = useToolbar({ gridDto, listFormCode, getSelectedRowKeys, getSelectedRowsData, refreshData, getFilter, layout, }) const currentUser = useStoreState((state) => state.auth.user) const selectedRowData = getSelectedRowsData()?.[0] const rowEvent = { row: { data: selectedRowData, key: id, rowType: 'data', isEditing: mode === 'edit', }, } const resolveVisible = (visible: unknown) => { if (typeof visible !== 'function') { return visible !== false } try { return Boolean(visible(rowEvent)) } catch (error) { console.error('Button visibility evaluation error:', error) return false } } const isToolbarButtonVisible = (item: any) => item.widget === 'dxButton' && !toolbarExcludedNames.includes(item.name) && resolveVisible(item.visible) && resolveVisible(item.options?.visible) const isCommandButtonVisible = (item: any) => typeof item !== 'string' && !commandExcludedNames.includes(item.name) && resolveVisible(item.visible) const isToolbarButtonDisabled = (item: any) => { const workflowDisabled = isWorkflowToolbarItemDisabled( item.name, gridDto.gridOptions.workflowDto, selectedRowData ? [selectedRowData] : [], currentUser, ) return workflowDisabled ?? Boolean(item.options?.disabled) } const openDynamicGridReport = () => { if (!id) return const reportUrl = `/admin/reports/DynamicGrid/view/${encodeURIComponent(id)}/${encodeURIComponent(listFormCode)}` window.open(reportUrl, isPwaMode ? '_self' : '_blank') } const handleDelete = async (e: any) => { //auth check e.preventDefault() if (!dataSource || !id) { return } try { await dataSource.remove(id) setDeleteRowId(undefined) if (props.onActionNew) { props.onActionNew() } else { navigate(-1) } toast.push( {translate('::App.Platform.RecordDeleted')} , { placement: 'bottom-end', }, ) } catch (error: any) { toast.push(, { placement: 'bottom-end', }) } } const navigationIcon = useNavigationIcons() const toolbarExcludedNames = ['deleteAllRecords', 'deleteSelectedRecords', 'refreshButton'] const hasVisibleToolbarButtons = toolbarData?.some(isToolbarButtonVisible) const commandExcludedNames = ['edit', 'delete', 'detail'] const hasVisibleCommandButtons = commandColumnData?.buttons?.some(isCommandButtonVisible) return ( <>
{toolbarData ?.filter(isToolbarButtonVisible) .map((item, i) => { const IconComp = navigationIcon[item.options?.icon] const hasValidIcon = IconComp && (typeof IconComp === 'function' || (typeof IconComp === 'object' && 'render' in IconComp)) return ( ) })} {hasVisibleToolbarButtons && } {commandColumnData?.buttons ?.filter(isCommandButtonVisible) .map((item: any, i) => { return ( ) })} {hasVisibleCommandButtons && } {!isSubForm && ( )} {mode != 'new' && ( )} {mode != 'new' && ( )} {mode == 'view' && ( )} {(mode == 'edit' || (onActionView && mode == 'new')) && ( )} {(mode == 'edit' || mode == 'new') && ( )} {id && !isSubForm && ( )} {checkPermission('App.Listforms.Listform.Update') && !isSubForm && ( )}
setToolbarModalData(undefined)} onRequestClose={() => setToolbarModalData(undefined)} > {toolbarModalData?.content} setDeleteRowId(undefined)} onRequestClose={() => setDeleteRowId(undefined)} >
{translate('::App.Platform.Delete')}

{translate('::App.Platform.DeleteConfirmation')}

) } export default FormButtons