diff --git a/src/components/pages/inventory/adjustment/InventoryAdjustmentTable.tsx b/src/components/pages/inventory/adjustment/InventoryAdjustmentTable.tsx
index 0ae5034b..6d8a17e2 100644
--- a/src/components/pages/inventory/adjustment/InventoryAdjustmentTable.tsx
+++ b/src/components/pages/inventory/adjustment/InventoryAdjustmentTable.tsx
@@ -13,6 +13,7 @@ import { InventoryAdjustmentApi } from '@/services/api/inventory';
import { useTableFilter } from '@/services/hooks/useTableFilter';
import { InventoryAdjustment } from '@/types/api/inventory/adjustment';
import StatusBadge from '@/components/helper/StatusBadge';
+import InventoryAdjustmentTableSkeleton from '@/components/pages/inventory/adjustment/skeleton/InventoryAdjustmentTableSkeleton';
const InventoryAdjustmentTable = () => {
const {
@@ -192,38 +193,55 @@ const InventoryAdjustmentTable = () => {
{/* Table Section */}
-
- data={
- isResponseSuccess(inventoryAdjustments)
- ? inventoryAdjustments?.data
- : []
- }
- columns={inventoryAdjustmentsColumns}
- pageSize={tableFilterState.pageSize}
- page={
- isResponseSuccess(inventoryAdjustments)
- ? inventoryAdjustments?.meta?.page
- : 0
- }
- totalItems={
- isResponseSuccess(inventoryAdjustments)
- ? inventoryAdjustments?.meta?.total_results
- : 0
- }
- onPageChange={setPage}
- onPageSizeChange={setPageSize}
- isLoading={isLoading}
- sorting={sorting}
- setSorting={setSorting}
- className={{
- containerClassName: cn('p-3 mb-0', {
- 'w-full':
- isResponseSuccess(inventoryAdjustments) &&
- inventoryAdjustments?.data?.length === 0,
- }),
- headerColumnClassName: 'text-nowrap',
- }}
- />
+ {isLoading ? (
+
+
+
+ ) : !isResponseSuccess(inventoryAdjustments) ||
+ inventoryAdjustments.data?.length === 0 ? (
+
+
+ }
+ />
+
+ ) : (
+
+ data={
+ isResponseSuccess(inventoryAdjustments)
+ ? inventoryAdjustments?.data
+ : []
+ }
+ columns={inventoryAdjustmentsColumns}
+ pageSize={tableFilterState.pageSize}
+ page={
+ isResponseSuccess(inventoryAdjustments)
+ ? inventoryAdjustments?.meta?.page
+ : 0
+ }
+ totalItems={
+ isResponseSuccess(inventoryAdjustments)
+ ? inventoryAdjustments?.meta?.total_results
+ : 0
+ }
+ onPageChange={setPage}
+ onPageSizeChange={setPageSize}
+ isLoading={isLoading}
+ sorting={sorting}
+ setSorting={setSorting}
+ className={{
+ containerClassName: cn('p-3 mb-0'),
+ headerColumnClassName: 'text-nowrap',
+ }}
+ />
+ )}
);
diff --git a/src/components/pages/inventory/adjustment/skeleton/InventoryAdjustmentTableSkeleton.tsx b/src/components/pages/inventory/adjustment/skeleton/InventoryAdjustmentTableSkeleton.tsx
new file mode 100644
index 00000000..3473f996
--- /dev/null
+++ b/src/components/pages/inventory/adjustment/skeleton/InventoryAdjustmentTableSkeleton.tsx
@@ -0,0 +1,37 @@
+import DataStateSkeleton from '@/components/helper/skeleton/DataStateSkeleton';
+import Table from '@/components/Table';
+import { InventoryAdjustment } from '@/types/api/inventory/adjustment';
+import { ColumnDef } from '@tanstack/react-table';
+
+const InventoryAdjustmentTableSkeleton = ({
+ columns,
+ icon,
+ title = 'No Data Available',
+ subtitle = 'There is no inventory adjustment data displayed. Enter inventory adjustment data to get started.',
+}: {
+ columns: ColumnDef[];
+ icon: React.ReactNode;
+ title?: string;
+ subtitle?: string;
+}) => {
+ return (
+
+ );
+};
+
+export default InventoryAdjustmentTableSkeleton;
diff --git a/src/components/pages/inventory/movement/MovementTable.tsx b/src/components/pages/inventory/movement/MovementTable.tsx
index ab4f80d0..c85577de 100644
--- a/src/components/pages/inventory/movement/MovementTable.tsx
+++ b/src/components/pages/inventory/movement/MovementTable.tsx
@@ -16,6 +16,7 @@ import DebouncedTextInput from '@/components/input/DebouncedTextInput';
import RequirePermission from '@/components/helper/RequirePermission';
import PopoverButton from '@/components/popover/PopoverButton';
import PopoverContent from '@/components/popover/PopoverContent';
+import MovementTableSkeleton from '@/components/pages/inventory/movement/skeleton/MovementTableSkeleton';
const RowOptionsMenu = ({
popoverPosition = 'bottom',
@@ -198,27 +199,44 @@ const MovementTable = () => {
{/* Table Section */}
-
- data={isResponseSuccess(movements) ? movements?.data : []}
- columns={movementColumns}
- pageSize={tableFilterState.pageSize}
- page={isResponseSuccess(movements) ? movements?.meta?.page : 0}
- totalItems={
- isResponseSuccess(movements) ? movements?.meta?.total_results : 0
- }
- onPageChange={setPage}
- onPageSizeChange={setPageSize}
- isLoading={isLoading}
- sorting={sorting}
- setSorting={setSorting}
- className={{
- containerClassName: cn('p-3 mb-0', {
- 'w-full':
- isResponseSuccess(movements) && movements?.data?.length === 0,
- }),
- headerColumnClassName: 'text-nowrap',
- }}
- />
+ {isLoading ? (
+
+
+
+ ) : !isResponseSuccess(movements) || movements.data?.length === 0 ? (
+
+
+ }
+ />
+
+ ) : (
+
+ data={isResponseSuccess(movements) ? movements?.data : []}
+ columns={movementColumns}
+ pageSize={tableFilterState.pageSize}
+ page={isResponseSuccess(movements) ? movements?.meta?.page : 0}
+ totalItems={
+ isResponseSuccess(movements) ? movements?.meta?.total_results : 0
+ }
+ onPageChange={setPage}
+ onPageSizeChange={setPageSize}
+ isLoading={isLoading}
+ sorting={sorting}
+ setSorting={setSorting}
+ className={{
+ containerClassName: cn('p-3 mb-0'),
+ headerColumnClassName: 'text-nowrap',
+ }}
+ />
+ )}
);
diff --git a/src/components/pages/inventory/movement/skeleton/MovementTableSkeleton.tsx b/src/components/pages/inventory/movement/skeleton/MovementTableSkeleton.tsx
new file mode 100644
index 00000000..a3ba3c5a
--- /dev/null
+++ b/src/components/pages/inventory/movement/skeleton/MovementTableSkeleton.tsx
@@ -0,0 +1,37 @@
+import DataStateSkeleton from '@/components/helper/skeleton/DataStateSkeleton';
+import Table from '@/components/Table';
+import { Movement } from '@/types/api/inventory/movement';
+import { ColumnDef } from '@tanstack/react-table';
+
+const MovementTableSkeleton = ({
+ columns,
+ icon,
+ title = 'No Data Available',
+ subtitle = 'There is no movement data displayed. Enter movement data to get started.',
+}: {
+ columns: ColumnDef[];
+ icon: React.ReactNode;
+ title?: string;
+ subtitle?: string;
+}) => {
+ return (
+
+ );
+};
+
+export default MovementTableSkeleton;
diff --git a/src/components/pages/inventory/product/InventoryProductTable.tsx b/src/components/pages/inventory/product/InventoryProductTable.tsx
index cfbc284a..53d8fcb3 100644
--- a/src/components/pages/inventory/product/InventoryProductTable.tsx
+++ b/src/components/pages/inventory/product/InventoryProductTable.tsx
@@ -15,6 +15,7 @@ import { ChangeEventHandler, useMemo, useState } from 'react';
import useSWR from 'swr';
import PopoverButton from '@/components/popover/PopoverButton';
import PopoverContent from '@/components/popover/PopoverContent';
+import InventoryProductTableSkeleton from '@/components/pages/inventory/product/skeleton/InventoryProductTableSkeleton';
const RowOptionsMenu = ({
popoverPosition = 'bottom',
@@ -206,36 +207,55 @@ const InventoryProductTable = () => {
{/* Table Section */}
-
- data={
- isResponseSuccess(inventoryProducts) ? inventoryProducts?.data : []
- }
- columns={columns}
- pageSize={tableFilterState.pageSize}
- page={
- isResponseSuccess(inventoryProducts)
- ? inventoryProducts?.meta?.page
- : 0
- }
- totalItems={
- isResponseSuccess(inventoryProducts)
- ? inventoryProducts?.meta?.total_results
- : 0
- }
- onPageChange={setPage}
- onPageSizeChange={setPageSize}
- isLoading={isLoading}
- sorting={sorting}
- setSorting={setSorting}
- className={{
- containerClassName: cn('p-3 mb-0', {
- 'w-full':
- isResponseSuccess(inventoryProducts) &&
- inventoryProducts?.data?.length === 0,
- }),
- headerColumnClassName: 'text-nowrap',
- }}
- />
+ {isLoading ? (
+
+
+
+ ) : !isResponseSuccess(inventoryProducts) ||
+ inventoryProducts.data?.length === 0 ? (
+
+
+ }
+ />
+
+ ) : (
+
+ data={
+ isResponseSuccess(inventoryProducts)
+ ? inventoryProducts?.data
+ : []
+ }
+ columns={columns}
+ pageSize={tableFilterState.pageSize}
+ page={
+ isResponseSuccess(inventoryProducts)
+ ? inventoryProducts?.meta?.page
+ : 0
+ }
+ totalItems={
+ isResponseSuccess(inventoryProducts)
+ ? inventoryProducts?.meta?.total_results
+ : 0
+ }
+ onPageChange={setPage}
+ onPageSizeChange={setPageSize}
+ isLoading={isLoading}
+ sorting={sorting}
+ setSorting={setSorting}
+ className={{
+ containerClassName: cn('p-3 mb-0'),
+ headerColumnClassName: 'text-nowrap',
+ }}
+ />
+ )}
);
diff --git a/src/components/pages/inventory/product/skeleton/InventoryProductTableSkeleton.tsx b/src/components/pages/inventory/product/skeleton/InventoryProductTableSkeleton.tsx
new file mode 100644
index 00000000..9fe9cb51
--- /dev/null
+++ b/src/components/pages/inventory/product/skeleton/InventoryProductTableSkeleton.tsx
@@ -0,0 +1,37 @@
+import DataStateSkeleton from '@/components/helper/skeleton/DataStateSkeleton';
+import Table from '@/components/Table';
+import { InventoryProduct } from '@/types/api/inventory/product';
+import { ColumnDef } from '@tanstack/react-table';
+
+const InventoryProductTableSkeleton = ({
+ columns,
+ icon,
+ title = 'No Data Available',
+ subtitle = 'There is no inventory product data displayed. Enter inventory product data to get started.',
+}: {
+ columns: ColumnDef[];
+ icon: React.ReactNode;
+ title?: string;
+ subtitle?: string;
+}) => {
+ return (
+
+ );
+};
+
+export default InventoryProductTableSkeleton;