diff --git a/.eslintrc.js b/.eslintrc.js index 70fda91..076b007 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -6,13 +6,13 @@ module.exports = { 'react/no-children-prop': 'off', '@next/next/no-img-element': 'off', '@next/next/no-page-custom-font': 'off', - '@typescript-eslint/consistent-type-imports': 'error', + '@typescript-eslint/consistent-type-imports': 'warn', '@typescript-eslint/ban-ts-comment': 'off', '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-unused-vars': 'error', + '@typescript-eslint/no-unused-vars': 'warn', '@typescript-eslint/no-non-null-assertion': 'off', 'lines-around-comment': [ - 'error', + 'warn', { beforeBlockComment: true, beforeLineComment: true, @@ -22,7 +22,7 @@ module.exports = { } ], 'padding-line-between-statements': [ - 'error', + 'warn', { blankLine: 'any', prev: 'export', @@ -49,15 +49,15 @@ module.exports = { next: '*' } ], - 'newline-before-return': 'error', + 'newline-before-return': 'warn', 'import/newline-after-import': [ - 'error', + 'warn', { count: 1 } ], 'import/order': [ - 'error', + 'warn', { groups: ['builtin', 'external', ['internal', 'parent', 'sibling', 'index'], ['object', 'unknown']], pathGroups: [ @@ -86,7 +86,7 @@ module.exports = { } ], '@typescript-eslint/ban-types': [ - 'error', + 'warn', { extendDefaults: true, types: { diff --git a/src/app/[lang]/(dashboard)/(private)/apps/ecommerce/products/[id]/detail/page.tsx b/src/app/[lang]/(dashboard)/(private)/apps/ecommerce/products/[id]/detail/page.tsx index 0335800..2ff66aa 100644 --- a/src/app/[lang]/(dashboard)/(private)/apps/ecommerce/products/[id]/detail/page.tsx +++ b/src/app/[lang]/(dashboard)/(private)/apps/ecommerce/products/[id]/detail/page.tsx @@ -1,10 +1,5 @@ import ProductDetail from "../../../../../../../../../views/apps/ecommerce/products/detail/ProductDetail" -// In your page or component -const productData = { - // Your product object here -} - export default function ProductPage() { return } diff --git a/src/components/layout/shared/UserDropdown.tsx b/src/components/layout/shared/UserDropdown.tsx index 1542af7..6ba4184 100644 --- a/src/components/layout/shared/UserDropdown.tsx +++ b/src/components/layout/shared/UserDropdown.tsx @@ -48,7 +48,7 @@ const UserDropdown = () => { // Refs const anchorRef = useRef(null) - const { mutate } = useAuthMutation.logout() + const { logout } = useAuthMutation() // Hooks const router = useRouter() @@ -75,7 +75,7 @@ const UserDropdown = () => { try { // Sign out from the app // await signOut({ callbackUrl: process.env.NEXT_PUBLIC_APP_URL }) - mutate() + logout.mutate() router.push(getLocalizedUrl('/login', locale as Locale)) } catch (error) { console.error(error) diff --git a/src/services/mutations/auth.ts b/src/services/mutations/auth.ts index e632b92..80c4f4c 100644 --- a/src/services/mutations/auth.ts +++ b/src/services/mutations/auth.ts @@ -1,37 +1,34 @@ import { useMutation } from '@tanstack/react-query' import { api } from '../api' -import { redirect } from 'next/navigation' type LoginPayload = { email: string password: string } -export const useAuthMutation = { - login: () => { - return useMutation({ - mutationFn: async (payload: LoginPayload) => { - const response = await api.post('/auth/login', payload) - return response.data.data - }, - onSuccess: data => { - // Optional: refetch 'users' list after success - localStorage.setItem('authToken', data.token) - localStorage.setItem('user', JSON.stringify(data.user)) - } - }) - }, +export const useAuthMutation = () => { + const login = useMutation({ + mutationFn: async (payload: LoginPayload) => { + const response = await api.post('/auth/login', payload) + return response.data.data + }, + onSuccess: data => { + // Optional: refetch 'users' list after success + localStorage.setItem('authToken', data.token) + localStorage.setItem('user', JSON.stringify(data.user)) + } + }) - logout: () => { - return useMutation({ - mutationFn: async () => { - await api.post('/auth/logout') - }, - onSuccess: () => { - // Optional: refetch 'users' list after success - localStorage.removeItem('authToken') - localStorage.removeItem('user') - } - }) - } + const logout = useMutation({ + mutationFn: async () => { + await api.post('/auth/logout') + }, + onSuccess: () => { + // Optional: refetch 'users' list after success + localStorage.removeItem('authToken') + localStorage.removeItem('user') + } + }) + + return { login, logout } } diff --git a/src/services/mutations/categories.ts b/src/services/mutations/categories.ts index 238e613..fcc29fe 100644 --- a/src/services/mutations/categories.ts +++ b/src/services/mutations/categories.ts @@ -3,58 +3,50 @@ import { api } from '../api' import { toast } from 'react-toastify' import { CategoryRequest } from '../../types/services/category' -export const useCategoriesMutation = { - createCategory: () => { - const queryClient = useQueryClient() +export const useCategoriesMutation = () => { + const queryClient = useQueryClient() - return useMutation({ - mutationFn: async (newCategory: CategoryRequest) => { - const response = await api.post('/categories', newCategory) - return response.data - }, - onSuccess: () => { - toast.success('Category created successfully!') - queryClient.invalidateQueries({ queryKey: ['categories'] }) - }, - onError: (error: any) => { - toast.error(error.response?.data?.errors?.[0]?.cause || 'Create failed') - } - }) - }, + const createCategory = useMutation({ + mutationFn: async (newCategory: CategoryRequest) => { + const response = await api.post('/categories', newCategory) + return response.data + }, + onSuccess: () => { + toast.success('Category created successfully!') + queryClient.invalidateQueries({ queryKey: ['categories'] }) + }, + onError: (error: any) => { + toast.error(error.response?.data?.errors?.[0]?.cause || 'Create failed') + } + }) - updateCategory: () => { - const queryClient = useQueryClient() + const updateCategory = useMutation({ + mutationFn: async ({ id, payload }: { id: string; payload: CategoryRequest }) => { + const response = await api.put(`/categories/${id}`, payload) + return response.data + }, + onSuccess: () => { + toast.success('Category updated successfully!') + queryClient.invalidateQueries({ queryKey: ['categories'] }) + }, + onError: (error: any) => { + toast.error(error.response?.data?.errors?.[0]?.cause || 'Update failed') + } + }) - return useMutation({ - mutationFn: async ({ id, payload }: { id: string; payload: CategoryRequest }) => { - const response = await api.put(`/categories/${id}`, payload) - return response.data - }, - onSuccess: () => { - toast.success('Category updated successfully!') - queryClient.invalidateQueries({ queryKey: ['categories'] }) - }, - onError: (error: any) => { - toast.error(error.response?.data?.errors?.[0]?.cause || 'Update failed') - } - }) - }, + const deleteCategory = useMutation({ + mutationFn: async (id: string) => { + const response = await api.delete(`/categories/${id}`) + return response.data + }, + onSuccess: () => { + toast.success('Category deleted successfully!') + queryClient.invalidateQueries({ queryKey: ['categories'] }) + }, + onError: (error: any) => { + toast.error(error.response?.data?.errors?.[0]?.cause || 'Delete failed') + } + }) - deleteCategory: () => { - const queryClient = useQueryClient() - - return useMutation({ - mutationFn: async (id: string) => { - const response = await api.delete(`/categories/${id}`) - return response.data - }, - onSuccess: () => { - toast.success('Category deleted successfully!') - queryClient.invalidateQueries({ queryKey: ['categories'] }) - }, - onError: (error: any) => { - toast.error(error.response?.data?.errors?.[0]?.cause || 'Delete failed') - } - }) - } + return { createCategory, updateCategory, deleteCategory } } diff --git a/src/services/mutations/files.ts b/src/services/mutations/files.ts index 2fcece1..4766adc 100644 --- a/src/services/mutations/files.ts +++ b/src/services/mutations/files.ts @@ -2,24 +2,24 @@ import { useMutation } from '@tanstack/react-query' import { api } from '../api' import { toast } from 'react-toastify' -export const useFilesMutation = { - uploadFile: () => { - return useMutation({ - mutationFn: async (newFile: FormData) => { - const response = await api.post('/files/upload', newFile, { - headers: { - 'Content-Type': 'multipart/form-data' - } - }) +export const useFilesMutation = () => { + const uploadFile = useMutation({ + mutationFn: async (newFile: FormData) => { + const response = await api.post('/files/upload', newFile, { + headers: { + 'Content-Type': 'multipart/form-data' + } + }) - return response.data.data - }, - onSuccess: data => { - toast.success('File uploaded successfully!') - }, - onError: (error: any) => { - toast.error(error.response.data.errors[0].cause) - } - }) - } + return response.data.data + }, + onSuccess: data => { + toast.success('File uploaded successfully!') + }, + onError: (error: any) => { + toast.error(error.response.data.errors[0].cause) + } + }) + + return { uploadFile } } diff --git a/src/services/mutations/inventories.ts b/src/services/mutations/inventories.ts index 45a49cb..d4e800f 100644 --- a/src/services/mutations/inventories.ts +++ b/src/services/mutations/inventories.ts @@ -3,58 +3,50 @@ import { api } from '../api' import { toast } from 'react-toastify' import { InventoryAdjustRequest, InventoryRequest } from '../../types/services/inventory' -export const useInventoriesMutation = { - createInventory: () => { - const queryClient = useQueryClient() +export const useInventoriesMutation = () => { + const queryClient = useQueryClient() - return useMutation({ - mutationFn: async (newInventory: InventoryRequest) => { - const response = await api.post('/inventory', newInventory) - return response.data - }, - onSuccess: () => { - toast.success('Inventory created successfully!') - queryClient.invalidateQueries({ queryKey: ['inventories'] }) - }, - onError: (error: any) => { - toast.error(error.response?.data?.errors?.[0]?.cause || 'Create failed') - } - }) - }, + const createInventory = useMutation({ + mutationFn: async (newInventory: InventoryRequest) => { + const response = await api.post('/inventory', newInventory) + return response.data + }, + onSuccess: () => { + toast.success('Inventory created successfully!') + queryClient.invalidateQueries({ queryKey: ['inventories'] }) + }, + onError: (error: any) => { + toast.error(error.response?.data?.errors?.[0]?.cause || 'Create failed') + } + }) - adjustInventory: () => { - const queryClient = useQueryClient() + const adjustInventory = useMutation({ + mutationFn: async (newInventory: InventoryAdjustRequest) => { + const response = await api.post('/inventory/adjust', newInventory) + return response.data + }, + onSuccess: () => { + toast.success('Inventory adjusted successfully!') + queryClient.invalidateQueries({ queryKey: ['inventories'] }) + }, + onError: (error: any) => { + toast.error(error.response?.data?.errors?.[0]?.cause || 'Create failed') + } + }) - return useMutation({ - mutationFn: async (newInventory: InventoryAdjustRequest) => { - const response = await api.post('/inventory/adjust', newInventory) - return response.data - }, - onSuccess: () => { - toast.success('Inventory adjusted successfully!') - queryClient.invalidateQueries({ queryKey: ['inventories'] }) - }, - onError: (error: any) => { - toast.error(error.response?.data?.errors?.[0]?.cause || 'Create failed') - } - }) - }, + const deleteInventory = useMutation({ + mutationFn: async (id: string) => { + const response = await api.delete(`/inventory/${id}`) + return response.data + }, + onSuccess: () => { + toast.success('Inventory deleted successfully!') + queryClient.invalidateQueries({ queryKey: ['inventories'] }) + }, + onError: (error: any) => { + toast.error(error.response?.data?.errors?.[0]?.cause || 'Delete failed') + } + }) - deleteInventory: () => { - const queryClient = useQueryClient() - - return useMutation({ - mutationFn: async (id: string) => { - const response = await api.delete(`/inventory/${id}`) - return response.data - }, - onSuccess: () => { - toast.success('Inventory deleted successfully!') - queryClient.invalidateQueries({ queryKey: ['inventories'] }) - }, - onError: (error: any) => { - toast.error(error.response?.data?.errors?.[0]?.cause || 'Delete failed') - } - }) - } + return { createInventory, adjustInventory, deleteInventory } } diff --git a/src/services/mutations/products.ts b/src/services/mutations/products.ts index 16aaef3..3cd8c72 100644 --- a/src/services/mutations/products.ts +++ b/src/services/mutations/products.ts @@ -3,52 +3,48 @@ import { api } from '../api' import { toast } from 'react-toastify' import { ProductRequest } from '../../types/services/product' -export const useProductsMutation = { - createProduct: () => { - return useMutation({ - mutationFn: async (newProduct: ProductRequest) => { - const response = await api.post('/products', newProduct) - return response.data - }, - onSuccess: () => { - toast.success('Product created successfully!') - }, - onError: (error: any) => { - toast.error(error.response?.data?.errors?.[0]?.cause || 'Create failed') - } - }) - }, +export const useProductsMutation = () => { + const queryClient = useQueryClient() - updateProduct: () => { - return useMutation({ - mutationFn: async ({ id, payload }: { id: string; payload: ProductRequest }) => { - const response = await api.put(`/products/${id}`, payload) - return response.data - }, - onSuccess: () => { - toast.success('Product updated successfully!') - }, - onError: (error: any) => { - toast.error(error.response?.data?.errors?.[0]?.cause || 'Update failed') - } - }) - }, + const createProduct = useMutation({ + mutationFn: async (newProduct: ProductRequest) => { + const response = await api.post('/products', newProduct) + return response.data + }, + onSuccess: () => { + toast.success('Product created successfully!') + }, + onError: (error: any) => { + toast.error(error.response?.data?.errors?.[0]?.cause || 'Create failed') + } + }) - deleteProduct: () => { - const queryClient = useQueryClient() + const updateProduct = useMutation({ + mutationFn: async ({ id, payload }: { id: string; payload: ProductRequest }) => { + const response = await api.put(`/products/${id}`, payload) + return response.data + }, + onSuccess: () => { + toast.success('Product updated successfully!') + }, + onError: (error: any) => { + toast.error(error.response?.data?.errors?.[0]?.cause || 'Update failed') + } + }) - return useMutation({ - mutationFn: async (id: string) => { - const response = await api.delete(`/products/${id}`) - return response.data - }, - onSuccess: () => { - toast.success('Product deleted successfully!') - queryClient.invalidateQueries({ queryKey: ['products'] }) - }, - onError: (error: any) => { - toast.error(error.response?.data?.errors?.[0]?.cause || 'Delete failed') - } - }) - } + const deleteProduct = useMutation({ + mutationFn: async (id: string) => { + const response = await api.delete(`/products/${id}`) + return response.data + }, + onSuccess: () => { + toast.success('Product deleted successfully!') + queryClient.invalidateQueries({ queryKey: ['products'] }) + }, + onError: (error: any) => { + toast.error(error.response?.data?.errors?.[0]?.cause || 'Delete failed') + } + }) + + return { createProduct, updateProduct, deleteProduct } } diff --git a/src/services/mutations/units.ts b/src/services/mutations/units.ts index 3660448..8d0c3df 100644 --- a/src/services/mutations/units.ts +++ b/src/services/mutations/units.ts @@ -3,58 +3,50 @@ import { toast } from 'react-toastify' import { UnitRequest } from '../../types/services/unit' import { api } from '../api' -export const useUnitsMutation = { - createUnit: () => { - const queryClient = useQueryClient() +export const useUnitsMutation = () => { + const queryClient = useQueryClient() - return useMutation({ - mutationFn: async (newUnit: UnitRequest) => { - const response = await api.post('/units', newUnit) - return response.data - }, - onSuccess: () => { - toast.success('Unit created successfully!') - queryClient.invalidateQueries({ queryKey: ['units'] }) - }, - onError: (error: any) => { - toast.error(error.response?.data?.errors?.[0]?.cause || 'Create failed') - } - }) - }, + const createUnit = useMutation({ + mutationFn: async (newUnit: UnitRequest) => { + const response = await api.post('/units', newUnit) + return response.data + }, + onSuccess: () => { + toast.success('Unit created successfully!') + queryClient.invalidateQueries({ queryKey: ['units'] }) + }, + onError: (error: any) => { + toast.error(error.response?.data?.errors?.[0]?.cause || 'Create failed') + } + }) - updateUnit: () => { - const queryClient = useQueryClient() + const updateUnit = useMutation({ + mutationFn: async ({ id, payload }: { id: string; payload: UnitRequest }) => { + const response = await api.put(`/units/${id}`, payload) + return response.data + }, + onSuccess: () => { + toast.success('Unit updated successfully!') + queryClient.invalidateQueries({ queryKey: ['units'] }) + }, + onError: (error: any) => { + toast.error(error.response?.data?.errors?.[0]?.cause || 'Update failed') + } + }) - return useMutation({ - mutationFn: async ({ id, payload }: { id: string; payload: UnitRequest }) => { - const response = await api.put(`/units/${id}`, payload) - return response.data - }, - onSuccess: () => { - toast.success('Unit updated successfully!') - queryClient.invalidateQueries({ queryKey: ['units'] }) - }, - onError: (error: any) => { - toast.error(error.response?.data?.errors?.[0]?.cause || 'Update failed') - } - }) - }, + const deleteUnit = useMutation({ + mutationFn: async (id: string) => { + const response = await api.delete(`/units/${id}`) + return response.data + }, + onSuccess: () => { + toast.success('Unit deleted successfully!') + queryClient.invalidateQueries({ queryKey: ['units'] }) + }, + onError: (error: any) => { + toast.error(error.response?.data?.errors?.[0]?.cause || 'Delete failed') + } + }) - deleteUnit: () => { - const queryClient = useQueryClient() - - return useMutation({ - mutationFn: async (id: string) => { - const response = await api.delete(`/units/${id}`) - return response.data - }, - onSuccess: () => { - toast.success('Unit deleted successfully!') - queryClient.invalidateQueries({ queryKey: ['units'] }) - }, - onError: (error: any) => { - toast.error(error.response?.data?.errors?.[0]?.cause || 'Delete failed') - } - }) - } + return { createUnit, updateUnit, deleteUnit } } diff --git a/src/services/mutations/users.ts b/src/services/mutations/users.ts index 06b7770..6618122 100644 --- a/src/services/mutations/users.ts +++ b/src/services/mutations/users.ts @@ -7,21 +7,21 @@ type CreateUserPayload = { email: string } -const useUsersMutation = { - createUser: () => { - const queryClient = useQueryClient() +const useUsersMutation = () => { + const queryClient = useQueryClient() + + const createUser = useMutation({ + mutationFn: async newUser => { + const response = await api.post('/users', newUser) + return response.data + }, + onSuccess: () => { + // Optional: refetch 'users' list after success + queryClient.invalidateQueries({ queryKey: ['users'] }) + } + }) - return useMutation({ - mutationFn: async newUser => { - const response = await api.post('/users', newUser) - return response.data - }, - onSuccess: () => { - // Optional: refetch 'users' list after success - queryClient.invalidateQueries({ queryKey: ['users'] }) - } - }) - } + return { createUser } } export default useUsersMutation diff --git a/src/services/queries/categories.ts b/src/services/queries/categories.ts index f777b77..ea0a49d 100644 --- a/src/services/queries/categories.ts +++ b/src/services/queries/categories.ts @@ -8,32 +8,29 @@ interface CategoriesQueryParams { search?: string } -export const useCategoriesQuery = { - getCategories: (params: CategoriesQueryParams = {}) => { - const { page = 1, limit = 10, search = '', ...filters } = params +export function useCategories(params: CategoriesQueryParams = {}) { + const { page = 1, limit = 10, search = '', ...filters } = params - return useQuery({ - queryKey: ['categories', { page, limit, search, ...filters }], - queryFn: async () => { - const queryParams = new URLSearchParams() + return useQuery({ + queryKey: ['categories', { page, limit, search, ...filters }], + queryFn: async () => { + const queryParams = new URLSearchParams() - queryParams.append('page', page.toString()) - queryParams.append('limit', limit.toString()) + queryParams.append('page', page.toString()) + queryParams.append('limit', limit.toString()) - if (search) { - queryParams.append('search', search) + if (search) { + queryParams.append('search', search) + } + + Object.entries(filters).forEach(([key, value]) => { + if (value !== undefined && value !== null && value !== '') { + queryParams.append(key, value.toString()) } + }) - // Add other filters - Object.entries(filters).forEach(([key, value]) => { - if (value !== undefined && value !== null && value !== '') { - queryParams.append(key, value.toString()) - } - }) - - const res = await api.get(`/categories?${queryParams.toString()}`) - return res.data.data - }, - }) - } + const res = await api.get(`/categories?${queryParams.toString()}`) + return res.data.data + } + }) } diff --git a/src/services/queries/inventories.ts b/src/services/queries/inventories.ts index 7498be7..95b144e 100644 --- a/src/services/queries/inventories.ts +++ b/src/services/queries/inventories.ts @@ -8,32 +8,29 @@ interface InventoriesQueryParams { search?: string } -export const useInventoriesQuery = { - getInventories: (params: InventoriesQueryParams = {}) => { - const { page = 1, limit = 10, search = '', ...filters } = params +export function useInventories(params: InventoriesQueryParams = {}) { + const { page = 1, limit = 10, search = '', ...filters } = params - return useQuery({ - queryKey: ['inventories', { page, limit, search, ...filters }], - queryFn: async () => { - const queryParams = new URLSearchParams() + return useQuery({ + queryKey: ['inventories', { page, limit, search, ...filters }], + queryFn: async () => { + const queryParams = new URLSearchParams() - queryParams.append('page', page.toString()) - queryParams.append('limit', limit.toString()) + queryParams.append('page', page.toString()) + queryParams.append('limit', limit.toString()) - if (search) { - queryParams.append('search', search) + if (search) { + queryParams.append('search', search) + } + + Object.entries(filters).forEach(([key, value]) => { + if (value !== undefined && value !== null && value !== '') { + queryParams.append(key, value.toString()) } + }) - // Add other filters - Object.entries(filters).forEach(([key, value]) => { - if (value !== undefined && value !== null && value !== '') { - queryParams.append(key, value.toString()) - } - }) - - const res = await api.get(`/inventory?${queryParams.toString()}`) - return res.data.data - }, - }) - } + const res = await api.get(`/inventory?${queryParams.toString()}`) + return res.data.data + }, + }) } diff --git a/src/services/queries/orders.ts b/src/services/queries/orders.ts index c88a85b..f88d7bb 100644 --- a/src/services/queries/orders.ts +++ b/src/services/queries/orders.ts @@ -1,6 +1,6 @@ -import { useQuery } from "@tanstack/react-query" -import { Orders } from "../../types/services/order" -import { api } from "../api" +import { useQuery } from '@tanstack/react-query' +import { Orders } from '../../types/services/order' +import { api } from '../api' interface OrdersQueryParams { page?: number @@ -8,32 +8,29 @@ interface OrdersQueryParams { search?: string } -export const useOrdersQuery = { - getOrders: (params: OrdersQueryParams = {}) => { - const { page = 1, limit = 10, search = '', ...filters } = params +export function useOrders(params: OrdersQueryParams = {}) { + const { page = 1, limit = 10, search = '', ...filters } = params - return useQuery({ - queryKey: ['orders', { page, limit, search, ...filters }], - queryFn: async () => { - const queryParams = new URLSearchParams() + return useQuery({ + queryKey: ['orders', { page, limit, search, ...filters }], + queryFn: async () => { + const queryParams = new URLSearchParams() - queryParams.append('page', page.toString()) - queryParams.append('limit', limit.toString()) + queryParams.append('page', page.toString()) + queryParams.append('limit', limit.toString()) - if (search) { - queryParams.append('search', search) + if (search) { + queryParams.append('search', search) + } + + Object.entries(filters).forEach(([key, value]) => { + if (value !== undefined && value !== null && value !== '') { + queryParams.append(key, value.toString()) } + }) - // Add other filters - Object.entries(filters).forEach(([key, value]) => { - if (value !== undefined && value !== null && value !== '') { - queryParams.append(key, value.toString()) - } - }) - - const res = await api.get(`/orders?${queryParams.toString()}`) - return res.data.data - }, - }) - } + const res = await api.get(`/orders?${queryParams.toString()}`) + return res.data.data + } + }) } diff --git a/src/services/queries/outlets.ts b/src/services/queries/outlets.ts index 5d824cd..b16322a 100644 --- a/src/services/queries/outlets.ts +++ b/src/services/queries/outlets.ts @@ -8,32 +8,29 @@ interface OutletsQueryParams { search?: string } -export const useOutletsQuery = { - getOutlets: (params: OutletsQueryParams = {}) => { - const { page = 1, limit = 10, search = '', ...filters } = params +export function useOutlets(params: OutletsQueryParams = {}) { + const { page = 1, limit = 10, search = '', ...filters } = params - return useQuery({ - queryKey: ['outlets', { page, limit, search, ...filters }], - queryFn: async () => { - const queryParams = new URLSearchParams() + return useQuery({ + queryKey: ['outlets', { page, limit, search, ...filters }], + queryFn: async () => { + const queryParams = new URLSearchParams() - queryParams.append('page', page.toString()) - queryParams.append('limit', limit.toString()) + queryParams.append('page', page.toString()) + queryParams.append('limit', limit.toString()) - if (search) { - queryParams.append('search', search) - } - - // Add other filters - Object.entries(filters).forEach(([key, value]) => { - if (value !== undefined && value !== null && value !== '') { - queryParams.append(key, value.toString()) - } - }) - - const res = await api.get(`/outlets/list?${queryParams.toString()}`) - return res.data.data + if (search) { + queryParams.append('search', search) } - }) - } + + Object.entries(filters).forEach(([key, value]) => { + if (value !== undefined && value !== null && value !== '') { + queryParams.append(key, value.toString()) + } + }) + + const res = await api.get(`/outlets/list?${queryParams.toString()}`) + return res.data.data + }, + }) } diff --git a/src/services/queries/products.ts b/src/services/queries/products.ts index b61a2f2..cc895f1 100644 --- a/src/services/queries/products.ts +++ b/src/services/queries/products.ts @@ -11,45 +11,40 @@ interface ProductsQueryParams { is_active?: boolean } -export const useProductsQuery = { - getProducts: (params: ProductsQueryParams = {}) => { - const { page = 1, limit = 10, search = '', ...filters } = params +export function useProducts(params: ProductsQueryParams = {}) { + const { page = 1, limit = 10, search = '', ...filters } = params - return useQuery({ - queryKey: ['products', { page, limit, search, ...filters }], - queryFn: async () => { - const queryParams = new URLSearchParams() + return useQuery({ + queryKey: ['products', { page, limit, search, ...filters }], + queryFn: async () => { + const queryParams = new URLSearchParams() - queryParams.append('page', page.toString()) - queryParams.append('limit', limit.toString()) + queryParams.append('page', page.toString()) + queryParams.append('limit', limit.toString()) - if (search) { - queryParams.append('search', search) + if (search) { + queryParams.append('search', search) + } + + Object.entries(filters).forEach(([key, value]) => { + if (value !== undefined && value !== null && value !== '') { + queryParams.append(key, value.toString()) } + }) - // Add other filters - Object.entries(filters).forEach(([key, value]) => { - if (value !== undefined && value !== null && value !== '') { - queryParams.append(key, value.toString()) - } - }) - - const res = await api.get(`/products?${queryParams.toString()}`) - return res.data.data - }, - }) - }, - - getProductById: (id: string) => { - return useQuery({ - queryKey: ['product', id], - queryFn: async ({ queryKey: [, id] }) => { - const res = await api.get(`/products/${id}`) - return res.data.data - }, - - // Cache for 5 minutes - staleTime: 5 * 60 * 1000 - }) - } + const res = await api.get(`/products?${queryParams.toString()}`) + return res.data.data + }, + }) +} + +export function useProductById(id: string) { + return useQuery({ + queryKey: ['product', id], + queryFn: async () => { + const res = await api.get(`/products/${id}`) + return res.data.data + }, + staleTime: 5 * 60 * 1000 + }) } diff --git a/src/services/queries/units.ts b/src/services/queries/units.ts index 2f218e6..427e231 100644 --- a/src/services/queries/units.ts +++ b/src/services/queries/units.ts @@ -8,32 +8,29 @@ interface UnitsQueryParams { search?: string } -export const useUnitsQuery = { - getUnits: (params: UnitsQueryParams = {}) => { - const { page = 1, limit = 10, search = '', ...filters } = params +export function useUnits(params: UnitsQueryParams = {}) { + const { page = 1, limit = 10, search = '', ...filters } = params - return useQuery({ - queryKey: ['units', { page, limit, search, ...filters }], - queryFn: async () => { - const queryParams = new URLSearchParams() + return useQuery({ + queryKey: ['units', { page, limit, search, ...filters }], + queryFn: async () => { + const queryParams = new URLSearchParams() - queryParams.append('page', page.toString()) - queryParams.append('limit', limit.toString()) + queryParams.append('page', page.toString()) + queryParams.append('limit', limit.toString()) - if (search) { - queryParams.append('search', search) + if (search) { + queryParams.append('search', search) + } + + Object.entries(filters).forEach(([key, value]) => { + if (value !== undefined && value !== null && value !== '') { + queryParams.append(key, value.toString()) } + }) - // Add other filters - Object.entries(filters).forEach(([key, value]) => { - if (value !== undefined && value !== null && value !== '') { - queryParams.append(key, value.toString()) - } - }) - - const res = await api.get(`/units?${queryParams.toString()}`) - return res.data.data - }, - }) - } + const res = await api.get(`/units?${queryParams.toString()}`) + return res.data.data + } + }) } diff --git a/src/services/queries/users.ts b/src/services/queries/users.ts index 1ce8b0b..0bf6510 100644 --- a/src/services/queries/users.ts +++ b/src/services/queries/users.ts @@ -2,16 +2,13 @@ import { useQuery } from '@tanstack/react-query' import { api } from '../api' import { User } from '../../types/services/user' -const useUsersQuery = { - getUsers: () => { - return useQuery({ - queryKey: ['users'], - queryFn: async () => { - const res = await api.get('/users') - return res.data - } - }) - } -} -export default useUsersQuery +export function useUsers() { + return useQuery({ + queryKey: ['users'], + queryFn: async () => { + const res = await api.get('/users') + return res.data + }, + }) +} diff --git a/src/views/Login.tsx b/src/views/Login.tsx index 2ad98f3..0ff4be6 100644 --- a/src/views/Login.tsx +++ b/src/views/Login.tsx @@ -90,7 +90,7 @@ const Login = ({ mode }: { mode: SystemMode }) => { const [isPasswordShown, setIsPasswordShown] = useState(false) const [errorState, setErrorState] = useState(null) - const { mutate, isPending, isError, isSuccess } = useAuthMutation.login() + const { login } = useAuthMutation() // Vars const darkImg = '/images/pages/auth-mask-dark.png' @@ -132,7 +132,7 @@ const Login = ({ mode }: { mode: SystemMode }) => { const handleClickShowPassword = () => setIsPasswordShown(show => !show) const onSubmit: SubmitHandler = async (data: FormData) => { - mutate(data) + login.mutate(data) const redirectURL = searchParams.get('redirectTo') ?? '/' diff --git a/src/views/apps/ecommerce/customers/details/customer-right/overview/OrderListTable.tsx b/src/views/apps/ecommerce/customers/details/customer-right/overview/OrderListTable.tsx index 074a86a..6b2337c 100644 --- a/src/views/apps/ecommerce/customers/details/customer-right/overview/OrderListTable.tsx +++ b/src/views/apps/ecommerce/customers/details/customer-right/overview/OrderListTable.tsx @@ -1,7 +1,7 @@ 'use client' // React Imports -import { useState, useEffect, useMemo } from 'react' +import { useEffect, useMemo, useState } from 'react' // Next Imports import Link from 'next/link' @@ -10,38 +10,36 @@ import { useParams } from 'next/navigation' // MUI Imports import Card from '@mui/material/Card' import CardContent from '@mui/material/CardContent' -import Typography from '@mui/material/Typography' import Chip from '@mui/material/Chip' -import TablePagination from '@mui/material/TablePagination' import type { TextFieldProps } from '@mui/material/TextField' +import Typography from '@mui/material/Typography' // Third-party Imports -import classnames from 'classnames' +import type { RankingInfo } from '@tanstack/match-sorter-utils' import { rankItem } from '@tanstack/match-sorter-utils' +import type { ColumnDef, FilterFn } from '@tanstack/react-table' import { createColumnHelper, flexRender, getCoreRowModel, - useReactTable, - getFilteredRowModel, + getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, - getFacetedMinMaxValues, + getFilteredRowModel, getPaginationRowModel, - getSortedRowModel + getSortedRowModel, + useReactTable } from '@tanstack/react-table' -import type { ColumnDef, FilterFn } from '@tanstack/react-table' -import type { RankingInfo } from '@tanstack/match-sorter-utils' +import classnames from 'classnames' // Type Imports -import type { ThemeColor } from '@core/types' import type { OrderType } from '@/types/apps/ecommerceTypes' import type { Locale } from '@configs/i18n' +import type { ThemeColor } from '@core/types' // Component Imports -import OptionMenu from '@core/components/option-menu' -import TablePaginationComponent from '@components/TablePaginationComponent' import CustomTextField from '@core/components/mui/TextField' +import OptionMenu from '@core/components/option-menu' // Util Imports import { getLocalizedUrl } from '@/utils/i18n' @@ -298,7 +296,7 @@ const OrderListTable = ({ orderData }: { orderData?: OrderType[] }) => { )} - } count={table.getFilteredRowModel().rows.length} rowsPerPage={table.getState().pagination.pageSize} @@ -306,7 +304,7 @@ const OrderListTable = ({ orderData }: { orderData?: OrderType[] }) => { onPageChange={(_, page) => { table.setPageIndex(page) }} - /> + /> */} ) } diff --git a/src/views/apps/ecommerce/customers/list/CustomerListTable.tsx b/src/views/apps/ecommerce/customers/list/CustomerListTable.tsx index e638449..417663d 100644 --- a/src/views/apps/ecommerce/customers/list/CustomerListTable.tsx +++ b/src/views/apps/ecommerce/customers/list/CustomerListTable.tsx @@ -1,50 +1,48 @@ 'use client' // React Imports -import { useState, useEffect, useMemo } from 'react' +import { useEffect, useMemo, useState } from 'react' // Next Imports import Link from 'next/link' import { useParams } from 'next/navigation' // MUI Imports +import Button from '@mui/material/Button' import Card from '@mui/material/Card' import CardContent from '@mui/material/CardContent' -import Button from '@mui/material/Button' -import Typography from '@mui/material/Typography' import Checkbox from '@mui/material/Checkbox' -import TablePagination from '@mui/material/TablePagination' -import type { TextFieldProps } from '@mui/material/TextField' import MenuItem from '@mui/material/MenuItem' +import type { TextFieldProps } from '@mui/material/TextField' +import Typography from '@mui/material/Typography' // Third-party Imports -import classnames from 'classnames' +import type { RankingInfo } from '@tanstack/match-sorter-utils' import { rankItem } from '@tanstack/match-sorter-utils' +import type { ColumnDef, FilterFn } from '@tanstack/react-table' import { createColumnHelper, flexRender, getCoreRowModel, - useReactTable, - getFilteredRowModel, + getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, - getFacetedMinMaxValues, + getFilteredRowModel, getPaginationRowModel, - getSortedRowModel + getSortedRowModel, + useReactTable } from '@tanstack/react-table' -import type { ColumnDef, FilterFn } from '@tanstack/react-table' -import type { RankingInfo } from '@tanstack/match-sorter-utils' +import classnames from 'classnames' // Type Imports -import type { ThemeColor } from '@core/types' import type { Customer } from '@/types/apps/ecommerceTypes' import type { Locale } from '@configs/i18n' +import type { ThemeColor } from '@core/types' // Component Imports -import AddCustomerDrawer from './AddCustomerDrawer' import CustomAvatar from '@core/components/mui/Avatar' import CustomTextField from '@core/components/mui/TextField' -import TablePaginationComponent from '@components/TablePaginationComponent' +import AddCustomerDrawer from './AddCustomerDrawer' // Util Imports import { getInitials } from '@/utils/getInitials' @@ -356,7 +354,7 @@ const CustomerListTable = ({ customerData }: { customerData?: Customer[] }) => { )} - } count={table.getFilteredRowModel().rows.length} rowsPerPage={table.getState().pagination.pageSize} @@ -364,7 +362,7 @@ const CustomerListTable = ({ customerData }: { customerData?: Customer[] }) => { onPageChange={(_, page) => { table.setPageIndex(page) }} - /> + /> */} { )} - } count={table.getFilteredRowModel().rows.length} rowsPerPage={table.getState().pagination.pageSize} @@ -415,7 +413,7 @@ const InvoiceListTable = ({ invoiceData }: { invoiceData: InvoiceType[] }) => { table.setPageIndex(page) }} onRowsPerPageChange={e => table.setPageSize(Number(e.target.value))} - /> + /> */} ) } diff --git a/src/views/apps/ecommerce/manage-reviews/ManageReviewsTable.tsx b/src/views/apps/ecommerce/manage-reviews/ManageReviewsTable.tsx index 152d5a1..aee55c3 100644 --- a/src/views/apps/ecommerce/manage-reviews/ManageReviewsTable.tsx +++ b/src/views/apps/ecommerce/manage-reviews/ManageReviewsTable.tsx @@ -8,33 +8,32 @@ import Link from 'next/link' import { useParams } from 'next/navigation' // MUI Imports -import Card from '@mui/material/Card' import Button from '@mui/material/Button' +import Card from '@mui/material/Card' import Checkbox from '@mui/material/Checkbox' import Chip from '@mui/material/Chip' import MenuItem from '@mui/material/MenuItem' import Rating from '@mui/material/Rating' -import TablePagination from '@mui/material/TablePagination' -import Typography from '@mui/material/Typography' import type { TextFieldProps } from '@mui/material/TextField' +import Typography from '@mui/material/Typography' // Third-party Imports -import classnames from 'classnames' +import type { RankingInfo } from '@tanstack/match-sorter-utils' import { rankItem } from '@tanstack/match-sorter-utils' +import type { ColumnDef, FilterFn } from '@tanstack/react-table' import { createColumnHelper, flexRender, getCoreRowModel, - useReactTable, - getFilteredRowModel, + getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, - getFacetedMinMaxValues, + getFilteredRowModel, getPaginationRowModel, - getSortedRowModel + getSortedRowModel, + useReactTable } from '@tanstack/react-table' -import type { ColumnDef, FilterFn } from '@tanstack/react-table' -import type { RankingInfo } from '@tanstack/match-sorter-utils' +import classnames from 'classnames' // Type Imports import type { ReviewType } from '@/types/apps/ecommerceTypes' @@ -42,9 +41,8 @@ import type { Locale } from '@configs/i18n' // Component Imports import CustomAvatar from '@core/components/mui/Avatar' -import OptionMenu from '@core/components/option-menu' import CustomTextField from '@core/components/mui/TextField' -import TablePaginationComponent from '@components/TablePaginationComponent' +import OptionMenu from '@core/components/option-menu' // Util Imports import { getLocalizedUrl } from '@/utils/i18n' @@ -398,7 +396,7 @@ const ManageReviewsTable = ({ reviewsData }: { reviewsData?: ReviewType[] }) => )} - } count={table.getFilteredRowModel().rows.length} rowsPerPage={table.getState().pagination.pageSize} @@ -406,7 +404,7 @@ const ManageReviewsTable = ({ reviewsData }: { reviewsData?: ReviewType[] }) => onPageChange={(_, page) => { table.setPageIndex(page) }} - /> + /> */} ) diff --git a/src/views/apps/ecommerce/orders/list/OrderListTable.tsx b/src/views/apps/ecommerce/orders/list/OrderListTable.tsx index ec3aa03..267a301 100644 --- a/src/views/apps/ecommerce/orders/list/OrderListTable.tsx +++ b/src/views/apps/ecommerce/orders/list/OrderListTable.tsx @@ -40,10 +40,10 @@ import { getLocalizedUrl } from '@/utils/i18n' // Style Imports import tableStyles from '@core/styles/table.module.css' -import { useOrdersQuery } from '../../../../../services/queries/orders' -import { Order } from '../../../../../types/services/order' import { Box, CircularProgress } from '@mui/material' import Loading from '../../../../../components/layout/shared/Loading' +import { useOrders } from '../../../../../services/queries/orders' +import { Order } from '../../../../../types/services/order' declare module '@tanstack/table-core' { interface FilterFns { @@ -133,7 +133,7 @@ const OrderListTable = () => { const [currentPage, setCurrentPage] = useState(1) const [pageSize, setPageSize] = useState(10) - const { data, isLoading, error, isFetching } = useOrdersQuery.getOrders({ + const { data, isLoading, error, isFetching } = useOrders({ page: currentPage, limit: pageSize }) diff --git a/src/views/apps/ecommerce/products/add/ProductAddHeader.tsx b/src/views/apps/ecommerce/products/add/ProductAddHeader.tsx index e6c5b77..2ead91e 100644 --- a/src/views/apps/ecommerce/products/add/ProductAddHeader.tsx +++ b/src/views/apps/ecommerce/products/add/ProductAddHeader.tsx @@ -14,8 +14,8 @@ const ProductAddHeader = () => { const dispatch = useDispatch() const params = useParams() - const { mutate: createProduct, isPending: isCreating } = useProductsMutation.createProduct() - const { mutate: updateProduct, isPending: isUpdating } = useProductsMutation.updateProduct() + const { mutate: createProduct, isPending: isCreating } = useProductsMutation().createProduct + const { mutate: updateProduct, isPending: isUpdating } = useProductsMutation().updateProduct const { productRequest } = useSelector((state: RootState) => state.productReducer) diff --git a/src/views/apps/ecommerce/products/add/ProductImage.tsx b/src/views/apps/ecommerce/products/add/ProductImage.tsx index 6f25717..7634d39 100644 --- a/src/views/apps/ecommerce/products/add/ProductImage.tsx +++ b/src/views/apps/ecommerce/products/add/ProductImage.tsx @@ -51,7 +51,7 @@ const Dropzone = styled(AppReactDropzone)(({ theme }) => ({ const ProductImage = () => { const dispatch = useDispatch() - const { mutate, isPending } = useFilesMutation.uploadFile() + const { mutate, isPending } = useFilesMutation().uploadFile const { image_url } = useSelector((state: RootState) => state.productReducer.productRequest) diff --git a/src/views/apps/ecommerce/products/add/ProductInformation.tsx b/src/views/apps/ecommerce/products/add/ProductInformation.tsx index 4e4495f..d50a1e8 100644 --- a/src/views/apps/ecommerce/products/add/ProductInformation.tsx +++ b/src/views/apps/ecommerce/products/add/ProductInformation.tsx @@ -29,7 +29,7 @@ import { RootState } from '../../../../../redux-store' import { setProduct, setProductField } from '@/redux-store/slices/product' import { useEffect } from 'react' import { useParams } from 'next/navigation' -import { useProductsQuery } from '../../../../../services/queries/products' +import { useProductById } from '../../../../../services/queries/products' import Loading from '../../../../../components/layout/shared/Loading' const EditorToolbar = ({ editor }: { editor: Editor | null }) => { @@ -125,7 +125,7 @@ const ProductInformation = () => { const dispatch = useDispatch() const params = useParams() - const { data: product, isLoading, error } = useProductsQuery.getProductById(params?.id as string) + const { data: product, isLoading, error } = useProductById(params?.id as string) const { name, sku, barcode, description } = useSelector((state: RootState) => state.productReducer.productRequest) const isEdit = !!params?.id diff --git a/src/views/apps/ecommerce/products/add/ProductOrganize.tsx b/src/views/apps/ecommerce/products/add/ProductOrganize.tsx index 23ba204..3d8271e 100644 --- a/src/views/apps/ecommerce/products/add/ProductOrganize.tsx +++ b/src/views/apps/ecommerce/products/add/ProductOrganize.tsx @@ -14,14 +14,14 @@ import CustomTextField from '@core/components/mui/TextField' import { useDispatch, useSelector } from 'react-redux' import { RootState } from '../../../../../redux-store' import { setProductField } from '../../../../../redux-store/slices/product' -import { useCategoriesQuery } from '../../../../../services/queries/categories' +import { useCategories } from '../../../../../services/queries/categories' import { Category } from '../../../../../types/services/category' const ProductOrganize = () => { const dispatch = useDispatch() const { category_id, printer_type } = useSelector((state: RootState) => state.productReducer.productRequest) - const { data: categoriesApi } = useCategoriesQuery.getCategories() + const { data: categoriesApi } = useCategories() const handleSelectChange = (field: any, value: any) => { dispatch(setProductField({ field, value })) diff --git a/src/views/apps/ecommerce/products/category/AddCategoryDrawer.tsx b/src/views/apps/ecommerce/products/category/AddCategoryDrawer.tsx index 69a7824..b03d0b3 100644 --- a/src/views/apps/ecommerce/products/category/AddCategoryDrawer.tsx +++ b/src/views/apps/ecommerce/products/category/AddCategoryDrawer.tsx @@ -27,7 +27,7 @@ const AddCategoryDrawer = (props: Props) => { // Props const { open, handleClose } = props - const { mutate: createCategory, isPending: isCreating } = useCategoriesMutation.createCategory() + const { mutate: createCategory, isPending: isCreating } = useCategoriesMutation().createCategory // States const [formData, setFormData] = useState({ diff --git a/src/views/apps/ecommerce/products/category/EditCategoryDrawer.tsx b/src/views/apps/ecommerce/products/category/EditCategoryDrawer.tsx index ce86b20..42c9b91 100644 --- a/src/views/apps/ecommerce/products/category/EditCategoryDrawer.tsx +++ b/src/views/apps/ecommerce/products/category/EditCategoryDrawer.tsx @@ -28,7 +28,7 @@ const EditCategoryDrawer = (props: Props) => { // Props const { open, handleClose, data } = props - const { mutate: updateCategory, isPending: isCreating } = useCategoriesMutation.updateCategory() + const { mutate: updateCategory, isPending: isCreating } = useCategoriesMutation().updateCategory // States const [formData, setFormData] = useState({ diff --git a/src/views/apps/ecommerce/products/category/ProductCategoryTable.tsx b/src/views/apps/ecommerce/products/category/ProductCategoryTable.tsx index 8464883..6677cdd 100644 --- a/src/views/apps/ecommerce/products/category/ProductCategoryTable.tsx +++ b/src/views/apps/ecommerce/products/category/ProductCategoryTable.tsx @@ -4,47 +4,36 @@ import { useCallback, useEffect, useMemo, useState } from 'react' // MUI Imports -import Card from '@mui/material/Card' import Button from '@mui/material/Button' +import Card from '@mui/material/Card' import Checkbox from '@mui/material/Checkbox' import IconButton from '@mui/material/IconButton' -import TablePagination from '@mui/material/TablePagination' import MenuItem from '@mui/material/MenuItem' -import Typography from '@mui/material/Typography' +import TablePagination from '@mui/material/TablePagination' import type { TextFieldProps } from '@mui/material/TextField' +import Typography from '@mui/material/Typography' // Third-party Imports -import classnames from 'classnames' -import { rankItem } from '@tanstack/match-sorter-utils' -import { - createColumnHelper, - flexRender, - getCoreRowModel, - useReactTable, - getFilteredRowModel, - getFacetedRowModel, - getFacetedUniqueValues, - getFacetedMinMaxValues, - getPaginationRowModel, - getSortedRowModel -} from '@tanstack/react-table' -import type { ColumnDef, FilterFn } from '@tanstack/react-table' import type { RankingInfo } from '@tanstack/match-sorter-utils' +import { rankItem } from '@tanstack/match-sorter-utils' +import type { ColumnDef, FilterFn } from '@tanstack/react-table' +import { createColumnHelper, flexRender, getCoreRowModel, useReactTable } from '@tanstack/react-table' +import classnames from 'classnames' // Component Imports -import AddCategoryDrawer from './AddCategoryDrawer' -import OptionMenu from '@core/components/option-menu' -import CustomTextField from '@core/components/mui/TextField' import TablePaginationComponent from '@components/TablePaginationComponent' +import CustomTextField from '@core/components/mui/TextField' +import OptionMenu from '@core/components/option-menu' +import AddCategoryDrawer from './AddCategoryDrawer' // Style Imports import tableStyles from '@core/styles/table.module.css' -import { useCategoriesQuery } from '../../../../../services/queries/categories' -import { Category } from '../../../../../types/services/category' import { Box, CircularProgress } from '@mui/material' +import ConfirmDeleteDialog from '../../../../../components/dialogs/confirm-delete' import Loading from '../../../../../components/layout/shared/Loading' import { useCategoriesMutation } from '../../../../../services/mutations/categories' -import ConfirmDeleteDialog from '../../../../../components/dialogs/confirm-delete' +import { useCategories } from '../../../../../services/queries/categories' +import { Category } from '../../../../../types/services/category' import EditCategoryDrawer from './EditCategoryDrawer' declare module '@tanstack/table-core' { @@ -117,12 +106,12 @@ const ProductCategoryTable = () => { const [currentCategory, setCurrentCategory] = useState() // Fetch products with pagination and search - const { data, isLoading, error, isFetching } = useCategoriesQuery.getCategories({ + const { data, isLoading, error, isFetching } = useCategories({ page: currentPage, limit: pageSize }) - const { mutate: deleteCategory, isPending: isDeleting } = useCategoriesMutation.deleteCategory() + const { mutate: deleteCategory, isPending: isDeleting } = useCategoriesMutation().deleteCategory const categories = data?.categories ?? [] const totalCount = data?.total_count ?? 0 @@ -197,10 +186,12 @@ const ProductCategoryTable = () => { header: 'Actions', cell: ({ row }) => (
- { - setCurrentCategory(row.original) - setEditCategoryOpen(!editCategoryOpen) - }}> + { + setCurrentCategory(row.original) + setEditCategoryOpen(!editCategoryOpen) + }} + > { /> - setAddCategoryOpen(!addCategoryOpen)} - /> + setAddCategoryOpen(!addCategoryOpen)} /> ( @@ -31,7 +31,7 @@ const ProductDetail = () => { const dispatch = useDispatch() const params = useParams() - const { data: product, isLoading, error } = useProductsQuery.getProductById(params?.id as string) + const { data: product, isLoading, error } = useProductById(params?.id as string) useEffect(() => { if (product) { diff --git a/src/views/apps/ecommerce/products/list/ProductListTable.tsx b/src/views/apps/ecommerce/products/list/ProductListTable.tsx index 57ded73..84d8571 100644 --- a/src/views/apps/ecommerce/products/list/ProductListTable.tsx +++ b/src/views/apps/ecommerce/products/list/ProductListTable.tsx @@ -43,7 +43,7 @@ import { getLocalizedUrl } from '@/utils/i18n' import tableStyles from '@core/styles/table.module.css' import { Box, CircularProgress } from '@mui/material' import Loading from '../../../../../components/layout/shared/Loading' -import { useProductsQuery } from '../../../../../services/queries/products' +import { useProducts } from '../../../../../services/queries/products' import { Product } from '../../../../../types/services/product' import ConfirmDeleteDialog from '../../../../../components/dialogs/confirm-delete' import { useProductsMutation } from '../../../../../services/mutations/products' @@ -117,12 +117,12 @@ const ProductListTable = () => { const { lang: locale } = useParams() // Fetch products with pagination and search - const { data, isLoading, error, isFetching } = useProductsQuery.getProducts({ + const { data, isLoading, error, isFetching } = useProducts({ page: currentPage, limit: pageSize }) - const { mutate: deleteProduct, isPending: isDeleting } = useProductsMutation.deleteProduct() + const { mutate: deleteProduct, isPending: isDeleting } = useProductsMutation().deleteProduct const products = data?.products ?? [] const totalCount = data?.total_count ?? 0 diff --git a/src/views/apps/ecommerce/products/units/AddUnitDrawer.tsx b/src/views/apps/ecommerce/products/units/AddUnitDrawer.tsx index 54634f6..c5eb896 100644 --- a/src/views/apps/ecommerce/products/units/AddUnitDrawer.tsx +++ b/src/views/apps/ecommerce/products/units/AddUnitDrawer.tsx @@ -18,7 +18,7 @@ import CustomTextField from '@core/components/mui/TextField' import { Autocomplete, CircularProgress } from '@mui/material' import { useDebounce } from 'use-debounce' import { useUnitsMutation } from '../../../../../services/mutations/units' -import { useOutletsQuery } from '../../../../../services/queries/outlets' +import { useOutlets } from '../../../../../services/queries/outlets' import { UnitRequest } from '../../../../../types/services/unit' type Props = { @@ -41,10 +41,10 @@ const AddUnitDrawer = (props: Props) => { const [outletInput, setOutletInput] = useState('') const [outletDebouncedInput] = useDebounce(outletInput, 500) - const { data: outlets, isLoading: outletsLoading } = useOutletsQuery.getOutlets({ + const { data: outlets, isLoading: outletsLoading } = useOutlets({ search: outletDebouncedInput }) - const { mutate: createUnit, isPending: isCreating } = useUnitsMutation.createUnit() + const { mutate: createUnit, isPending: isCreating } = useUnitsMutation().createUnit const outletOptions = useMemo(() => outlets?.outlets || [], [outlets]) diff --git a/src/views/apps/ecommerce/products/units/EditUnitDrawer.tsx b/src/views/apps/ecommerce/products/units/EditUnitDrawer.tsx index a5a78b0..1c6e058 100644 --- a/src/views/apps/ecommerce/products/units/EditUnitDrawer.tsx +++ b/src/views/apps/ecommerce/products/units/EditUnitDrawer.tsx @@ -15,11 +15,11 @@ import Typography from '@mui/material/Typography' // Components Imports import CustomTextField from '@core/components/mui/TextField' -import { useUnitsMutation } from '../../../../../services/mutations/units' -import { Unit, UnitRequest } from '../../../../../types/services/unit' import { Autocomplete, CircularProgress } from '@mui/material' -import { useOutletsQuery } from '../../../../../services/queries/outlets' import { useDebounce } from 'use-debounce' +import { useUnitsMutation } from '../../../../../services/mutations/units' +import { useOutlets } from '../../../../../services/queries/outlets' +import { Unit, UnitRequest } from '../../../../../types/services/unit' type Props = { open: boolean @@ -42,11 +42,11 @@ const EditUnitDrawer = (props: Props) => { const [outletInput, setOutletInput] = useState('') const [outletDebouncedInput] = useDebounce(outletInput, 500) - const { data: outlets, isLoading: outletsLoading } = useOutletsQuery.getOutlets({ + const { data: outlets, isLoading: outletsLoading } = useOutlets({ search: outletDebouncedInput }) - const { mutate: updateUnit, isPending: isCreating } = useUnitsMutation.updateUnit() + const { mutate: updateUnit, isPending: isCreating } = useUnitsMutation().updateUnit const outletOptions = useMemo(() => outlets?.outlets || [], [outlets]) useEffect(() => { diff --git a/src/views/apps/ecommerce/products/units/ProductUnitTable.tsx b/src/views/apps/ecommerce/products/units/ProductUnitTable.tsx index 4abc2f7..aa6c875 100644 --- a/src/views/apps/ecommerce/products/units/ProductUnitTable.tsx +++ b/src/views/apps/ecommerce/products/units/ProductUnitTable.tsx @@ -31,7 +31,7 @@ import { Box, CircularProgress } from '@mui/material' import ConfirmDeleteDialog from '../../../../../components/dialogs/confirm-delete' import Loading from '../../../../../components/layout/shared/Loading' import { useUnitsMutation } from '../../../../../services/mutations/units' -import { useUnitsQuery } from '../../../../../services/queries/units' +import { useUnits } from '../../../../../services/queries/units' import { Unit } from '../../../../../types/services/unit' import AddUnitDrawer from './AddUnitDrawer' import EditUnitDrawer from './EditUnitDrawer' @@ -106,12 +106,12 @@ const ProductUnitTable = () => { const [currentUnit, setCurrentUnit] = useState() // Fetch products with pagination and search - const { data, isLoading, error, isFetching } = useUnitsQuery.getUnits({ + const { data, isLoading, error, isFetching } = useUnits({ page: currentPage, limit: pageSize }) - const { mutate: deleteUnit, isPending: isDeleting } = useUnitsMutation.deleteUnit() + const { mutate: deleteUnit, isPending: isDeleting } = useUnitsMutation().deleteUnit const units = data?.data ?? [] const totalCount = data?.pagination.total_count ?? 0 @@ -370,11 +370,7 @@ const ProductUnitTable = () => { setAddUnitOpen(!addUnitOpen)} /> - setEditUnitOpen(!editUnitOpen)} - data={currentUnit!} - /> + setEditUnitOpen(!editUnitOpen)} data={currentUnit!} />
- } count={table.getExpandedRowModel().rows.length} rowsPerPage={table.getState().pagination.pageSize} @@ -271,7 +269,7 @@ const ReferredUsersTable = ({ referralsData }: { referralsData?: ReferralsType[] onPageChange={(_, page) => { table.setPageIndex(page) }} - /> + /> */} ) diff --git a/src/views/apps/invoice/list/InvoiceListTable.tsx b/src/views/apps/invoice/list/InvoiceListTable.tsx index c1de658..5af4f23 100644 --- a/src/views/apps/invoice/list/InvoiceListTable.tsx +++ b/src/views/apps/invoice/list/InvoiceListTable.tsx @@ -1,53 +1,51 @@ 'use client' // React Imports -import { useState, useEffect, useMemo } from 'react' +import { useEffect, useMemo, useState } from 'react' // Next Imports import Link from 'next/link' import { useParams } from 'next/navigation' // MUI Imports +import Button from '@mui/material/Button' import Card from '@mui/material/Card' import CardContent from '@mui/material/CardContent' -import Button from '@mui/material/Button' -import Typography from '@mui/material/Typography' import Checkbox from '@mui/material/Checkbox' import Chip from '@mui/material/Chip' import IconButton from '@mui/material/IconButton' import MenuItem from '@mui/material/MenuItem' -import Tooltip from '@mui/material/Tooltip' -import TablePagination from '@mui/material/TablePagination' import type { TextFieldProps } from '@mui/material/TextField' +import Tooltip from '@mui/material/Tooltip' +import Typography from '@mui/material/Typography' // Third-party Imports -import classnames from 'classnames' +import type { RankingInfo } from '@tanstack/match-sorter-utils' import { rankItem } from '@tanstack/match-sorter-utils' +import type { ColumnDef, FilterFn } from '@tanstack/react-table' import { createColumnHelper, flexRender, getCoreRowModel, - useReactTable, - getFilteredRowModel, + getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, - getFacetedMinMaxValues, + getFilteredRowModel, getPaginationRowModel, - getSortedRowModel + getSortedRowModel, + useReactTable } from '@tanstack/react-table' -import type { ColumnDef, FilterFn } from '@tanstack/react-table' -import type { RankingInfo } from '@tanstack/match-sorter-utils' +import classnames from 'classnames' // Type Imports -import type { ThemeColor } from '@core/types' import type { InvoiceType } from '@/types/apps/invoiceTypes' import type { Locale } from '@configs/i18n' +import type { ThemeColor } from '@core/types' // Component Imports -import OptionMenu from '@core/components/option-menu' import CustomAvatar from '@core/components/mui/Avatar' -import TablePaginationComponent from '@components/TablePaginationComponent' import CustomTextField from '@core/components/mui/TextField' +import OptionMenu from '@core/components/option-menu' // Util Imports import { getInitials } from '@/utils/getInitials' @@ -446,7 +444,7 @@ const InvoiceListTable = ({ invoiceData }: { invoiceData?: InvoiceType[] }) => { )} - } count={table.getFilteredRowModel().rows.length} rowsPerPage={table.getState().pagination.pageSize} @@ -455,7 +453,7 @@ const InvoiceListTable = ({ invoiceData }: { invoiceData?: InvoiceType[] }) => { table.setPageIndex(page) }} onRowsPerPageChange={e => table.setPageSize(Number(e.target.value))} - /> + /> */} ) } diff --git a/src/views/apps/logistics/dashboard/LogisticsOverviewTable.tsx b/src/views/apps/logistics/dashboard/LogisticsOverviewTable.tsx index 491e9f1..02366d3 100644 --- a/src/views/apps/logistics/dashboard/LogisticsOverviewTable.tsx +++ b/src/views/apps/logistics/dashboard/LogisticsOverviewTable.tsx @@ -1,7 +1,7 @@ 'use client' // React Imports -import { useState, useMemo } from 'react' +import { useMemo, useState } from 'react' // Next Imports import Link from 'next/link' @@ -11,37 +11,35 @@ import { useParams } from 'next/navigation' import Card from '@mui/material/Card' import CardHeader from '@mui/material/CardHeader' import Checkbox from '@mui/material/Checkbox' -import LinearProgress from '@mui/material/LinearProgress' -import TablePagination from '@mui/material/TablePagination' import Chip from '@mui/material/Chip' +import LinearProgress from '@mui/material/LinearProgress' import Typography from '@mui/material/Typography' // Third-party Imports -import classnames from 'classnames' +import type { RankingInfo } from '@tanstack/match-sorter-utils' import { rankItem } from '@tanstack/match-sorter-utils' +import type { ColumnDef, FilterFn } from '@tanstack/react-table' import { createColumnHelper, flexRender, getCoreRowModel, - useReactTable, + getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, - getFacetedMinMaxValues, getPaginationRowModel, - getSortedRowModel + getSortedRowModel, + useReactTable } from '@tanstack/react-table' -import type { ColumnDef, FilterFn } from '@tanstack/react-table' -import type { RankingInfo } from '@tanstack/match-sorter-utils' +import classnames from 'classnames' // Type Imports -import type { ThemeColor } from '@core/types' -import type { Locale } from '@configs/i18n' import type { Vehicle } from '@/types/apps/logisticsTypes' +import type { Locale } from '@configs/i18n' +import type { ThemeColor } from '@core/types' // Components Imports import CustomAvatar from '@core/components/mui/Avatar' import OptionMenu from '@core/components/option-menu' -import TablePaginationComponent from '@components/TablePaginationComponent' // Util Imports import { getLocalizedUrl } from '@/utils/i18n' @@ -258,7 +256,7 @@ const LogisticsOverviewTable = ({ vehicleData }: { vehicleData?: Vehicle[] }) => )} - } count={table.getFilteredRowModel().rows.length} rowsPerPage={table.getState().pagination.pageSize} @@ -266,7 +264,7 @@ const LogisticsOverviewTable = ({ vehicleData }: { vehicleData?: Vehicle[] }) => onPageChange={(_, page) => { table.setPageIndex(page) }} - /> + /> */} ) } diff --git a/src/views/apps/permissions/index.tsx b/src/views/apps/permissions/index.tsx index 7f19db4..32e4ce4 100644 --- a/src/views/apps/permissions/index.tsx +++ b/src/views/apps/permissions/index.tsx @@ -1,47 +1,45 @@ 'use client' // React Imports -import { useEffect, useState, useMemo } from 'react' +import { useEffect, useMemo, useState } from 'react' // MUI Imports +import type { ButtonProps } from '@mui/material/Button' +import Button from '@mui/material/Button' import Card from '@mui/material/Card' import CardContent from '@mui/material/CardContent' -import Button from '@mui/material/Button' -import Typography from '@mui/material/Typography' import Chip from '@mui/material/Chip' -import TablePagination from '@mui/material/TablePagination' import IconButton from '@mui/material/IconButton' import MenuItem from '@mui/material/MenuItem' import type { TextFieldProps } from '@mui/material/TextField' -import type { ButtonProps } from '@mui/material/Button' +import Typography from '@mui/material/Typography' // Third-party Imports -import classnames from 'classnames' +import type { RankingInfo } from '@tanstack/match-sorter-utils' import { rankItem } from '@tanstack/match-sorter-utils' +import type { ColumnDef, FilterFn } from '@tanstack/react-table' import { createColumnHelper, flexRender, getCoreRowModel, - useReactTable, - getFilteredRowModel, + getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, - getFacetedMinMaxValues, + getFilteredRowModel, getPaginationRowModel, - getSortedRowModel + getSortedRowModel, + useReactTable } from '@tanstack/react-table' -import type { ColumnDef, FilterFn } from '@tanstack/react-table' -import type { RankingInfo } from '@tanstack/match-sorter-utils' +import classnames from 'classnames' // Type Imports -import type { ThemeColor } from '@core/types' import type { PermissionRowType } from '@/types/apps/permissionTypes' +import type { ThemeColor } from '@core/types' // Component Imports -import PermissionDialog from '@components/dialogs/permission-dialog' import OpenDialogOnElementClick from '@components/dialogs/OpenDialogOnElementClick' +import PermissionDialog from '@components/dialogs/permission-dialog' import CustomTextField from '@core/components/mui/TextField' -import TablePaginationComponent from '@components/TablePaginationComponent' // Style Imports import tableStyles from '@core/styles/table.module.css' @@ -314,7 +312,7 @@ const Permissions = ({ permissionsData }: { permissionsData?: PermissionRowType[ )} - } count={table.getFilteredRowModel().rows.length} rowsPerPage={table.getState().pagination.pageSize} @@ -322,7 +320,7 @@ const Permissions = ({ permissionsData }: { permissionsData?: PermissionRowType[ onPageChange={(_, page) => { table.setPageIndex(page) }} - /> + /> */} diff --git a/src/views/apps/roles/RolesTable.tsx b/src/views/apps/roles/RolesTable.tsx index 30962ea..5237e51 100644 --- a/src/views/apps/roles/RolesTable.tsx +++ b/src/views/apps/roles/RolesTable.tsx @@ -1,7 +1,7 @@ 'use client' // React Imports -import { useState, useMemo, useEffect } from 'react' +import { useEffect, useMemo, useState } from 'react' // Next Imports import Link from 'next/link' @@ -10,43 +10,41 @@ import { useParams } from 'next/navigation' // MUI Imports import Card from '@mui/material/Card' import CardContent from '@mui/material/CardContent' -import MenuItem from '@mui/material/MenuItem' -import Chip from '@mui/material/Chip' -import Typography from '@mui/material/Typography' import Checkbox from '@mui/material/Checkbox' +import Chip from '@mui/material/Chip' import IconButton from '@mui/material/IconButton' -import TablePagination from '@mui/material/TablePagination' +import MenuItem from '@mui/material/MenuItem' import { styled } from '@mui/material/styles' import type { TextFieldProps } from '@mui/material/TextField' +import Typography from '@mui/material/Typography' // Third-party Imports -import classnames from 'classnames' +import type { RankingInfo } from '@tanstack/match-sorter-utils' import { rankItem } from '@tanstack/match-sorter-utils' +import type { ColumnDef, FilterFn } from '@tanstack/react-table' import { createColumnHelper, flexRender, getCoreRowModel, - useReactTable, - getFilteredRowModel, + getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, - getFacetedMinMaxValues, + getFilteredRowModel, getPaginationRowModel, - getSortedRowModel + getSortedRowModel, + useReactTable } from '@tanstack/react-table' -import type { ColumnDef, FilterFn } from '@tanstack/react-table' -import type { RankingInfo } from '@tanstack/match-sorter-utils' +import classnames from 'classnames' // Type Imports -import type { ThemeColor } from '@core/types' import type { UsersType } from '@/types/apps/userTypes' import type { Locale } from '@configs/i18n' +import type { ThemeColor } from '@core/types' // Component Imports import CustomAvatar from '@core/components/mui/Avatar' -import OptionMenu from '@core/components/option-menu' import CustomTextField from '@core/components/mui/TextField' -import TablePaginationComponent from '@components/TablePaginationComponent' +import OptionMenu from '@core/components/option-menu' // Util Imports import { getInitials } from '@/utils/getInitials' @@ -415,7 +413,7 @@ const RolesTable = ({ tableData }: { tableData?: UsersType[] }) => { )} - } count={table.getFilteredRowModel().rows.length} rowsPerPage={table.getState().pagination.pageSize} @@ -423,7 +421,7 @@ const RolesTable = ({ tableData }: { tableData?: UsersType[] }) => { onPageChange={(_, page) => { table.setPageIndex(page) }} - /> + /> */} ) } diff --git a/src/views/apps/stock/adjustment/AdjustmentStockDrawer.tsx b/src/views/apps/stock/adjustment/AdjustmentStockDrawer.tsx index 29b210a..06932c4 100644 --- a/src/views/apps/stock/adjustment/AdjustmentStockDrawer.tsx +++ b/src/views/apps/stock/adjustment/AdjustmentStockDrawer.tsx @@ -17,8 +17,8 @@ import CustomTextField from '@core/components/mui/TextField' import { Autocomplete, CircularProgress } from '@mui/material' import { useDebounce } from 'use-debounce' import { useInventoriesMutation } from '../../../../services/mutations/inventories' -import { useOutletsQuery } from '../../../../services/queries/outlets' -import { useProductsQuery } from '../../../../services/queries/products' +import { useOutlets } from '../../../../services/queries/outlets' +import { useProducts } from '../../../../services/queries/products' import { InventoryAdjustRequest } from '../../../../types/services/inventory' type Props = { @@ -30,7 +30,7 @@ const AdjustmentStockDrawer = (props: Props) => { // Props const { open, handleClose } = props - const { mutate: adjustInventory, isPending: isCreating } = useInventoriesMutation.adjustInventory() + const { mutate: adjustInventory, isPending: isCreating } = useInventoriesMutation().adjustInventory // States const [productInput, setProductInput] = useState('') @@ -44,10 +44,10 @@ const AdjustmentStockDrawer = (props: Props) => { reason: '' }) - const { data: outlets, isLoading: outletsLoading } = useOutletsQuery.getOutlets({ + const { data: outlets, isLoading: outletsLoading } = useOutlets({ search: outletDebouncedInput }) - const { data: products, isLoading } = useProductsQuery.getProducts({ + const { data: products, isLoading } = useProducts({ search: productDebouncedInput }) diff --git a/src/views/apps/stock/adjustment/StockListTable.tsx b/src/views/apps/stock/adjustment/StockListTable.tsx index fbf7fba..2cc82b5 100644 --- a/src/views/apps/stock/adjustment/StockListTable.tsx +++ b/src/views/apps/stock/adjustment/StockListTable.tsx @@ -36,8 +36,7 @@ import CustomTextField from '@core/components/mui/TextField' import tableStyles from '@core/styles/table.module.css' import { Box, CircularProgress } from '@mui/material' import Loading from '../../../../components/layout/shared/Loading' -import { useInventoriesMutation } from '../../../../services/mutations/inventories' -import { useInventoriesQuery } from '../../../../services/queries/inventories' +import { useInventories } from '../../../../services/queries/inventories' import { Inventory } from '../../../../types/services/inventory' import AdjustmentStockDrawer from './AdjustmentStockDrawer' @@ -106,13 +105,11 @@ const StockListTable = () => { const [addInventoryOpen, setAddInventoryOpen] = useState(false) // Fetch products with pagination and search - const { data, isLoading, error, isFetching } = useInventoriesQuery.getInventories({ + const { data, isLoading, error, isFetching } = useInventories({ page: currentPage, limit: pageSize }) - const { mutate: deleteInventory, isPending: isDeleting } = useInventoriesMutation.deleteInventory() - const inventories = data?.inventory ?? [] const totalCount = data?.total_count ?? 0 @@ -173,7 +170,7 @@ const StockListTable = () => { size='small' /> ) - }), + }) // columnHelper.accessor('actions', { // header: 'Actions', // cell: ({ row }) => ( diff --git a/src/views/apps/stock/list/AddStockDrawer.tsx b/src/views/apps/stock/list/AddStockDrawer.tsx index d8090d3..8609af1 100644 --- a/src/views/apps/stock/list/AddStockDrawer.tsx +++ b/src/views/apps/stock/list/AddStockDrawer.tsx @@ -17,8 +17,8 @@ import CustomTextField from '@core/components/mui/TextField' import { Autocomplete, CircularProgress } from '@mui/material' import { useDebounce } from 'use-debounce' import { useInventoriesMutation } from '../../../../services/mutations/inventories' -import { useOutletsQuery } from '../../../../services/queries/outlets' -import { useProductsQuery } from '../../../../services/queries/products' +import { useOutlets } from '../../../../services/queries/outlets' +import { useProducts } from '../../../../services/queries/products' import { InventoryRequest } from '../../../../types/services/inventory' type Props = { @@ -30,7 +30,7 @@ const AddStockDrawer = (props: Props) => { // Props const { open, handleClose } = props - const { mutate: createInventory, isPending: isCreating } = useInventoriesMutation.createInventory() + const { mutate: createInventory, isPending: isCreating } = useInventoriesMutation().createInventory // States const [productInput, setProductInput] = useState('') @@ -43,10 +43,10 @@ const AddStockDrawer = (props: Props) => { quantity: 0 }) - const { data: outlets, isLoading: outletsLoading } = useOutletsQuery.getOutlets({ + const { data: outlets, isLoading: outletsLoading } = useOutlets({ search: outletDebouncedInput }) - const { data: products, isLoading } = useProductsQuery.getProducts({ + const { data: products, isLoading } = useProducts({ search: productDebouncedInput }) diff --git a/src/views/apps/stock/list/StockListTable.tsx b/src/views/apps/stock/list/StockListTable.tsx index c726e30..3372590 100644 --- a/src/views/apps/stock/list/StockListTable.tsx +++ b/src/views/apps/stock/list/StockListTable.tsx @@ -4,7 +4,6 @@ import { useCallback, useEffect, useMemo, useState } from 'react' // Next Imports -import { useParams } from 'next/navigation' // MUI Imports import Button from '@mui/material/Button' @@ -40,7 +39,7 @@ import { Box, CircularProgress } from '@mui/material' import ConfirmDeleteDialog from '../../../../components/dialogs/confirm-delete' import Loading from '../../../../components/layout/shared/Loading' import { useInventoriesMutation } from '../../../../services/mutations/inventories' -import { useInventoriesQuery } from '../../../../services/queries/inventories' +import { useInventories } from '../../../../services/queries/inventories' import { Inventory } from '../../../../types/services/inventory' import AddStockDrawer from './AddStockDrawer' @@ -111,12 +110,12 @@ const StockListTable = () => { const [addInventoryOpen, setAddInventoryOpen] = useState(false) // Fetch products with pagination and search - const { data, isLoading, error, isFetching } = useInventoriesQuery.getInventories({ + const { data, isLoading, error, isFetching } = useInventories({ page: currentPage, limit: pageSize }) - const { mutate: deleteInventory, isPending: isDeleting } = useInventoriesMutation.deleteInventory() + const { mutate: deleteInventory, isPending: isDeleting } = useInventoriesMutation().deleteInventory const inventories = data?.inventory ?? [] const totalCount = data?.total_count ?? 0 diff --git a/src/views/apps/user/list/UserListTable.tsx b/src/views/apps/user/list/UserListTable.tsx index b6a74b5..be7d970 100644 --- a/src/views/apps/user/list/UserListTable.tsx +++ b/src/views/apps/user/list/UserListTable.tsx @@ -1,55 +1,53 @@ 'use client' // React Imports -import { useEffect, useState, useMemo } from 'react' +import { useEffect, useMemo, useState } from 'react' // Next Imports import Link from 'next/link' import { useParams } from 'next/navigation' // MUI Imports +import Button from '@mui/material/Button' import Card from '@mui/material/Card' import CardHeader from '@mui/material/CardHeader' -import Button from '@mui/material/Button' -import Typography from '@mui/material/Typography' -import Chip from '@mui/material/Chip' import Checkbox from '@mui/material/Checkbox' +import Chip from '@mui/material/Chip' import IconButton from '@mui/material/IconButton' -import { styled } from '@mui/material/styles' -import TablePagination from '@mui/material/TablePagination' -import type { TextFieldProps } from '@mui/material/TextField' import MenuItem from '@mui/material/MenuItem' +import { styled } from '@mui/material/styles' +import type { TextFieldProps } from '@mui/material/TextField' +import Typography from '@mui/material/Typography' // Third-party Imports -import classnames from 'classnames' +import type { RankingInfo } from '@tanstack/match-sorter-utils' import { rankItem } from '@tanstack/match-sorter-utils' +import type { ColumnDef, FilterFn } from '@tanstack/react-table' import { createColumnHelper, flexRender, getCoreRowModel, - useReactTable, - getFilteredRowModel, + getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, - getFacetedMinMaxValues, + getFilteredRowModel, getPaginationRowModel, - getSortedRowModel + getSortedRowModel, + useReactTable } from '@tanstack/react-table' -import type { ColumnDef, FilterFn } from '@tanstack/react-table' -import type { RankingInfo } from '@tanstack/match-sorter-utils' +import classnames from 'classnames' // Type Imports -import type { ThemeColor } from '@core/types' import type { UsersType } from '@/types/apps/userTypes' import type { Locale } from '@configs/i18n' +import type { ThemeColor } from '@core/types' // Component Imports -import TableFilters from './TableFilters' -import AddUserDrawer from './AddUserDrawer' -import OptionMenu from '@core/components/option-menu' -import TablePaginationComponent from '@components/TablePaginationComponent' -import CustomTextField from '@core/components/mui/TextField' import CustomAvatar from '@core/components/mui/Avatar' +import CustomTextField from '@core/components/mui/TextField' +import OptionMenu from '@core/components/option-menu' +import AddUserDrawer from './AddUserDrawer' +import TableFilters from './TableFilters' // Util Imports import { getInitials } from '@/utils/getInitials' @@ -403,7 +401,7 @@ const UserListTable = ({ tableData }: { tableData?: UsersType[] }) => { )} - } count={table.getFilteredRowModel().rows.length} rowsPerPage={table.getState().pagination.pageSize} @@ -411,7 +409,7 @@ const UserListTable = ({ tableData }: { tableData?: UsersType[] }) => { onPageChange={(_, page) => { table.setPageIndex(page) }} - /> + /> */} { - } count={table.getFilteredRowModel().rows.length} rowsPerPage={table.getState().pagination.pageSize} @@ -347,7 +347,7 @@ const InvoiceListTable = ({ invoiceData }: { invoiceData?: InvoiceType[] }) => { onPageChange={(_, page) => { table.setPageIndex(page) }} - /> + /> */} ) } diff --git a/src/views/apps/user/view/user-right/overview/ProjectListTable.tsx b/src/views/apps/user/view/user-right/overview/ProjectListTable.tsx index 58da2a9..3e6c842 100644 --- a/src/views/apps/user/view/user-right/overview/ProjectListTable.tsx +++ b/src/views/apps/user/view/user-right/overview/ProjectListTable.tsx @@ -1,34 +1,33 @@ 'use client' // React Imports -import { useState, useMemo, useEffect } from 'react' +import { useEffect, useMemo, useState } from 'react' // MUI Imports -import Typography from '@mui/material/Typography' -import LinearProgress from '@mui/material/LinearProgress' import Card from '@mui/material/Card' import CardHeader from '@mui/material/CardHeader' +import LinearProgress from '@mui/material/LinearProgress' import MenuItem from '@mui/material/MenuItem' -import TablePagination from '@mui/material/TablePagination' import type { TextFieldProps } from '@mui/material/TextField' +import Typography from '@mui/material/Typography' // Third-party Imports -import classnames from 'classnames' +import type { RankingInfo } from '@tanstack/match-sorter-utils' import { rankItem } from '@tanstack/match-sorter-utils' +import type { ColumnDef, FilterFn } from '@tanstack/react-table' import { createColumnHelper, flexRender, getCoreRowModel, - useReactTable, - getFilteredRowModel, + getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, - getFacetedMinMaxValues, + getFilteredRowModel, getPaginationRowModel, - getSortedRowModel + getSortedRowModel, + useReactTable } from '@tanstack/react-table' -import type { ColumnDef, FilterFn } from '@tanstack/react-table' -import type { RankingInfo } from '@tanstack/match-sorter-utils' +import classnames from 'classnames' // Type Imports import type { ThemeColor } from '@core/types' @@ -36,7 +35,6 @@ import type { ThemeColor } from '@core/types' // Component Imports import CustomAvatar from '@core/components/mui/Avatar' import CustomTextField from '@core/components/mui/TextField' -import TablePaginationComponent from '@components/TablePaginationComponent' // Style Imports import tableStyles from '@core/styles/table.module.css' @@ -338,7 +336,7 @@ const ProjectListTable = () => { )} - } count={table.getFilteredRowModel().rows.length} rowsPerPage={table.getState().pagination.pageSize} @@ -346,7 +344,7 @@ const ProjectListTable = () => { onPageChange={(_, page) => { table.setPageIndex(page) }} - /> + /> */} ) } diff --git a/src/views/dashboards/analytics/ProjectsTable.tsx b/src/views/dashboards/analytics/ProjectsTable.tsx index 13f0a1a..315bebd 100644 --- a/src/views/dashboards/analytics/ProjectsTable.tsx +++ b/src/views/dashboards/analytics/ProjectsTable.tsx @@ -5,40 +5,38 @@ import { useEffect, useMemo, useState } from 'react' // MUI Imports import AvatarGroup from '@mui/material/AvatarGroup' -import Typography from '@mui/material/Typography' -import LinearProgress from '@mui/material/LinearProgress' import Card from '@mui/material/Card' -import Checkbox from '@mui/material/Checkbox' import CardHeader from '@mui/material/CardHeader' -import TablePagination from '@mui/material/TablePagination' +import Checkbox from '@mui/material/Checkbox' +import LinearProgress from '@mui/material/LinearProgress' import type { TextFieldProps } from '@mui/material/TextField' +import Typography from '@mui/material/Typography' // Third-party Imports -import classnames from 'classnames' +import type { RankingInfo } from '@tanstack/match-sorter-utils' import { rankItem } from '@tanstack/match-sorter-utils' +import type { ColumnDef, FilterFn } from '@tanstack/react-table' import { createColumnHelper, flexRender, getCoreRowModel, - useReactTable, - getFilteredRowModel, + getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, - getFacetedMinMaxValues, + getFilteredRowModel, getPaginationRowModel, - getSortedRowModel + getSortedRowModel, + useReactTable } from '@tanstack/react-table' -import type { ColumnDef, FilterFn } from '@tanstack/react-table' -import type { RankingInfo } from '@tanstack/match-sorter-utils' +import classnames from 'classnames' // Type Imports import type { ProjectTableRowType } from '@/types/pages/profileTypes' // Component Imports -import OptionMenu from '@core/components/option-menu' import CustomAvatar from '@core/components/mui/Avatar' import CustomTextField from '@core/components/mui/TextField' -import TablePaginationComponent from '@/components/TablePaginationComponent' +import OptionMenu from '@core/components/option-menu' // Style Imports import tableStyles from '@core/styles/table.module.css' @@ -273,7 +271,7 @@ const ProjectTables = ({ projectTable }: { projectTable?: ProjectTableRowType[] - } count={table.getFilteredRowModel().rows.length} @@ -282,7 +280,7 @@ const ProjectTables = ({ projectTable }: { projectTable?: ProjectTableRowType[] onPageChange={(_, page) => { table.setPageIndex(page) }} - /> + /> */} ) } diff --git a/src/views/pages/account-settings/billing-plans/InvoiceListTable.tsx b/src/views/pages/account-settings/billing-plans/InvoiceListTable.tsx index 90d9d0e..12d6bec 100644 --- a/src/views/pages/account-settings/billing-plans/InvoiceListTable.tsx +++ b/src/views/pages/account-settings/billing-plans/InvoiceListTable.tsx @@ -1,53 +1,51 @@ 'use client' // React Imports -import { useState, useEffect, useMemo } from 'react' +import { useEffect, useMemo, useState } from 'react' // Next Imports import Link from 'next/link' import { useParams } from 'next/navigation' // MUI Imports +import Button from '@mui/material/Button' import Card from '@mui/material/Card' import CardContent from '@mui/material/CardContent' -import Button from '@mui/material/Button' -import Typography from '@mui/material/Typography' import Checkbox from '@mui/material/Checkbox' import Chip from '@mui/material/Chip' import IconButton from '@mui/material/IconButton' import MenuItem from '@mui/material/MenuItem' -import Tooltip from '@mui/material/Tooltip' -import TablePagination from '@mui/material/TablePagination' import type { TextFieldProps } from '@mui/material/TextField' +import Tooltip from '@mui/material/Tooltip' +import Typography from '@mui/material/Typography' // Third-party Imports -import classnames from 'classnames' +import type { RankingInfo } from '@tanstack/match-sorter-utils' import { rankItem } from '@tanstack/match-sorter-utils' +import type { ColumnDef, FilterFn } from '@tanstack/react-table' import { createColumnHelper, flexRender, getCoreRowModel, - useReactTable, - getFilteredRowModel, + getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, - getFacetedMinMaxValues, + getFilteredRowModel, getPaginationRowModel, - getSortedRowModel + getSortedRowModel, + useReactTable } from '@tanstack/react-table' -import type { ColumnDef, FilterFn } from '@tanstack/react-table' -import type { RankingInfo } from '@tanstack/match-sorter-utils' +import classnames from 'classnames' // Type Imports -import type { ThemeColor } from '@core/types' import type { InvoiceType } from '@/types/apps/invoiceTypes' import type { Locale } from '@configs/i18n' +import type { ThemeColor } from '@core/types' // Component Imports -import OptionMenu from '@core/components/option-menu' import CustomAvatar from '@core/components/mui/Avatar' -import TablePaginationComponent from '@components/TablePaginationComponent' import CustomTextField from '@core/components/mui/TextField' +import OptionMenu from '@core/components/option-menu' // Util Imports import { getInitials } from '@/utils/getInitials' @@ -446,7 +444,7 @@ const InvoiceListTable = ({ invoiceData }: { invoiceData?: InvoiceType[] }) => { )} - } count={table.getFilteredRowModel().rows.length} rowsPerPage={table.getState().pagination.pageSize} @@ -455,7 +453,7 @@ const InvoiceListTable = ({ invoiceData }: { invoiceData?: InvoiceType[] }) => { table.setPageIndex(page) }} onRowsPerPageChange={e => table.setPageSize(Number(e.target.value))} - /> + /> */} ) } diff --git a/src/views/pages/user-profile/profile/ProjectsTables.tsx b/src/views/pages/user-profile/profile/ProjectsTables.tsx index 55c1169..987dbb1 100644 --- a/src/views/pages/user-profile/profile/ProjectsTables.tsx +++ b/src/views/pages/user-profile/profile/ProjectsTables.tsx @@ -5,40 +5,38 @@ import { useEffect, useMemo, useState } from 'react' // MUI Imports import AvatarGroup from '@mui/material/AvatarGroup' -import Typography from '@mui/material/Typography' -import LinearProgress from '@mui/material/LinearProgress' import Card from '@mui/material/Card' -import Checkbox from '@mui/material/Checkbox' import CardHeader from '@mui/material/CardHeader' -import TablePagination from '@mui/material/TablePagination' +import Checkbox from '@mui/material/Checkbox' +import LinearProgress from '@mui/material/LinearProgress' import type { TextFieldProps } from '@mui/material/TextField' +import Typography from '@mui/material/Typography' // Third-party Imports -import classnames from 'classnames' +import type { RankingInfo } from '@tanstack/match-sorter-utils' import { rankItem } from '@tanstack/match-sorter-utils' +import type { ColumnDef, FilterFn } from '@tanstack/react-table' import { createColumnHelper, flexRender, getCoreRowModel, - useReactTable, - getFilteredRowModel, + getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, - getFacetedMinMaxValues, + getFilteredRowModel, getPaginationRowModel, - getSortedRowModel + getSortedRowModel, + useReactTable } from '@tanstack/react-table' -import type { ColumnDef, FilterFn } from '@tanstack/react-table' -import type { RankingInfo } from '@tanstack/match-sorter-utils' +import classnames from 'classnames' // Type Imports import type { ProjectTableRowType } from '@/types/pages/profileTypes' // Component Imports -import OptionMenu from '@core/components/option-menu' import CustomAvatar from '@core/components/mui/Avatar' import CustomTextField from '@core/components/mui/TextField' -import TablePaginationComponent from '@/components/TablePaginationComponent' +import OptionMenu from '@core/components/option-menu' // Style Imports import tableStyles from '@core/styles/table.module.css' @@ -274,7 +272,7 @@ const ProjectTables = ({ projectTable }: { projectTable?: ProjectTableRowType[] - } count={table.getFilteredRowModel().rows.length} rowsPerPage={table.getState().pagination.pageSize} @@ -283,7 +281,7 @@ const ProjectTables = ({ projectTable }: { projectTable?: ProjectTableRowType[] table.setPageIndex(page) }} onRowsPerPageChange={e => table.setPageSize(Number(e.target.value))} - /> + /> */} ) } diff --git a/src/views/react-table/KitchenSink.tsx b/src/views/react-table/KitchenSink.tsx index c8173fd..ac124c1 100644 --- a/src/views/react-table/KitchenSink.tsx +++ b/src/views/react-table/KitchenSink.tsx @@ -6,32 +6,30 @@ import { useEffect, useMemo, useState } from 'react' // MUI Imports import Card from '@mui/material/Card' import CardHeader from '@mui/material/CardHeader' -import TablePagination from '@mui/material/TablePagination' import type { TextFieldProps } from '@mui/material/TextField' // Third-party Imports -import classnames from 'classnames' +import type { RankingInfo } from '@tanstack/match-sorter-utils' +import { rankItem } from '@tanstack/match-sorter-utils' +import type { Column, ColumnDef, ColumnFiltersState, FilterFn, Table } from '@tanstack/react-table' import { - useReactTable, + createColumnHelper, + flexRender, getCoreRowModel, - getFilteredRowModel, + getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, - getFacetedMinMaxValues, + getFilteredRowModel, getPaginationRowModel, getSortedRowModel, - flexRender, - createColumnHelper + useReactTable } from '@tanstack/react-table' -import { rankItem } from '@tanstack/match-sorter-utils' -import type { Column, Table, ColumnFiltersState, FilterFn, ColumnDef } from '@tanstack/react-table' -import type { RankingInfo } from '@tanstack/match-sorter-utils' +import classnames from 'classnames' // Type Imports import type { DataType } from './data' // Component Imports -import TablePaginationComponent from '@components/TablePaginationComponent' import CustomTextField from '@core/components/mui/TextField' // Icon Imports @@ -267,7 +265,7 @@ const KitchenSink = () => { )} - } count={table.getFilteredRowModel().rows.length} rowsPerPage={table.getState().pagination.pageSize} @@ -275,7 +273,7 @@ const KitchenSink = () => { onPageChange={(_, page) => { table.setPageIndex(page) }} - /> + /> */} ) }