This commit is contained in:
fro1991
2025-02-01 23:51:53 +07:00
parent d216a5bb8c
commit 76d65df562
19 changed files with 56 additions and 70 deletions

View File

@ -2,5 +2,6 @@ VITE_APP_NAME=tpay-dashboard-tl
VITE_APP_VERSION=1=9.1.1
GENERATE_SOURCEMAP=false
VITE_APP_API_URL=https://tpay.shiblysolution.id/api
# VITE_APP_API_URL=https://tpay.shiblysolution.id/api
VITE_APP_API_URL=http://127.0.0.1:4003/api
VITE_ENV=development

View File

@ -30,7 +30,7 @@ const getCurrentTimeJakarta = () => {
export async function doSaveLogActivity(payload: SaveLogsParams): Promise<ActionResponseTypes> {
try {
const token = JSON.parse(localStorage.getItem('brillian-bri-tl-auth-v1=9.1.1') || '{}');
const token = JSON.parse(localStorage.getItem(`${import.meta.env.VITE_APP_NAME}-auth-v${import.meta.env.VITE_APP_VERSION}`) || '{}');
const dtParams = {
...payload,

View File

@ -5,7 +5,7 @@ const API_URL = apiConfig.service_dashboard;
export async function doGetNavbarMenu(): Promise<ActionMenuReponseTypes> {
try {
const storedToken = localStorage.getItem('brillian-bri-tl-auth-v1=9.1.1');
const storedToken = localStorage.getItem(`${import.meta.env.VITE_APP_NAME}-auth-v${import.meta.env.VITE_APP_VERSION}`);
const token = storedToken ? JSON.parse(storedToken) : null;
if (!token) {

View File

@ -5,7 +5,7 @@ interface apiConfigProps {
const API_URL = import.meta.env.VITE_APP_API_URL;
const apiConfig: apiConfigProps = {
service_dashboard: `${API_URL}/d`,
service_dashboard: `${API_URL}${import.meta.env.VITE_ENV != 'development' ? '/d' : ""}`,
service_master_data: `${API_URL}/m`,
};

View File

@ -47,7 +47,7 @@ const ListToolBar = () => {
if (date?.from && date?.to) {
filters.push({
id: 'user_activity.created_at',
id: 'UserActivities.createdAt',
value: {
from: `${date.from.toISOString().split('T')[0]} 00:00:00`,
to: `${date.to.toISOString().split('T')[0]} 23:59:59`

View File

@ -43,12 +43,12 @@ const LogActivityContextProvider = ({ children }: { children: React.ReactNode })
const columns = useMemo<ColumnDef<any>[]>(
() => [
{
accessorFn: (row) => row.created_at,
id: 'created_at',
accessorFn: (row) => row.createdAt,
id: 'createdAt',
header: ({ column }) => <DataGridColumnHeader title="Timestamp" column={column} />,
enableSorting: true,
enableHiding: false,
cell: ({ row }) => moment(row.original.created_at).format('YYYY-MM-DD HH:mm:ss')
cell: ({ row }) => moment(row.original.createdAt).format('YYYY-MM-DD HH:mm:ss')
},
{
accessorFn: (row) => row.user.username,
@ -116,11 +116,15 @@ const LogActivityContextProvider = ({ children }: { children: React.ReactNode })
all_user = auth.role_name === 'Super Admin';
}
const user = localStorage.getItem('brillian-bri-tl-auth-v1=9.1.1');
console.log('filter :', filter);
const user = localStorage.getItem(
`${import.meta.env.VITE_APP_NAME}-auth-v${import.meta.env.VITE_APP_VERSION}`
);
const parsedUser = user ? JSON.parse(user) : null;
const desc = sorting.length > 0 ? sorting[0].desc : false;
sorting = [{ id: 'user_activity.created_at', desc }];
sorting = [{ id: 'UserActivities.createdAt', desc }];
let dataFilter: any = {};
@ -128,17 +132,17 @@ const LogActivityContextProvider = ({ children }: { children: React.ReactNode })
filter.forEach((f: any) => {
if (f.id === 'username') {
dataFilter['username'] = { like: f.value };
} else if (f.id === 'user_activity.created_at') {
dataFilter['user_activity.created_at'] = f.value;
} else if (f.id === 'UserActivities.createdAt') {
dataFilter['UserActivities.createdAt'] = f.value;
}
});
}
if (!dataFilter['user_activity.created_at']) {
if (!dataFilter['UserActivities.createdAt']) {
const defaultFrom = date?.from || new Date(new Date().setMonth(new Date().getMonth() - 1));
const defaultTo = date?.to || new Date();
dataFilter['user_activity.created_at'] = {
dataFilter['UserActivities.createdAt'] = {
from: `${format(defaultFrom, 'yyyy-MM-dd')} 00:00:00`,
to: `${format(defaultTo, 'yyyy-MM-dd')} 23:59:59`
};
@ -151,7 +155,7 @@ const LogActivityContextProvider = ({ children }: { children: React.ReactNode })
order_field: sorting[0].id,
order_direction: sorting[0].desc === false ? 'ASC' : 'DESC',
filter: JSON.stringify(dataFilter),
all_user: all_user
all_user
});
return { data: response?.data.list, totalCount: response?.data.total_count };
@ -160,39 +164,36 @@ const LogActivityContextProvider = ({ children }: { children: React.ReactNode })
);
const doExportData = async (sorting: any, filter: any) => {
const AUTH_LOCAL_STORAGE_KEY = `${import.meta.env.VITE_APP_NAME}-auth-v${import.meta.env.VITE_APP_VERSION}`;
const user = localStorage.getItem(
`${import.meta.env.VITE_APP_NAME}-auth-v${import.meta.env.VITE_APP_VERSION}`
);
const user = localStorage.getItem(AUTH_LOCAL_STORAGE_KEY);
const parsedUser = user ? JSON.parse(user) : null;
sorting = sorting.length === 0 ? [{ id: 'user_activity.created_at', desc: false }] : sorting;
sorting = sorting.length === 0 ? [{ id: 'UserActivities.createdAt', desc: false }] : sorting;
filter = filter && filter.length > 0 ? filter : [];
const auth = getAuth();
let all_user = false;
if (auth) {
all_user = auth.role_name === 'Super Admin';
}
let dataFilter: any = {};
if (filter && filter.length > 0) {
filter.forEach((f: any) => {
if (f.id === 'username') {
dataFilter['username'] = { like: f.value };
} else if (f.id === 'user_activity.created_at') {
dataFilter['user_activity.created_at'] = f.value;
} else if (f.id === 'UserActivities.createdAt') {
dataFilter['UserActivities.createdAt'] = f.value;
}
});
}
if (!dataFilter['user_activity.created_at']) {
if (!dataFilter['UserActivities.createdAt']) {
const defaultFrom = new Date(new Date().setMonth(new Date().getMonth() - 1));
const defaultTo = new Date();
dataFilter['user_activity.created_at'] = {
dataFilter['UserActivities.createdAt'] = {
from: `${format(defaultFrom, 'yyyy-MM-dd')} 00:00:00`,
to: `${format(defaultTo, 'yyyy-MM-dd')} 23:59:59`
};
}
let order = 'user_activity.created_at';
let order = 'UserActivities.createdAt';
let param = {
all_user: false,
// order_field: sorting[0].id,
@ -208,8 +209,8 @@ const LogActivityContextProvider = ({ children }: { children: React.ReactNode })
GetExportData(url, param, 'user_activity_export_');
const createActivity = {
module: 'Update Pengajuan Kredit',
description: `Export Pengajuan Kredit => Log Activity`,
module: 'Log Activity',
description: `Export => Log Activity`,
action: 'E'
};
doSaveLogActivity(createActivity);
@ -230,7 +231,7 @@ const LogActivityContextProvider = ({ children }: { children: React.ReactNode })
pagination={{ size: 10 }}
toolbar={<ListToolBar />}
layout={{ card: true }}
sorting={[{ id: 'UserActivity.created_at', desc: true }]}
sorting={[{ id: 'UserActivity.createdAt', desc: true }]}
serverSide={true}
onFetchData={({ pageIndex, pageSize, sorting, columnFilters }) =>
doGetListData(pageIndex, pageSize, sorting, columnFilters)

View File

@ -86,8 +86,7 @@ const AddDialog = () => {
const response = await PostData(`${API_URL}/user_role/create`, {
name: formField.name,
roles: selectMenus,
status: 'Y',
application: 'ukln'
status: 'Y'
});
if (response?.status) {
@ -97,7 +96,7 @@ const AddDialog = () => {
reload();
const createActivity = {
module: 'Manage Position',
description: `Create New User => ${formField.name}`,
description: `Create New Position => ${formField.name}`,
action: 'C'
};

View File

@ -1,12 +1,12 @@
import { Container, DataGridInner } from '@/components';
import { EditDialog } from './blocks';
import { ConfigUserContextProvider } from './hooks';
import { ManageUserContextProvider } from './hooks';
import { AddDialog } from './blocks/AddDialog';
import { DeleteDialog } from './blocks/DeleteDialog';
export default function ConfigUserPage() {
return (
<ConfigUserContextProvider>
<ManageUserContextProvider>
<Container>
<div className="grid gap-5 lg:gap-7.5">
<DataGridInner />
@ -15,6 +15,6 @@ export default function ConfigUserPage() {
<AddDialog />
<DeleteDialog />
</Container>
</ConfigUserContextProvider>
</ManageUserContextProvider>
);
}

View File

@ -50,22 +50,9 @@ const EditDialog = () => {
e.preventDefault();
const response = await PutData(`${API_URL}/user/update/${selectedUser}`, {
...formField,
id_role: undefined,
id_role_old: undefined
});
if (response?.status) {
if (formField.id_role_old != '') {
const responseUserDeleteRole = await PutData(
`${API_URL}/user/delete_role/${selectedUser}/${formField.id_role_old}`,
{}
);
}
const responseUserAddRole = await PutData(
`${API_URL}/user/add_role/${selectedUser}/${formField.id_role}`,
{}
);
setAlert((prev) => ({ ...prev, show: false, message: '' }));
handleEditDialog(false, null);
toast.success('Success Update User');
reload();
@ -86,15 +73,15 @@ const EditDialog = () => {
const doFetchUserData = useCallback(async (id: string) => {
const response = await GetData(`${API_URL}/user/detail/${id}`, { id });
if (response?.status) {
let id_role = response.data.roles;
let id_role = response.data.role.id || '';
setFormField((prev) => ({
...prev,
name: response.data.name,
username: response.data.username,
email: response.data.email,
id_role: id_role.length != 0 ? id_role[0].id : '',
id_role_old: id_role.length != 0 ? id_role[0].id : '',
id_role: id_role,
id_role_old: id_role,
status: response.data.status
}));
} else {

View File

@ -45,11 +45,11 @@ const initialProps: ContextProps = {
roles: []
};
const ConfigUserContext = createContext<ContextProps>(initialProps);
const ManageUserContext = createContext<ContextProps>(initialProps);
const API_URL = apiConfig.service_dashboard;
const ConfigUserContextProvider = ({ children }: { children: React.ReactNode }) => {
const ManageUserContextProvider = ({ children }: { children: React.ReactNode }) => {
/* state */
const [showEditDialog, setShowEditDialog] = useState(false);
const [showAddDialog, setShowAddDialog] = useState(false);
@ -104,18 +104,16 @@ const ConfigUserContextProvider = ({ children }: { children: React.ReactNode })
}
},
{
accessorFn: (row) => row.role_name,
accessorFn: (row) => row.role.name,
id: 'role_name',
header: ({ column }) => <DataGridColumnHeader title="Role Name" column={column} />,
enableSorting: false,
enableHiding: false,
cell: (data: any) => {
const { roles } = data.row.original;
const { role } = data.row.original;
console.log('role :', role);
let html = <p className="text-danger italic">Unassigned</p>;
for (let _role of roles) {
html = _role.name;
}
if (role && role.name) html = role.name;
return html;
},
meta: {
@ -214,7 +212,7 @@ const ConfigUserContextProvider = ({ children }: { children: React.ReactNode })
}, [fetchRoles]);
return (
<ConfigUserContext.Provider
<ManageUserContext.Provider
value={{
showEditDialog,
handleEditDialog,
@ -241,9 +239,9 @@ const ConfigUserContextProvider = ({ children }: { children: React.ReactNode })
>
{children}
</DataGridProvider>
</ConfigUserContext.Provider>
</ManageUserContext.Provider>
);
};
export { ConfigUserContextProvider, ConfigUserContext };
export { ManageUserContextProvider, ManageUserContext };
export type { SelectedUser };

View File

@ -0,0 +1,2 @@
export * from './ManageUserContext';
export * from './useManageUserContext';

View File

@ -1,8 +1,8 @@
import { useContext } from 'react';
import { ConfigUserContext } from './ConfigUserContext';
import { ManageUserContext } from './ManageUserContext';
const useUserContext = () => {
const context = useContext(ConfigUserContext);
const context = useContext(ManageUserContext);
if (!context) throw new Error('useUserContext must be used within AuthProvider');

View File

@ -1,2 +0,0 @@
export * from './ConfigUserContext';
export * from './useUserContext';

View File

@ -7,7 +7,7 @@ import { Demo2Layout } from '@/layouts/demo2';
import { ErrorsRouting } from '@/errors';
import DashboardHomePage from '@/pages/dashboards/home/DashboardHomePage';
import ConfigUserPage from '@/pages/settings/user/user/ConfigUserPage';
import ManageUserPage from '@/pages/settings/user/manage-user/ManageUserPage';
import LogActivityPage from '@/pages/settings/user/log-activity/LogActivityPage';
import ManagePositionPage from '@/pages/settings/user/manage-position/ManagePositionPage';
@ -20,7 +20,7 @@ const AppRoutingSetup = (): ReactElement => {
<Route path="/" element={<DashboardHomePage />} />
<Route path="/account/home/user-profile" element={<AccountUserProfilePage />} />
<Route path="/settings/user-management/manage-user" element={<ConfigUserPage />} />
<Route path="/settings/user-management/manage-user" element={<ManageUserPage />} />
<Route path="/settings/user-management/log-activity" element={<LogActivityPage />} />
<Route
path="/settings/user-management/manage-position"