feat: integrate dimentorin pages with real API, convert modals to pages

Roadmap: integrated with /v1/landing/cms/roadmap API (was dummy data)
- Created roadmap service layer (types, API, hooks)
- List page with search/filter, create/edit as dedicated pages

Session: converted modal detail to dedicated /session-dimentorin/$id page
Users: converted modal detail/delete to dedicated /users-dimentorin/$id page

Deleted all dimentorin modal components (roadmap, session, users).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
maulanasdqn
2026-04-11 22:19:06 +07:00
co-authored by Claude Opus 4.6
parent 8749e83dad
commit b2ed098067
23 changed files with 968 additions and 766 deletions
+1
View File
@@ -12,6 +12,7 @@ export * from './permissions';
export * from './events';
export * from './testimonials';
export * from './sessions';
export * from './roadmap';
export interface ApiResponse<T> {
data: T;
+22
View File
@@ -0,0 +1,22 @@
import { api, ApiResponse } from '../index';
import type { TRoadmapListItem, TRoadmapDetailItem, TRoadmapCreateRequest, TRoadmapUpdateRequest } from '../../types/roadmap';
export const getRoadmapList = async (): Promise<TRoadmapListItem[]> => {
const response = await api.get<ApiResponse<TRoadmapListItem[]>>('/v1/landing/cms/roadmap');
return response.data.data;
};
export const createRoadmap = async (data: TRoadmapCreateRequest): Promise<TRoadmapDetailItem> => {
const response = await api.post<ApiResponse<TRoadmapDetailItem>>('/v1/landing/cms/roadmap/create', data);
return response.data.data;
};
export const updateRoadmap = async (id: string, data: TRoadmapUpdateRequest): Promise<TRoadmapDetailItem> => {
const response = await api.patch<ApiResponse<TRoadmapDetailItem>>(`/v1/landing/cms/roadmap/update/${id}`, data);
return response.data.data;
};
export const deleteRoadmap = async (id: string): Promise<{ message: string }> => {
const response = await api.delete<{ message: string }>(`/v1/landing/cms/roadmap/delete/${id}`);
return response.data;
};