diff --git a/src/config/api.config.ts b/src/config/api.config.ts
index 4025a2e..4df59e9 100644
--- a/src/config/api.config.ts
+++ b/src/config/api.config.ts
@@ -8,10 +8,12 @@ interface apiConfigProps {
nationality: string;
service_disbursement: string;
service_notification: string;
+ service_feedback: string;
}
const API_URL = import.meta.env.VITE_APP_API_URL;
const apiConfig: apiConfigProps = {
+ service_feedback: `${API_URL}/k`,
// service_dashboard: `${API_URL}${import.meta.env.VITE_ENV != 'development' ? '/d' : ''}`,
service_dashboard: `${API_URL}/d`,
service_customer: `${API_URL}/c`,
diff --git a/src/pages/members/feedback-member/FeedbackMember.tsx b/src/pages/members/feedback-member/FeedbackMember.tsx
new file mode 100644
index 0000000..d8d8810
--- /dev/null
+++ b/src/pages/members/feedback-member/FeedbackMember.tsx
@@ -0,0 +1,40 @@
+import { Container, DataGridInner } from '@/components';
+import { ManageFeedbackMemberProvider } from './hooks/ManageFeedbackMemberContext';
+// import EditDialog from './blocks/EditDialog';
+// import DeleteDialog from './blocks/DeleteDialog';
+import { Breadcrumbs, Link } from '@mui/material';
+import { Helmet } from 'react-helmet';
+
+const FeedbackMemberMaster = () => {
+ return (
+ <>
+ TPAY | Manage Provider
+
+
+ Manage Feedback Member
+
+
+ Dashboard
+
+
+
+ Member
+
+
+
+ Manage Feedback Member
+
+
+
+
+
+ {/*
+
+ */}
+
+
+ >
+ );
+};
+
+export default FeedbackMemberMaster;
diff --git a/src/pages/members/feedback-member/hooks/ManageFeedbackMemberContext.tsx b/src/pages/members/feedback-member/hooks/ManageFeedbackMemberContext.tsx
new file mode 100644
index 0000000..9e1a9de
--- /dev/null
+++ b/src/pages/members/feedback-member/hooks/ManageFeedbackMemberContext.tsx
@@ -0,0 +1,205 @@
+import { DataGridColumnHeader, DataGridProvider, KeenIcon } from '@/components';
+import { apiConfig } from '@/config/api.config';
+import { useCallApi } from '@/hooks';
+import { ColumnDef } from '@tanstack/react-table';
+import React, { createContext, useCallback, useMemo, useState } from 'react';
+import { Toaster } from 'sonner';
+// import ListToolbar from '../blocks/ListToolbar';
+
+interface feedbackProps {
+ id: string;
+ name: string;
+ description: string;
+ type: string;
+ status: string;
+ transactionTypeId: string;
+ agentId: string;
+}
+
+interface ContextProps {
+ feedback: feedbackProps[];
+ showEditDialog: boolean;
+ handleEditDialog: (show: boolean, selected_sucos: string | null) => void;
+ showAddDialog: boolean;
+ handleAddDialog: (show: boolean) => void;
+ showDeleteDialog: boolean;
+ handleDeleteDialog: (show: boolean, selected_sucos: string | null) => void;
+ selectedfeedback: string | null;
+ getfeedbackLists: (
+ limit: number,
+ page: number,
+ with_deleted: boolean,
+ order_field: any,
+ order_direction: any
+ ) => Promise<{ data: feedbackProps[]; totalCount: number } | undefined>;
+}
+
+const initialProps: ContextProps = {
+ feedback: [],
+ showEditDialog: false,
+ handleEditDialog: () => {},
+ showAddDialog: false,
+ handleAddDialog: () => {},
+ showDeleteDialog: false,
+ handleDeleteDialog: () => {},
+ selectedfeedback: null,
+ getfeedbackLists: async () => undefined
+};
+
+const ManageFeedbackMemberContext = createContext(initialProps);
+const API_URL = apiConfig.service_feedback;
+
+const ManageFeedbackMemberProvider = ({ children }: { children: React.ReactNode }) => {
+ const [feedback, setFeedback] = useState([]);
+ const [showAddDialog, setShowAddDialog] = useState(false);
+ const [showEditDialog, setShowEditDialog] = useState(false);
+ const [showDeleteDialog, setShowDeleteDialog] = useState(false);
+ const [selectedfeedback, setSelectedfeedback] = useState(null);
+ const { GetData } = useCallApi();
+
+ const handleAddDialog = useCallback((show: boolean) => {
+ setShowAddDialog(show);
+ }, []);
+
+ const handleEditDialog = useCallback((show: boolean, selected_feedback: string | null) => {
+ setShowEditDialog(show);
+ setSelectedfeedback(show ? selected_feedback : null);
+ }, []);
+
+ const handleDeleteDialog = useCallback((show: boolean, selected_feedback: string | null) => {
+ setShowDeleteDialog(show);
+ setSelectedfeedback(show ? selected_feedback : null);
+ }, []);
+
+ const columns = useMemo[]>(
+ () => [
+ {
+ accessorFn: (row) => row.feedback_notes,
+ id: 'feedback_notes',
+ header: ({ column }) => ,
+ enableSorting: false,
+ enableHiding: false,
+ meta: {
+ headerClassName: 'w-[250px]'
+ }
+ },
+ {
+ accessorFn: (row) => row.feedback_screenshot,
+ id: 'feedback_screenshot',
+ header: ({ column }) => ,
+ enableSorting: false,
+ enableHiding: false,
+ meta: {
+ headerClassName: 'w-[250px]'
+ }
+ },
+ {
+ accessorFn: (row) => row.review_notes,
+ id: 'review_notes',
+ header: ({ column }) => ,
+ enableSorting: false,
+ enableHiding: false,
+ meta: {
+ headerClassName: 'w-[250px]'
+ }
+ },
+ {
+ accessorFn: (row) => row.review_screenshot,
+ id: 'review_screenshot',
+ header: ({ column }) => ,
+ enableSorting: false,
+ enableHiding: false,
+ meta: {
+ headerClassName: 'w-[250px]'
+ }
+ }
+ // ,
+ // {
+ // id: 'actions',
+ // header: ({ column }) => ,
+ // enableSorting: false,
+ // enableHiding: false,
+ // cell: (data) => {
+ // const row = data.row.original;
+ // return (
+ // <>
+ //
+ //
+ // >
+ // );
+ // },
+ // meta: {
+ // headerClassName: 'w-[100px] text-center',
+ // cellClassName: 'text-center'
+ // }
+ // }
+ ],
+ [handleEditDialog, handleDeleteDialog]
+ );
+
+ const getfeedbackLists = async (page: number, limit: number, sorting: any, filter: any) => {
+ try {
+ sorting = sorting.length == 0 ? [{ id: 'name', desc: false }] : sorting;
+ filter = filter.length == 0 ? {} : { any: filter[0].value?.toLowerCase() };
+ const response = await GetData(`${API_URL}/feedback/list`, {
+ limit,
+ page: page + 1,
+ with_deleted: false,
+ order_field: sorting[0].id,
+ order_direction: sorting[0].desc == false ? 'ASC' : 'DESC',
+ // filter: JSON.stringify(filter)
+ });
+ console.log(response?.data);
+ setFeedback(response?.data.list);
+ return { data: response?.data.list, totalCount: response?.data.total_count };
+ } catch (error) {
+ console.error('Error fetching Feedback Member', error);
+ }
+ };
+
+
+ return (
+
+
+
+ }
+ layout={{ card: true }}
+ sorting={[{ id: 'created_at', desc: true }]}
+ serverSide={true}
+ onFetchData={({ pageIndex, pageSize, sorting, columnFilters }) =>
+ getfeedbackLists(pageIndex, pageSize, sorting, columnFilters)
+ }
+ >
+ {children}
+
+
+ );
+};
+
+export { ManageFeedbackMemberContext, ManageFeedbackMemberProvider};
+export type { feedbackProps };
diff --git a/src/pages/members/feedback-member/hooks/useManageFeedbackMemberContext.tsx b/src/pages/members/feedback-member/hooks/useManageFeedbackMemberContext.tsx
new file mode 100644
index 0000000..e45bbc7
--- /dev/null
+++ b/src/pages/members/feedback-member/hooks/useManageFeedbackMemberContext.tsx
@@ -0,0 +1,12 @@
+import { useContext } from 'react';
+import { ManageFeedbackMemberContext } from './ManageFeedbackMemberContext';
+
+const useManageProviderContext = () => {
+ const context = useContext(ManageFeedbackMemberContext);
+
+ if (!context) throw new Error('useManageProviderContext must be used within AuthProvider');
+
+ return context;
+};
+
+export { useManageProviderContext };
diff --git a/src/routing/AppRoutingSetup.tsx b/src/routing/AppRoutingSetup.tsx
index 786cd1e..fbb889e 100644
--- a/src/routing/AppRoutingSetup.tsx
+++ b/src/routing/AppRoutingSetup.tsx
@@ -42,9 +42,10 @@ import WalletRuleMaster from '@/pages/master/walletRule/WalletRuleMaster';
import WalletHistory from '@/pages/wallet/wallet-history/WalletHistory';
import WalletMaster from '@/pages/master/wallet/WalletMaster';
import CurrencyMaster from '@/pages/master/currency/CurrencyMaster';
+import FeedbackMemberMaster from '@/pages/members/feedback-member/FeedbackMember';
// DISBURSEMENT
-import HistoryTransactionDisbursement from '@/pages/disbursement/history-transaction/HistoryTransaction'
+import HistoryTransactionDisbursement from '@/pages/disbursement/history-transaction/HistoryTransaction';
// DISBURSEMENT
const AppRoutingSetup = (): ReactElement => {
@@ -84,6 +85,7 @@ const AppRoutingSetup = (): ReactElement => {
} />
} />
} />
+ } />
} />
@@ -98,8 +100,8 @@ const AppRoutingSetup = (): ReactElement => {
} />
} />
- } />
- } />
+ } />
+ } />
} />
} />
} />
@@ -112,9 +114,11 @@ const AppRoutingSetup = (): ReactElement => {
/>
{/* DISBURSEMENT */}
- } />
+ }
+ />
{/* DISBURSEMENT */}
-
} />