import React, { createContext, Dispatch, SetStateAction, useState, useCallback, ReactNode } from 'react' import axios from 'axios' import { PermissionResponse } from '../utils/types' import { useModal, useSnackbar } from '../utils/hooks' import { AlertSeverityType } from '../components/snackbar' import usePermissionResponseModal from '../containers/Settings/internal/hooks/usePermissionResponseModal' import { PermissionResponsePayload } from '../containers/Settings/internal/components/permissionResponseModal' interface PermissionsContextProps { isLoading: boolean setIsLoading: Dispatch> permissions: PermissionResponse[] setPermissions: Dispatch> selectedPermission: PermissionResponse | undefined setSelectedPermission: Dispatch< React.SetStateAction > filteredPermissions: PermissionResponse[] setFilteredPermissions: Dispatch> filterApplied: boolean setFilterApplied: Dispatch> fetchPermissions: () => void Dialog: () => JSX.Element setOpenModal: Dispatch> setModalTitle: Dispatch> setModalPayload: Dispatch> Snackbar: () => JSX.Element setOpenSnackbar: Dispatch> setSnackbarMessage: Dispatch> setSnackbarSeverity: Dispatch> PermissionResponseDialog: () => JSX.Element setOpenPermissionResponseModal: Dispatch> setPermissionResponsePayload: Dispatch< React.SetStateAction > } export const PermissionsContext = createContext( undefined! ) const PermissionsContextProvider = (props: { children: ReactNode }) => { const { children } = props const { Dialog, setOpenModal, setModalTitle, setModalPayload } = useModal() const { Snackbar, setOpenSnackbar, setSnackbarMessage, setSnackbarSeverity } = useSnackbar() const { PermissionResponseDialog, setOpenPermissionResponseModal, setPermissionResponsePayload } = usePermissionResponseModal() const [isLoading, setIsLoading] = useState(false) const [permissions, setPermissions] = useState([]) const [selectedPermission, setSelectedPermission] = useState() const [filteredPermissions, setFilteredPermissions] = useState< PermissionResponse[] >([]) const [filterApplied, setFilterApplied] = useState(false) const fetchPermissions = useCallback(() => { axios .get(`/SASjsApi/permission`) .then((res: any) => { if (res.data?.length > 0) { setPermissions(res.data) } }) .catch((err) => { setModalTitle('Abort') setModalPayload( typeof err.response.data === 'object' ? JSON.stringify(err.response.data) : err.response.data ) setOpenModal(true) }) // eslint-disable-next-line react-hooks/exhaustive-deps }, []) return ( {children} ) } export default PermissionsContextProvider