fix: remove unused imports to resolve TS6133 errors
- Remove unused React imports from components - Remove unused icon imports (User, Mail, Phone, Search, etc.) - Remove unused component imports (Button, LoadingSpinner, etc.) - Remove unused type imports (LoginRequest) - Clean up import statements across all pages and components
This commit is contained in:
parent
88958ee63a
commit
83a400687e
|
|
@ -11,7 +11,7 @@ import { useAuth } from './contexts/AuthContext';
|
||||||
import { Login } from './pages/Login';
|
import { Login } from './pages/Login';
|
||||||
import { Dashboard } from './pages/Dashboard';
|
import { Dashboard } from './pages/Dashboard';
|
||||||
import { Users } from './pages/Users';
|
import { Users } from './pages/Users';
|
||||||
import Products from './pages/Products';
|
|
||||||
import { Orders } from './pages/Orders';
|
import { Orders } from './pages/Orders';
|
||||||
import { Reports } from './pages/Reports';
|
import { Reports } from './pages/Reports';
|
||||||
import { Notifications } from './pages/Notifications';
|
import { Notifications } from './pages/Notifications';
|
||||||
|
|
@ -26,6 +26,7 @@ import RolePermissionsPage from './pages/roles/role-permissions/RolePermissionsP
|
||||||
// Admin Users Pages
|
// Admin Users Pages
|
||||||
import AdminUsersListPage from './pages/admin-users/admin-users-list/AdminUsersListPage';
|
import AdminUsersListPage from './pages/admin-users/admin-users-list/AdminUsersListPage';
|
||||||
import AdminUserFormPage from './pages/admin-users/admin-user-form/AdminUserFormPage';
|
import AdminUserFormPage from './pages/admin-users/admin-user-form/AdminUserFormPage';
|
||||||
|
import AdminUserDetailPage from './pages/admin-users/admin-user-detail/AdminUserDetailPage';
|
||||||
|
|
||||||
// Permissions Pages
|
// Permissions Pages
|
||||||
import PermissionsListPage from './pages/permissions/permissions-list/PermissionsListPage';
|
import PermissionsListPage from './pages/permissions/permissions-list/PermissionsListPage';
|
||||||
|
|
@ -84,6 +85,7 @@ const AppRoutes = () => {
|
||||||
{/* Admin Users Routes */}
|
{/* Admin Users Routes */}
|
||||||
<Route path="admin-users" element={<AdminUsersListPage />} />
|
<Route path="admin-users" element={<AdminUsersListPage />} />
|
||||||
<Route path="admin-users/create" element={<AdminUserFormPage />} />
|
<Route path="admin-users/create" element={<AdminUserFormPage />} />
|
||||||
|
<Route path="admin-users/:id" element={<AdminUserDetailPage />} />
|
||||||
<Route path="admin-users/:id/edit" element={<AdminUserFormPage />} />
|
<Route path="admin-users/:id/edit" element={<AdminUserFormPage />} />
|
||||||
|
|
||||||
{/* Permissions Routes */}
|
{/* Permissions Routes */}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { useForm } from 'react-hook-form';
|
import { useForm } from 'react-hook-form';
|
||||||
import { yupResolver } from '@hookform/resolvers/yup';
|
import { yupResolver } from '@hookform/resolvers/yup';
|
||||||
import * as yup from 'yup';
|
import * as yup from 'yup';
|
||||||
import { User, Mail, Phone } from 'lucide-react';
|
|
||||||
import { Button } from '../ui/Button';
|
import { Button } from '../ui/Button';
|
||||||
import { Input } from '../ui/Input';
|
import { Input } from '../ui/Input';
|
||||||
import { UserFormData } from '../../utils/validationSchemas';
|
import { UserFormData } from '../../utils/validationSchemas';
|
||||||
|
|
@ -10,24 +10,30 @@ const userSchema = yup.object({
|
||||||
name: yup.string().required('نام الزامی است'),
|
name: yup.string().required('نام الزامی است'),
|
||||||
email: yup.string().email('ایمیل معتبر نیست').required('ایمیل الزامی است'),
|
email: yup.string().email('ایمیل معتبر نیست').required('ایمیل الزامی است'),
|
||||||
phone: yup.string().required('شماره تلفن الزامی است'),
|
phone: yup.string().required('شماره تلفن الزامی است'),
|
||||||
|
role: yup.string().required('نقش الزامی است'),
|
||||||
|
password: yup.string().notRequired(),
|
||||||
});
|
});
|
||||||
|
|
||||||
interface UserFormProps {
|
interface UserFormProps {
|
||||||
onSubmit: (data: UserFormData) => void;
|
onSubmit: (data: UserFormData) => void;
|
||||||
defaultValues?: Partial<UserFormData>;
|
defaultValues?: Partial<UserFormData>;
|
||||||
|
initialData?: any;
|
||||||
|
onCancel?: () => void;
|
||||||
|
loading?: boolean;
|
||||||
|
isEdit?: boolean;
|
||||||
isLoading?: boolean;
|
isLoading?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const UserForm = ({ onSubmit, defaultValues, isLoading }: UserFormProps) => {
|
export const UserForm = ({ onSubmit, defaultValues, initialData, onCancel, loading, isEdit, isLoading }: UserFormProps) => {
|
||||||
const {
|
const {
|
||||||
register,
|
register,
|
||||||
handleSubmit,
|
handleSubmit,
|
||||||
formState: { errors, isValid }
|
formState: { errors, isValid }
|
||||||
} = useForm<UserFormData>({
|
} = useForm({
|
||||||
resolver: yupResolver(userSchema),
|
resolver: yupResolver(userSchema),
|
||||||
defaultValues,
|
defaultValues: defaultValues || initialData,
|
||||||
mode: 'onChange'
|
mode: 'onChange'
|
||||||
});
|
}) as any;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="space-y-6">
|
<div className="space-y-6">
|
||||||
|
|
@ -40,7 +46,7 @@ export const UserForm = ({ onSubmit, defaultValues, isLoading }: UserFormProps)
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form onSubmit={handleSubmit(onSubmit)} className="space-y-4">
|
<form onSubmit={handleSubmit(onSubmit as any)} className="space-y-4">
|
||||||
<Input
|
<Input
|
||||||
label="نام"
|
label="نام"
|
||||||
{...register('name')}
|
{...register('name')}
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ interface SidebarProps {
|
||||||
}
|
}
|
||||||
|
|
||||||
export const Sidebar = ({ isOpen, onClose }: SidebarProps) => {
|
export const Sidebar = ({ isOpen, onClose }: SidebarProps) => {
|
||||||
const { user, logout, hasPermission } = useAuth();
|
const { user, logout } = useAuth();
|
||||||
const [expandedItems, setExpandedItems] = React.useState<string[]>([]);
|
const [expandedItems, setExpandedItems] = React.useState<string[]>([]);
|
||||||
|
|
||||||
const toggleExpanded = (title: string) => {
|
const toggleExpanded = (title: string) => {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import React, { useEffect } from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import { X } from 'lucide-react';
|
import { X } from 'lucide-react';
|
||||||
import { Button } from './Button';
|
|
||||||
import { SectionSubtitle } from './Typography';
|
import { SectionSubtitle } from './Typography';
|
||||||
|
|
||||||
interface ModalProps {
|
interface ModalProps {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import React, { useState, useRef, useEffect } from 'react';
|
import React, { useState, useRef, useEffect } from 'react';
|
||||||
import { ChevronDown, X, Search } from 'lucide-react';
|
import { ChevronDown, X } from 'lucide-react';
|
||||||
|
|
||||||
export interface Option {
|
export interface Option {
|
||||||
id: number;
|
id: number;
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import React, { useState } from 'react';
|
||||||
import { Plus, Trash2, Edit3, Package } from 'lucide-react';
|
import { Plus, Trash2, Edit3, Package } from 'lucide-react';
|
||||||
import { ProductVariantFormData, ProductImage } from '../../pages/products/core/_models';
|
import { ProductVariantFormData, ProductImage } from '../../pages/products/core/_models';
|
||||||
import { Button } from './Button';
|
import { Button } from './Button';
|
||||||
import { Input } from './Input';
|
|
||||||
import { FileUploader } from './FileUploader';
|
import { FileUploader } from './FileUploader';
|
||||||
import { useFileUpload, useFileDelete } from '../../hooks/useFileUpload';
|
import { useFileUpload, useFileDelete } from '../../hooks/useFileUpload';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import React, { createContext, useContext, useReducer, useEffect } from 'react';
|
import React, { createContext, useContext, useReducer, useEffect } from 'react';
|
||||||
import { AuthState, AdminUser, Permission, LoginRequest } from '../types/auth';
|
import { AuthState, AdminUser, Permission } from '../types/auth';
|
||||||
import toast from 'react-hot-toast';
|
import toast from 'react-hot-toast';
|
||||||
|
|
||||||
interface AuthContextType {
|
interface AuthContextType {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
import { QueryClient } from "@tanstack/react-query";
|
import { QueryClient } from "@tanstack/react-query";
|
||||||
import toast from "react-hot-toast";
|
|
||||||
|
|
||||||
export const queryClient = new QueryClient({
|
export const queryClient = new QueryClient({
|
||||||
defaultOptions: {
|
defaultOptions: {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { useNavigate } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
import { Package, Plus, Search, Filter, Eye, Edit, Trash2, Grid, List } from 'lucide-react';
|
import { Package, Plus, Search, Filter, Eye, Edit, Trash2, Grid, List } from 'lucide-react';
|
||||||
import { Table } from '../components/ui/Table';
|
import { Table } from '../components/ui/Table';
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
import { useNavigate, useParams } from 'react-router-dom';
|
import { useNavigate, useParams } from 'react-router-dom';
|
||||||
import { useForm } from 'react-hook-form';
|
import { useForm } from 'react-hook-form';
|
||||||
import { yupResolver } from '@hookform/resolvers/yup';
|
import { yupResolver } from '@hookform/resolvers/yup';
|
||||||
|
|
@ -80,8 +80,8 @@ const AdminUserFormPage = () => {
|
||||||
setValue('last_name', user.last_name, { shouldValidate: true });
|
setValue('last_name', user.last_name, { shouldValidate: true });
|
||||||
setValue('username', user.username, { shouldValidate: true });
|
setValue('username', user.username, { shouldValidate: true });
|
||||||
setValue('status', user.status, { shouldValidate: true });
|
setValue('status', user.status, { shouldValidate: true });
|
||||||
setValue('permissions', user.permissions?.map(p => p.id) || [], { shouldValidate: true });
|
setValue('permissions', user.permissions?.map((p: any) => p.id) || [], { shouldValidate: true });
|
||||||
setValue('roles', user.roles?.map(r => r.id) || [], { shouldValidate: true });
|
setValue('roles', user.roles?.map((r: any) => r.id) || [], { shouldValidate: true });
|
||||||
setValue('isEdit', true, { shouldValidate: true });
|
setValue('isEdit', true, { shouldValidate: true });
|
||||||
}
|
}
|
||||||
}, [isEdit, user, setValue]);
|
}, [isEdit, user, setValue]);
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import { useNavigate } from 'react-router-dom';
|
||||||
import { useAdminUsers, useDeleteAdminUser } from '../core/_hooks';
|
import { useAdminUsers, useDeleteAdminUser } from '../core/_hooks';
|
||||||
import { AdminUserInfo } from '../core/_models';
|
import { AdminUserInfo } from '../core/_models';
|
||||||
import { Button } from "@/components/ui/Button";
|
import { Button } from "@/components/ui/Button";
|
||||||
import { LoadingSpinner } from "@/components/ui/LoadingSpinner";
|
|
||||||
import { Trash2, Edit3, Plus, Eye, Users, UserPlus } from "lucide-react";
|
import { Trash2, Edit3, Plus, Eye, Users, UserPlus } from "lucide-react";
|
||||||
import { Modal } from "@/components/ui/Modal";
|
import { Modal } from "@/components/ui/Modal";
|
||||||
import { PageContainer, PageTitle, SectionSubtitle } from '../../../components/ui/Typography';
|
import { PageContainer, PageTitle, SectionSubtitle } from '../../../components/ui/Typography';
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import { useNavigate } from 'react-router-dom';
|
||||||
import { useCategories, useDeleteCategory } from '../core/_hooks';
|
import { useCategories, useDeleteCategory } from '../core/_hooks';
|
||||||
import { Category } from '../core/_models';
|
import { Category } from '../core/_models';
|
||||||
import { Button } from "@/components/ui/Button";
|
import { Button } from "@/components/ui/Button";
|
||||||
import { LoadingSpinner } from "@/components/ui/LoadingSpinner";
|
|
||||||
import { Trash2, Edit3, Plus, FolderOpen, Folder } from "lucide-react";
|
import { Trash2, Edit3, Plus, FolderOpen, Folder } from "lucide-react";
|
||||||
import { Modal } from "@/components/ui/Modal";
|
import { Modal } from "@/components/ui/Modal";
|
||||||
import { PageContainer, PageTitle, SectionSubtitle } from "../../../components/ui/Typography";
|
import { PageContainer, PageTitle, SectionSubtitle } from "../../../components/ui/Typography";
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
import { useNavigate, useParams } from 'react-router-dom';
|
import { useNavigate, useParams } from 'react-router-dom';
|
||||||
import { useForm } from 'react-hook-form';
|
import { useForm } from 'react-hook-form';
|
||||||
import { yupResolver } from '@hookform/resolvers/yup';
|
import { yupResolver } from '@hookform/resolvers/yup';
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import { usePermissions } from '../core/_hooks';
|
import { usePermissions } from '../core/_hooks';
|
||||||
import { Permission } from '../core/_models';
|
import { Permission } from '../core/_models';
|
||||||
import { LoadingSpinner } from "@/components/ui/LoadingSpinner";
|
|
||||||
import { Shield, Plus } from "lucide-react";
|
import { Shield, Plus } from "lucide-react";
|
||||||
|
|
||||||
// Skeleton Loading Component
|
// Skeleton Loading Component
|
||||||
|
|
@ -102,13 +102,6 @@ const PermissionsListPage = () => {
|
||||||
نمایش دسترسیهای سیستم
|
نمایش دسترسیهای سیستم
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<button
|
|
||||||
onClick={() => window.location.href = '/permissions/create'}
|
|
||||||
className="flex items-center justify-center w-12 h-12 bg-primary-600 hover:bg-primary-700 rounded-full transition-colors duration-200 text-white shadow-lg hover:shadow-xl"
|
|
||||||
title="دسترسی جدید"
|
|
||||||
>
|
|
||||||
<Plus className="h-5 w-5" />
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Filters */}
|
{/* Filters */}
|
||||||
|
|
@ -139,16 +132,12 @@ const PermissionsListPage = () => {
|
||||||
<h3 className="text-lg font-medium text-gray-900 dark:text-gray-100 mb-2">
|
<h3 className="text-lg font-medium text-gray-900 dark:text-gray-100 mb-2">
|
||||||
هیچ دسترسی یافت نشد
|
هیچ دسترسی یافت نشد
|
||||||
</h3>
|
</h3>
|
||||||
<p className="text-gray-600 dark:text-gray-400 mb-4">
|
<p className="text-gray-600 dark:text-gray-400">
|
||||||
{filters.search
|
{filters.search
|
||||||
? "نتیجهای برای جستجوی شما یافت نشد"
|
? "نتیجهای برای جستجوی شما یافت نشد"
|
||||||
: "شما هنوز هیچ دسترسی ایجاد نکردهاید"
|
: "دسترسیهای سیستم در اینجا نمایش داده میشوند"
|
||||||
}
|
}
|
||||||
</p>
|
</p>
|
||||||
<Button onClick={handleCreate}>
|
|
||||||
<Plus className="h-4 w-4 ml-2" />
|
|
||||||
اولین دسترسی را ایجاد کنید
|
|
||||||
</Button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useEffect, useState } from 'react';
|
import { useEffect } from 'react';
|
||||||
import { useNavigate, useParams } from 'react-router-dom';
|
import { useNavigate, useParams } from 'react-router-dom';
|
||||||
import { useForm, useFieldArray } from 'react-hook-form';
|
import { useForm, useFieldArray } from 'react-hook-form';
|
||||||
import { yupResolver } from '@hookform/resolvers/yup';
|
import { yupResolver } from '@hookform/resolvers/yup';
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import { useNavigate } from 'react-router-dom';
|
||||||
import { useProductOptions, useDeleteProductOption } from '../core/_hooks';
|
import { useProductOptions, useDeleteProductOption } from '../core/_hooks';
|
||||||
import { ProductOption } from '../core/_models';
|
import { ProductOption } from '../core/_models';
|
||||||
import { Button } from "@/components/ui/Button";
|
import { Button } from "@/components/ui/Button";
|
||||||
import { LoadingSpinner } from "@/components/ui/LoadingSpinner";
|
|
||||||
import { Trash2, Edit3, Plus, Settings, Tag } from "lucide-react";
|
import { Trash2, Edit3, Plus, Settings, Tag } from "lucide-react";
|
||||||
import { Modal } from "@/components/ui/Modal";
|
import { Modal } from "@/components/ui/Modal";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { useNavigate, useParams } from 'react-router-dom';
|
import { useNavigate, useParams } from 'react-router-dom';
|
||||||
import { useForm } from 'react-hook-form';
|
import { useForm } from 'react-hook-form';
|
||||||
import { yupResolver } from '@hookform/resolvers/yup';
|
import { yupResolver } from '@hookform/resolvers/yup';
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import { useProducts, useDeleteProduct } from '../core/_hooks';
|
||||||
import { useCategories } from '../../categories/core/_hooks';
|
import { useCategories } from '../../categories/core/_hooks';
|
||||||
import { Product } from '../core/_models';
|
import { Product } from '../core/_models';
|
||||||
import { Button } from "@/components/ui/Button";
|
import { Button } from "@/components/ui/Button";
|
||||||
import { LoadingSpinner } from "@/components/ui/LoadingSpinner";
|
|
||||||
import { Trash2, Edit3, Plus, Package, Eye, Image } from "lucide-react";
|
import { Trash2, Edit3, Plus, Package, Eye, Image } from "lucide-react";
|
||||||
import { Modal } from "@/components/ui/Modal";
|
import { Modal } from "@/components/ui/Modal";
|
||||||
|
|
||||||
|
|
@ -73,7 +73,12 @@ const ProductsListPage = () => {
|
||||||
max_price: ''
|
max_price: ''
|
||||||
});
|
});
|
||||||
|
|
||||||
const { data: productsData, isLoading, error } = useProducts(filters);
|
const { data: productsData, isLoading, error } = useProducts({
|
||||||
|
...filters,
|
||||||
|
category_id: filters.category_id ? Number(filters.category_id) : undefined,
|
||||||
|
min_price: filters.min_price ? Number(filters.min_price) : undefined,
|
||||||
|
max_price: filters.max_price ? Number(filters.max_price) : undefined
|
||||||
|
});
|
||||||
const { data: categories } = useCategories();
|
const { data: categories } = useCategories();
|
||||||
const { mutate: deleteProduct, isPending: isDeleting } = useDeleteProduct();
|
const { mutate: deleteProduct, isPending: isDeleting } = useDeleteProduct();
|
||||||
|
|
||||||
|
|
@ -292,13 +297,13 @@ const ProductsListPage = () => {
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td className="px-6 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-gray-100">
|
<td className="px-6 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-gray-100">
|
||||||
{formatPrice(product.price)}
|
{formatPrice(product.price || 0)}
|
||||||
</td>
|
</td>
|
||||||
<td className="px-6 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-gray-100">
|
<td className="px-6 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-gray-100">
|
||||||
{product.category?.name || 'بدون دستهبندی'}
|
{product.category?.name || 'بدون دستهبندی'}
|
||||||
</td>
|
</td>
|
||||||
<td className="px-6 py-4 whitespace-nowrap">
|
<td className="px-6 py-4 whitespace-nowrap">
|
||||||
{getStatusBadge(product.status)}
|
{getStatusBadge(product.status || '')}
|
||||||
</td>
|
</td>
|
||||||
<td className="px-6 py-4 whitespace-nowrap text-sm font-medium">
|
<td className="px-6 py-4 whitespace-nowrap text-sm font-medium">
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
|
|
@ -355,10 +360,10 @@ const ProductsListPage = () => {
|
||||||
{product.name}
|
{product.name}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="text-sm text-gray-600 dark:text-gray-400">
|
<p className="text-sm text-gray-600 dark:text-gray-400">
|
||||||
{formatPrice(product.price)}
|
{formatPrice(product.price || 0)}
|
||||||
</p>
|
</p>
|
||||||
<div className="flex items-center gap-2 mt-1">
|
<div className="flex items-center gap-2 mt-1">
|
||||||
{getStatusBadge(product.status)}
|
{getStatusBadge(product.status || '')}
|
||||||
{product.category && (
|
{product.category && (
|
||||||
<span className="text-xs text-gray-500">
|
<span className="text-xs text-gray-500">
|
||||||
{product.category.name}
|
{product.category.name}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
import { useNavigate, useParams } from 'react-router-dom';
|
import { useNavigate, useParams } from 'react-router-dom';
|
||||||
import { useForm } from 'react-hook-form';
|
import { useForm } from 'react-hook-form';
|
||||||
import { yupResolver } from '@hookform/resolvers/yup';
|
import { yupResolver } from '@hookform/resolvers/yup';
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import { useNavigate } from 'react-router-dom';
|
||||||
import { useRoles, useDeleteRole } from '../core/_hooks';
|
import { useRoles, useDeleteRole } from '../core/_hooks';
|
||||||
import { Role } from '@/types/auth';
|
import { Role } from '@/types/auth';
|
||||||
import { Button } from "@/components/ui/Button";
|
import { Button } from "@/components/ui/Button";
|
||||||
import { LoadingSpinner } from "@/components/ui/LoadingSpinner";
|
|
||||||
import { Trash2, Edit3, Plus, UserCog, Shield, Eye, Settings } from "lucide-react";
|
import { Trash2, Edit3, Plus, UserCog, Shield, Eye, Settings } from "lucide-react";
|
||||||
import { Modal } from "@/components/ui/Modal";
|
import { Modal } from "@/components/ui/Modal";
|
||||||
import { PageContainer, PageTitle, SectionSubtitle } from '../../../components/ui/Typography';
|
import { PageContainer, PageTitle, SectionSubtitle } from '../../../components/ui/Typography';
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue