restructure all folders and files

This commit is contained in:
hanif salafi 2025-05-27 05:39:54 +07:00
parent 82cccdf94f
commit 149b434d22
12266 changed files with 4026 additions and 3770 deletions

View File

@ -1,11 +0,0 @@
import ContentBlast from "@/components/form/broadcast/content-blast-form";
import SiteBreadcrumb from "@/components/site-breadcrumb";
export default function CreateEmailBlast() {
return (
<div>
<SiteBreadcrumb />
<ContentBlast type="email" />
</div>
);
}

View File

@ -1,11 +0,0 @@
import ContentBlast from "@/components/form/broadcast/content-blast-form";
import SiteBreadcrumb from "@/components/site-breadcrumb";
export default function CreateWABlast() {
return (
<div>
<SiteBreadcrumb />
<ContentBlast type="wa" />
</div>
);
}

View File

@ -1,19 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTaskTa from "@/components/form/task-ta/task-ta-form";
import FormAskExpert from "@/components/form/shared/ask-expert-form";
import FormDoItYourself from "@/components/form/shared/do-it-yourself-form";
import FormMediaOnline from "@/components/form/media-tracking/media-tracking-form";
const MediaOnlineCreatePage = () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormMediaOnline />
</div>
</div>
);
};
export default MediaOnlineCreatePage;

View File

@ -1,13 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import PerformancePolresViz from "@/components/visualization/performance-polres";
import PerformanceSatkerViz from "@/components/visualization/performance-satker";
export default function PerformanceSatker() {
return (
<div>
<SiteBreadcrumb />
<p className="font-semibold">PERFORMANCE KUMULATIF PER SATKER</p>
<PerformanceSatkerViz />
</div>
);
}

View File

@ -1,17 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormBlogDetail from "@/components/form/blog/blog--detail-form";
import FormSurvey from "@/components/landing-page/survey";
import FormSurveyDetail from "@/components/form/survey/survey-detail";
const SurveyDetailPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormSurveyDetail />
</div>
</div>
);
};
export default SurveyDetailPage;

View File

@ -1,9 +0,0 @@
import { redirect } from '@/components/navigation'
const ProjectPage = () => {
redirect('/app/projects/grid')
return null
}
export default ProjectPage

View File

@ -1,18 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormImage from "@/components/form/content/image-form";
import FormBlog from "@/components/form/blog/blog-form";
const BlogCreatePage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormBlog />
</div>
</div>
);
};
export default BlogCreatePage;

View File

@ -1,16 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormBlogDetail from "@/components/form/blog/blog--detail-form";
import FormSurveyDetailPage from "@/components/form/survey/survey-detail";
const BlogDetailPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormSurveyDetailPage />
</div>
</div>
);
};
export default BlogDetailPage;

View File

@ -1,16 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormImageDetail from "@/components/form/content/image-detail-form";
import FormAudioDetail from "@/components/form/content/audio-detail-form";
const AudioDetailPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormAudioDetail />
</div>
</div>
);
};
export default AudioDetailPage;

View File

@ -1,18 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormImageDetail from "@/components/form/content/image-detail-form";
import FormImageUpdate from "@/components/form/content/image-update-form";
import FormAudioUpdate from "@/components/form/content/audio-update-form";
import FormAudioSeo from "@/components/form/content/audio-update-seo";
const AudioUpdatePage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormAudioSeo />
</div>
</div>
);
};
export default AudioUpdatePage;

View File

@ -1,17 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormImageDetail from "@/components/form/content/image-detail-form";
import FormImageUpdate from "@/components/form/content/image-update-form";
import FormAudioUpdate from "@/components/form/content/audio-update-form";
const AudioUpdatePage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormAudioUpdate />
</div>
</div>
);
};
export default AudioUpdatePage;

View File

@ -1,17 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormImageDetail from "@/components/form/content/image-detail-form";
import FormImageUpdate from "@/components/form/content/image-update-form";
import FormImageSeo from "@/components/form/content/image-update-seo";
const ImageUpdateSeoPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormImageSeo />
</div>
</div>
);
};
export default ImageUpdateSeoPage;

View File

@ -1,16 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormImageDetail from "@/components/form/content/image-detail-form";
import FormImageUpdate from "@/components/form/content/image-update-form";
const ImageUpdatePage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormImageUpdate />
</div>
</div>
);
};
export default ImageUpdatePage;

View File

@ -1,16 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormImageDetail from "@/components/form/content/image-detail-form";
import FormConvertSPIT from "@/components/form/content/spit-convert-form";
const SPITConvertPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormConvertSPIT />
</div>
</div>
);
};
export default SPITConvertPage;

View File

@ -1,16 +0,0 @@
import FormAudio from "@/components/form/content/audio-form";
import FormTeks from "@/components/form/content/teks-form";
import SiteBreadcrumb from "@/components/site-breadcrumb";
const TeksCreatePage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormTeks />
</div>
</div>
);
};
export default TeksCreatePage;

View File

@ -1,16 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormImageDetail from "@/components/form/content/image-detail-form";
import FormTeksDetail from "@/components/form/content/teks-detail-form";
const TeksDetailPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormTeksDetail />
</div>
</div>
);
};
export default TeksDetailPage;

View File

@ -1,16 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTeksUpdate from "@/components/form/content/teks-update-form";
import FormTeksSeo from "@/components/form/content/teks-update-seo";
const TeksUpdatePage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormTeksSeo />
</div>
</div>
);
};
export default TeksUpdatePage;

View File

@ -1,17 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormImageDetail from "@/components/form/content/image-detail-form";
import FormImageUpdate from "@/components/form/content/image-update-form";
import FormTeksUpdate from "@/components/form/content/teks-update-form";
const TeksUpdatePage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormTeksUpdate />
</div>
</div>
);
};
export default TeksUpdatePage;

View File

@ -1,16 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormImageDetail from "@/components/form/content/image-detail-form";
import FormVideoDetail from "@/components/form/content/video-detail-form";
const VideoDetailPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormVideoDetail />
</div>
</div>
);
};
export default VideoDetailPage;

View File

@ -1,18 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormImageDetail from "@/components/form/content/image-detail-form";
import FormImageUpdate from "@/components/form/content/image-update-form";
import FormVideoUpdate from "@/components/form/content/video-update-form";
import FormVideoSeo from "@/components/form/content/video-update-seo";
const VideoUpdatePage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormVideoSeo />
</div>
</div>
);
};
export default VideoUpdatePage;

View File

@ -1,17 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormImageDetail from "@/components/form/content/image-detail-form";
import FormImageUpdate from "@/components/form/content/image-update-form";
import FormVideoUpdate from "@/components/form/content/video-update-form";
const VideoUpdatePage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormVideoUpdate />
</div>
</div>
);
};
export default VideoUpdatePage;

View File

@ -1,18 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormPressConference from "@/components/form/schedule/press-conference-form";
import FormEvent from "@/components/form/schedule/event-form";
const EventCreatePage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormEvent />
</div>
</div>
);
};
export default EventCreatePage;

View File

@ -1,22 +0,0 @@
"use client";
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormPressConference from "@/components/form/schedule/press-conference-form";
import FormDetailPressConference from "@/components/form/schedule/press-conference-detail-form";
import { useParams } from "next/navigation";
import { id } from "date-fns/locale";
import FormEventDetail from "@/components/form/schedule/event-detail-form";
const EventDetailPage = () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormEventDetail />
</div>
</div>
);
};
export default EventDetailPage;

View File

@ -1,23 +0,0 @@
"use client";
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormPressConference from "@/components/form/schedule/press-conference-form";
import FormDetailPressConference from "@/components/form/schedule/press-conference-detail-form";
import { useParams } from "next/navigation";
import { id } from "date-fns/locale";
import FormUpdatePressConference from "@/components/form/schedule/press-conference-update-form";
import FormEventUpdate from "@/components/form/schedule/event-update-form";
const EventUpdatePage = () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormEventUpdate />
</div>
</div>
);
};
export default EventUpdatePage;

View File

@ -1,22 +0,0 @@
"use client";
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormPressConference from "@/components/form/schedule/press-conference-form";
import FormDetailPressConference from "@/components/form/schedule/press-conference-detail-form";
import { useParams } from "next/navigation";
import { id } from "date-fns/locale";
import FormUpdatePressConference from "@/components/form/schedule/press-conference-update-form";
const PressConUpdatePage = () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormUpdatePressConference />
</div>
</div>
);
};
export default PressConUpdatePage;

View File

@ -1,18 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormPressConference from "@/components/form/schedule/press-conference-form";
import FormPressRelease from "@/components/form/schedule/pers-release-form";
const PressReleaseCreatePage = () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormPressRelease />
</div>
</div>
);
};
export default PressReleaseCreatePage;

View File

@ -1,17 +0,0 @@
"use client";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormDetailPressConference from "@/components/form/schedule/press-conference-detail-form";
import FormDetailPressRillis from "@/components/form/schedule/pers-release--detail-form";
const PressRilisDetailPage = () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormDetailPressRillis />
</div>
</div>
);
};
export default PressRilisDetailPage;

View File

@ -1,23 +0,0 @@
"use client";
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormPressConference from "@/components/form/schedule/press-conference-form";
import FormDetailPressConference from "@/components/form/schedule/press-conference-detail-form";
import { useParams } from "next/navigation";
import { id } from "date-fns/locale";
import FormUpdatePressConference from "@/components/form/schedule/press-conference-update-form";
import FormUpdatePressRelease from "@/components/form/schedule/pers-release--update-form";
const PressRilisUpdatePage = () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormUpdatePressRelease />
</div>
</div>
);
};
export default PressRilisUpdatePage;

View File

@ -1,18 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormTaskDetail from "@/components/form/task/task-detail-form";
import FormTaskTaDetail from "@/components/form/task-ta/task-ta-detail-form";
const TaskTaDetailPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormTaskTaDetail />
</div>
</div>
);
};
export default TaskTaDetailPage;

View File

@ -1,19 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormTaskDetail from "@/components/form/task/task-detail-form";
import FormTaskEdit from "@/components/form/task/task-edit-form";
import FormTaskTaEdit from "@/components/form/task-ta/task-ta-edit-form";
const TaskTaDetailPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormTaskTaEdit />
</div>
</div>
);
};
export default TaskTaDetailPage;

View File

@ -1,18 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormTaskDetail from "@/components/form/task/task-detail-form";
import FormTaskForward from "@/components/form/task/task-forward-form";
const TaskForwardPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormTaskForward />
</div>
</div>
);
};
export default TaskForwardPage;

View File

@ -1,18 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormTaskDetail from "@/components/form/task/task-detail-form";
import FormTaskEdit from "@/components/form/task/task-edit-form";
const TaskDetailPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormTaskEdit />
</div>
</div>
);
};
export default TaskDetailPage;

View File

@ -1,11 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import ContentProductionVisualization from "@/components/visualization/content-production";
export default function ContentProduction() {
return (
<div>
<SiteBreadcrumb />
<ContentProductionVisualization />
</div>
);
}

View File

@ -1,11 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import PatternRelationVisualization from "@/components/visualization/pattern-relation-viz";
export default function PatternRelation() {
return (
<div>
<SiteBreadcrumb />
<PatternRelationVisualization />
</div>
);
}

View File

@ -1,23 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import MountedProvider from "@/providers/mounted.provider";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<MountedProvider isProtected={true}>
<LayoutProvider>
<ThemeCustomize />
<DashCodeHeader />
<DashCodeSidebar />
<LayoutContentProvider>{children}</LayoutContentProvider>
<DashCodeFooter />
</LayoutProvider>
</MountedProvider>
);
};
export default layout;

View File

@ -1,19 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormTaskDetail from "@/components/form/task/task-detail-form";
import FormDetailInternal from "@/components/form/communication/internal-detail-form";
import FormDetailEscalation from "@/components/form/communication/escalation-detail-form";
const EscalationDetailPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormDetailEscalation />
</div>
</div>
);
};
export default EscalationDetailPage;

View File

@ -1,18 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormTaskDetail from "@/components/form/task/task-detail-form";
import FormDetailInternal from "@/components/form/communication/internal-detail-form";
const InternalDetailPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormDetailInternal />
</div>
</div>
);
};
export default InternalDetailPage;

View File

@ -1,19 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormTaskDetail from "@/components/form/task/task-detail-form";
import FormDetailInternal from "@/components/form/communication/internal-detail-form";
import FormEditInternal from "@/components/form/communication/internal-edit-form";
const InternalUpdatePage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormEditInternal />
</div>
</div>
);
};
export default InternalUpdatePage;

View File

@ -1,19 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTaskTa from "@/components/form/task-ta/task-ta-form";
import FormAskExpert from "@/components/form/shared/ask-expert-form";
import FormDoItYourself from "@/components/form/shared/do-it-yourself-form";
import FormAcceptAssignment from "@/components/form/shared/accept-assignment-form";
const AcceptAssignmentPage = () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormAcceptAssignment />
</div>
</div>
);
};
export default AcceptAssignmentPage;

View File

@ -1,18 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTaskTa from "@/components/form/task-ta/task-ta-form";
import FormAskExpert from "@/components/form/shared/ask-expert-form";
import FormDoItYourself from "@/components/form/shared/do-it-yourself-form";
const DoItYourselfCreatePage = () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormDoItYourself />
</div>
</div>
);
};
export default DoItYourselfCreatePage;

View File

@ -1,17 +0,0 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormBlogDetail from "@/components/form/blog/blog--detail-form";
import FormSurveyDetailPage from "@/components/form/survey/survey-detail";
import FormAccountReport from "@/components/form/account-report/account-report-form";
const AccountReportDetailPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormAccountReport />
</div>
</div>
);
};
export default AccountReportDetailPage;

View File

@ -1,21 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormTaskDetail from "@/components/form/task/task-detail-form";
import FormDetailInternal from "@/components/form/communication/internal-detail-form";
import FormDetailEscalation from "@/components/form/communication/escalation-detail-form";
import FormQuestionsForward from "@/components/form/communication/escalation-forward-form";
import FormQuestionsDetail from "@/components/form/communication/escalation-detail-new-form";
const EscalationDetailPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormQuestionsDetail />
</div>
</div>
);
};
export default EscalationDetailPage;

View File

@ -1,20 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormTaskDetail from "@/components/form/task/task-detail-form";
import FormDetailInternal from "@/components/form/communication/internal-detail-form";
import FormDetailEscalation from "@/components/form/communication/escalation-detail-form";
import FormQuestionsForward from "@/components/form/communication/escalation-forward-form";
const EscalationForwardPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormQuestionsForward />
</div>
</div>
);
};
export default EscalationForwardPage;

View File

@ -1,19 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormTaskDetail from "@/components/form/task/task-detail-form";
import FormDetailInternal from "@/components/form/communication/internal-detail-form";
import FormDetailEscalation from "@/components/form/communication/escalation-detail-form";
const EscalationDetailPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormDetailEscalation />
</div>
</div>
);
};
export default EscalationDetailPage;

View File

@ -1,18 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormTaskDetail from "@/components/form/task/task-detail-form";
import FormDetailInternal from "@/components/form/communication/internal-detail-form";
const InternalDetailPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormDetailInternal />
</div>
</div>
);
};
export default InternalDetailPage;

View File

@ -1,19 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormTaskDetail from "@/components/form/task/task-detail-form";
import FormDetailInternal from "@/components/form/communication/internal-detail-form";
import FormEditInternal from "@/components/form/communication/internal-edit-form";
const InternalUpdatePage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormEditInternal />
</div>
</div>
);
};
export default InternalUpdatePage;

View File

@ -1,20 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormTaskDetail from "@/components/form/task/task-detail-form";
import FormDetailInternal from "@/components/form/communication/internal-detail-form";
import FormDetailTicketing from "@/components/form/ticketing/ticketing-detail-form";
import FormQuestionsReply from "@/components/form/communication/questions-reply-form";
const QuestionsReplyPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormQuestionsReply />
</div>
</div>
);
};
export default QuestionsReplyPage;

View File

@ -1,19 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormTaskDetail from "@/components/form/task/task-detail-form";
import FormDetailInternal from "@/components/form/communication/internal-detail-form";
import FormDetailTicketing from "@/components/form/ticketing/ticketing-detail-form";
const TicketingDetailPage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormDetailTicketing />
</div>
</div>
);
};
export default TicketingDetailPage;

View File

@ -1,20 +0,0 @@
import { Card, CardContent } from "@/components/ui/card";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import FormTask from "@/components/form/task/task-form";
import FormTaskDetail from "@/components/form/task/task-detail-form";
import FormDetailInternal from "@/components/form/communication/internal-detail-form";
import FormDetailTicketing from "@/components/form/ticketing/ticketing-detail-form";
import FormUpdateTicketing from "@/components/form/ticketing/ticketing-update-form";
const TicketingUpdatePage = async () => {
return (
<div>
<SiteBreadcrumb />
<div className="space-y-4">
<FormUpdateTicketing />
</div>
</div>
);
};
export default TicketingUpdatePage;

View File

@ -1,37 +0,0 @@
"use client";
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
import NavbarKaltara from "@/components/landing-page/landing-polda-kaltara/navbar-polda-kaltara";
import { useParams } from "next/navigation";
import ContactUsKaltara from "@/components/landing-page/landing-polda-kaltara/contact-us-kaltara";
import NewsTickerKaltara from "../../../tbnews/[polda_name]/components/news-tickers-kaltara";
const layout = ({ children }: { children: React.ReactNode }) => {
const params = useParams();
const poldaName: any = params?.polda_name;
return poldaName === "kaltara" ? (
<>
<NavbarKaltara />
{children}
<ContactUsKaltara />
<NewsTickerKaltara />
</>
) : (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,37 +0,0 @@
"use client";
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
import NavbarKaltara from "@/components/landing-page/landing-polda-kaltara/navbar-polda-kaltara";
import { useParams } from "next/navigation";
import ContactUsKaltara from "@/components/landing-page/landing-polda-kaltara/contact-us-kaltara";
import NewsTickerKaltara from "../../../tbnews/[polda_name]/components/news-tickers-kaltara";
const layout = ({ children }: { children: React.ReactNode }) => {
const params = useParams();
const poldaName: any = params?.polda_name;
return poldaName === "kaltara" ? (
<>
<NavbarKaltara />
{children}
<ContactUsKaltara />
<NewsTickerKaltara />
</>
) : (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,37 +0,0 @@
"use client";
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
import NavbarKaltara from "@/components/landing-page/landing-polda-kaltara/navbar-polda-kaltara";
import { useParams } from "next/navigation";
import ContactUsKaltara from "@/components/landing-page/landing-polda-kaltara/contact-us-kaltara";
import NewsTickerKaltara from "../../../tbnews/[polda_name]/components/news-tickers-kaltara";
const layout = ({ children }: { children: React.ReactNode }) => {
const params = useParams();
const poldaName: any = params?.polda_name;
return poldaName === "kaltara" ? (
<>
<NavbarKaltara />
{children}
<ContactUsKaltara />
<NewsTickerKaltara />
</>
) : (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,20 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
{children}
</>
);
};
export default layout;

View File

@ -1,30 +0,0 @@
"use client";
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
import NavbarKaltara from "@/components/landing-page/landing-polda-kaltara/navbar-polda-kaltara";
import { useParams } from "next/navigation";
const layout = ({ children }: { children: React.ReactNode }) => {
const params = useParams();
const poldaName: any = params?.polda_name;
return poldaName === "kaltara" ? (
children
) : (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,43 +0,0 @@
"use client";
import ContentCategory from "@/components/landing-page/content-category";
import HeaderBanner from "@/components/landing-page/header-banner";
import NewContent from "@/components/landing-page/new-content";
import WelcomePolda from "@/components/landing-page/welcome-polda";
import React from "react";
import { useParams } from "next/navigation";
import NavbarKaltara from "@/components/landing-page/landing-polda-kaltara/navbar-polda-kaltara";
import HeaderBannerKaltara from "@/components/landing-page/landing-polda-kaltara/header-banner-kaltara";
import SearchSectionKaltara from "@/components/landing-page/landing-polda-kaltara/search-section-kaltara";
import LatestContentKaltara from "@/components/landing-page/landing-polda-kaltara/latest-content-kaltara";
import ContactUsKaltara from "@/components/landing-page/landing-polda-kaltara/contact-us-kaltara";
import NewsTickerKaltara from "../../tbnews/[polda_name]/components/news-tickers-kaltara";
import ContentCategoryKaltara from "@/components/landing-page/landing-polda-kaltara/content-category-kaltara";
const page = () => {
const params = useParams();
const poldaName: any = params?.polda_name;
return poldaName === "kaltara" ? (
<div>
<NavbarKaltara />
<HeaderBannerKaltara />
{/* <SearchSectionKaltara /> */}
<WelcomePolda />
<LatestContentKaltara group="polda" type="latest" />
<LatestContentKaltara group="polda" type="popular" />
<ContentCategoryKaltara type="" group="polda" />
<ContactUsKaltara />
<NewsTickerKaltara />
</div>
) : (
<div>
<HeaderBanner />
<WelcomePolda />
<NewContent group="polda" type="latest" />
<NewContent group="polda" type="popular" />
<ContentCategory type="" group="polda" />
</div>
);
};
export default page;

View File

@ -1,20 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
{children}
</>
);
};
export default layout;

View File

@ -1,37 +0,0 @@
"use client";
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
import NavbarKaltara from "@/components/landing-page/landing-polda-kaltara/navbar-polda-kaltara";
import { useParams } from "next/navigation";
import ContactUsKaltara from "@/components/landing-page/landing-polda-kaltara/contact-us-kaltara";
import NewsTickerKaltara from "../../../tbnews/[polda_name]/components/news-tickers-kaltara";
const layout = ({ children }: { children: React.ReactNode }) => {
const params = useParams();
const poldaName: any = params?.polda_name;
return poldaName === "kaltara" ? (
<>
<NavbarKaltara />
{children}
<ContactUsKaltara />
<NewsTickerKaltara />
</>
) : (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,20 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
{children}
</>
);
};
export default layout;

View File

@ -1,20 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
{children}
</>
);
};
export default layout;

View File

@ -1,20 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
{children}
</>
);
};
export default layout;

View File

@ -1,20 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
{children}
</>
);
};
export default layout;

View File

@ -1,20 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
{children}
</>
);
};
export default layout;

View File

@ -1,22 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,22 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,22 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Navbar from "@/components/landing-page/navbar";
import Footer from "@/components/landing-page/footer";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,23 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,22 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,22 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Navbar from "@/components/landing-page/navbar";
import Footer from "@/components/landing-page/footer";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,22 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Navbar from "@/components/landing-page/navbar";
import Footer from "@/components/landing-page/footer";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,22 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,22 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,20 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import MountedProvider from "@/providers/mounted.provider";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<MountedProvider
isProtected={false}
>
{children}
</MountedProvider>
);
};
export default layout;

View File

@ -1,22 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,22 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,22 +0,0 @@
import LayoutProvider from "@/providers/layout.provider";
import LayoutContentProvider from "@/providers/content.provider";
import DashCodeSidebar from "@/components/partials/sidebar";
import DashCodeFooter from "@/components/partials/footer";
import ThemeCustomize from "@/components/partials/customizer";
import DashCodeHeader from "@/components/partials/header";
import { redirect } from "@/components/navigation";
import Footer from "@/components/landing-page/footer";
import Navbar from "@/components/landing-page/navbar";
const layout = async ({ children }: { children: React.ReactNode }) => {
return (
<>
<Navbar />
{children}
<Footer />
</>
);
};
export default layout;

View File

@ -1,35 +0,0 @@
"use client";
import SearchSection from "@/components/landing-page/search-section";
import NewContent from "@/components/landing-page/new-content";
import PopularContent from "@/components/landing-page/popular-content";
import ContentCategory from "@/components/landing-page/content-category";
import Coverage from "@/components/landing-page/coverage";
import Hero from "@/components/landing-page/hero";
import Footer from "@/components/landing-page/footer";
import Division from "@/components/landing-page/division";
import Navbar from "@/components/landing-page/navbar";
import { ReactLenis } from "@studio-freight/react-lenis";
import MountedProvider from "@/providers/mounted.provider";
import NewsTicker from "@/components/landing-page/news-tickers";
import AreaCoverageWorkUnits from "@/components/landing-page/area-coverage-and-work-units";
import HeroNew from "@/components/landing-page/hero-new";
const Home = ({ params: { locale } }: { params: { locale: string } }) => {
return (
<MountedProvider isProtected={false}>
<ReactLenis root>
<div className="">
<Navbar />
<HeroNew group="mabes" />
<div className="flex-1 ">
<SearchSection />
</div>
<Footer />
</div>
</ReactLenis>
</MountedProvider>
);
};
export default Home;

View File

@ -12,6 +12,6 @@
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils"
"utils": "@/lib/utils/utils"
}
}

View File

@ -1,27 +1,13 @@
import createMiddleware from "next-intl/middleware";
import { NextRequest, NextResponse } from "next/server";
import { locales } from "@/config";
import { routing } from "./i18n/routing";
import { locales, defaultLocale } from "@/config/locales";
// export default async function middleware(request: NextRequest) {
// // Step 1: Use the incoming request (example)
// const defaultLocale = "in";
// // const defaultLocale = request.headers.get("dashcode-locale") || "in";
// // Step 2: Create and call the next-intl middleware (example)
// const handleI18nRouting = createMiddleware({
// locales: ["in", "en"],
// defaultLocale: "in",
// });
// const response = handleI18nRouting(request);
// // Step 3: Alter the response (example)
// response.headers.set("dashcode-locale", defaultLocale);
// return response;
// }
export default createMiddleware(routing);
// This middleware intercepts requests and handles locale-based routing
export default createMiddleware({
locales,
defaultLocale,
// Always require a locale prefix
localePrefix: 'always'
});
export const config = {
// Match only internationalized pathnames

View File

@ -43,10 +43,6 @@ const nextConfig = {
hostname: "i.pravatar.cc",
},
{ protocol: "https", hostname: "netidhub.com" },
{
protocol: "https",
hostname: "netidhub.com",
},
],
},
// eslint: {

55
package-lock.json generated
View File

@ -73,7 +73,7 @@
"axios": "^1.7.8",
"chart": "^0.1.2",
"chart.js": "^4.4.3",
"ckeditor5-custom-build": "file:vendor/ckeditor5",
"ckeditor5-custom-build": "file:src/vendor/ckeditor5",
"class-variance-authority": "^0.7.0",
"cleave.js": "^1.6.0",
"clsx": "^2.1.1",
@ -5891,7 +5891,7 @@
}
},
"node_modules/ckeditor5-custom-build": {
"resolved": "vendor/ckeditor5",
"resolved": "src/vendor/ckeditor5",
"link": true
},
"node_modules/class-variance-authority": {
@ -19544,8 +19544,7 @@
"url": "https://github.com/sponsors/wooorm"
}
},
"vendor/ckeditor5": {
"name": "ckeditor5-custom-build",
"src/vendor/ckeditor5": {
"version": "0.0.1",
"license": "SEE LICENSE IN LICENSE.md",
"dependencies": {
@ -19589,7 +19588,7 @@
"webpack-cli": "^4.10.0"
}
},
"vendor/ckeditor5/node_modules/typescript": {
"src/vendor/ckeditor5/node_modules/typescript": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
"integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
@ -19601,6 +19600,52 @@
"engines": {
"node": ">=12.20"
}
},
"vendor/ckeditor5": {
"name": "ckeditor5-custom-build",
"version": "0.0.1",
"extraneous": true,
"license": "SEE LICENSE IN LICENSE.md",
"dependencies": {
"@ckeditor/ckeditor5-alignment": "41.3.1",
"@ckeditor/ckeditor5-autoformat": "41.3.1",
"@ckeditor/ckeditor5-basic-styles": "41.3.1",
"@ckeditor/ckeditor5-block-quote": "41.3.1",
"@ckeditor/ckeditor5-cloud-services": "41.3.1",
"@ckeditor/ckeditor5-code-block": "41.3.1",
"@ckeditor/ckeditor5-editor-classic": "41.3.1",
"@ckeditor/ckeditor5-essentials": "41.3.1",
"@ckeditor/ckeditor5-font": "41.3.1",
"@ckeditor/ckeditor5-heading": "41.3.1",
"@ckeditor/ckeditor5-image": "41.3.1",
"@ckeditor/ckeditor5-indent": "41.3.1",
"@ckeditor/ckeditor5-link": "41.3.1",
"@ckeditor/ckeditor5-list": "41.3.1",
"@ckeditor/ckeditor5-media-embed": "41.3.1",
"@ckeditor/ckeditor5-paragraph": "41.3.1",
"@ckeditor/ckeditor5-paste-from-office": "41.3.1",
"@ckeditor/ckeditor5-source-editing": "41.3.1",
"@ckeditor/ckeditor5-table": "41.3.1",
"@ckeditor/ckeditor5-typing": "41.3.1",
"@ckeditor/ckeditor5-undo": "41.3.1",
"@ckeditor/ckeditor5-upload": "41.3.1"
},
"devDependencies": {
"@ckeditor/ckeditor5-core": "41.3.1",
"@ckeditor/ckeditor5-dev-translations": "^32.1.2",
"@ckeditor/ckeditor5-dev-utils": "^32.1.2",
"@ckeditor/ckeditor5-theme-lark": "41.3.1",
"css-loader": "^5.2.7",
"postcss": "^8.4.38",
"postcss-loader": "^4.3.0",
"raw-loader": "^4.0.2",
"style-loader": "^2.0.0",
"terser-webpack-plugin": "^4.2.3",
"ts-loader": "^9.5.1",
"typescript": "5.0.4",
"webpack": "^5.91.0",
"webpack-cli": "^4.10.0"
}
}
}
}

View File

@ -74,7 +74,7 @@
"axios": "^1.7.8",
"chart": "^0.1.2",
"chart.js": "^4.4.3",
"ckeditor5-custom-build": "file:vendor/ckeditor5",
"ckeditor5-custom-build": "file:src/vendor/ckeditor5",
"class-variance-authority": "^0.7.0",
"cleave.js": "^1.6.0",
"clsx": "^2.1.1",

99
src/README.md Normal file
View File

@ -0,0 +1,99 @@
# Project Structure
```
src/
├── app/ # Next.js App Router pages and layouts
│ ├── (auth)/ # Authentication required routes
│ ├── (public)/ # Public routes
│ └── layout.tsx # Root layout
├── components/ # React components
│ ├── ui/ # Reusable UI components (buttons, inputs, etc.)
│ │ ├── button/
│ │ ├── form/
│ │ └── layout/
│ └── features/ # Feature-specific components
│ ├── auth/
│ ├── media/
│ └── tracking/
├── lib/ # Shared utilities and core functionality
│ ├── api/ # API related code
│ │ ├── client.ts
│ │ └── endpoints.ts
│ ├── auth/ # Authentication utilities
│ ├── utils/ # General utilities
│ ├── hooks/ # Shared React hooks
│ ├── constants/ # Application constants
│ └── types/ # TypeScript type definitions
├── styles/ # Global styles and theme configuration
│ ├── globals.css
│ └── theme/
├── config/ # Application configuration
│ ├── env.ts
│ └── site.ts
└── i18n/ # Internationalization
├── locales/
└── config.ts
```
## Directory Purposes
### app/
- Contains Next.js App Router pages and layouts
- Organized by route groups and features
- Each route can have its own loading, error, and layout components
### components/
- `ui/`: Reusable UI components that are not specific to any feature
- `features/`: Components that are specific to features/domains of the application
### lib/
- Shared utilities and core functionality
- No component logic, only pure functions and utilities
- Organized by domain (api, auth, etc.)
### styles/
- Global styles and theme configuration
- CSS modules and styled components
- Theme variables and configurations
### config/
- Application-wide configuration
- Environment variables
- Site metadata
### i18n/
- Internationalization configuration
- Translation files
- Language utilities
## Best Practices
1. **Component Organization**
- Keep components small and focused
- Use index.ts files for clean exports
- Co-locate tests with components
2. **Code Splitting**
- Use dynamic imports for large components
- Lazy load routes and features
- Keep bundle sizes small
3. **Type Safety**
- Use TypeScript strictly
- Define types in appropriate domains
- Share types across related features
4. **State Management**
- Use React Context for global state
- Keep state close to where it's used
- Avoid prop drilling
5. **Testing**
- Co-locate tests with implementation
- Use meaningful test descriptions
- Test user interactions and edge cases

View File

@ -2,7 +2,7 @@ import * as React from "react";
import { ColumnDef } from "@tanstack/react-table";
import { Eye, MoreVertical, SquarePen, Trash2 } from "lucide-react";
import { cn } from "@/lib/utils";
import { cn } from "@/lib/utils/utils"
import {
DropdownMenu,
DropdownMenuContent,
@ -15,7 +15,7 @@ import {
formatDateToIndonesian,
getOnlyDate,
htmlToString,
} from "@/utils/globals";
} from "@/lib/utils/globals";
import { Link, useRouter } from "@/i18n/routing";
import {
Accordion,

View File

@ -25,7 +25,7 @@ import {
TableRow,
} from "@/components/ui/table";
import { UserIcon } from "lucide-react";
import { cn } from "@/lib/utils";
import { cn } from "@/lib/utils/utils"
import {
DropdownMenu,
DropdownMenuContent,
@ -36,24 +36,24 @@ import {
} from "@/components/ui/dropdown-menu";
import { Input } from "@/components/ui/input";
import { InputGroup, InputGroupText } from "@/components/ui/input-group";
import { paginationBlog } from "@/service/blog/blog";
import { ticketingPagination } from "@/service/ticketing/ticketing";
import { paginationBlog } from "@/lib/services/blog/blog";
import { ticketingPagination } from "@/lib/services/ticketing/ticketing";
import { Badge } from "@/components/ui/badge";
import { useRouter, useSearchParams } from "next/navigation";
import TablePagination from "@/components/table/table-pagination";
import TablePagination from "@/components/features/table/table-pagination";
import columns from "./column";
import { getPlanningPagination } from "@/service/agenda-setting/agenda-setting";
import { getPlanningPagination } from "@/lib/services/agenda-setting/agenda-setting";
import {
Popover,
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
import { listDataMedia } from "@/service/broadcast/broadcast";
import { listEnableCategory } from "@/service/content/content";
import { listDataMedia } from "@/lib/services/broadcast/broadcast";
import { listEnableCategory } from "@/lib/services/content/content";
import { Checkbox } from "@/components/ui/checkbox";
import { close, loading } from "@/config/swal";
import { Link } from "@/i18n/routing";
import { listDataExperts } from "@/service/experts/experts";
import { listDataExperts } from "@/lib/services/experts/experts";
const dummyData = [
{

View File

@ -1,5 +1,5 @@
"use client";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import SiteBreadcrumb from "@/components/ui/structures/site-breadcrumb";
import { Button } from "@/components/ui/button";
import {
Form,
@ -30,7 +30,7 @@ import {
getListExperiences,
saveUserInternal,
saveUserRolePlacements,
} from "@/service/management-user/management-user";
} from "@/lib/services/management-user/management-user";
import { loading } from "@/config/swal";
import { Eye, EyeOff } from "lucide-react";

View File

@ -1,4 +1,4 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import SiteBreadcrumb from "@/components/ui/structures/site-breadcrumb";
import AddExpertTable from "./component/table";
export default function AddExpert() {

View File

@ -1,5 +1,5 @@
"use client";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import SiteBreadcrumb from "@/components/ui/structures/site-breadcrumb";
import {
Accordion,
AccordionContent,
@ -11,7 +11,7 @@ import { addDays, format } from "date-fns";
import { Calendar as CalendarIcon } from "lucide-react";
import { DateRange } from "react-day-picker";
import Cookies from "js-cookie";
import { cn, getCookiesDecrypt } from "@/lib/utils";
import { cn, getCookiesDecrypt } from "@/lib/utils/utils";
import { Button } from "@/components/ui/button";
import { Calendar } from "@/components/ui/calendar";
import {
@ -19,7 +19,7 @@ import {
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
import { generateTicket } from "@/service/tableau/tableau-service";
import { generateTicket } from "@/lib/services/tableau/tableau-service";
const users = [
{ id: 1, name: "POLRI" },

View File

@ -1,5 +1,5 @@
"use client";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import SiteBreadcrumb from "@/components/ui/structures/site-breadcrumb";
import {
Accordion,
AccordionContent,
@ -11,7 +11,7 @@ import { addDays, format } from "date-fns";
import { Calendar as CalendarIcon } from "lucide-react";
import { DateRange } from "react-day-picker";
import Cookies from "js-cookie";
import { cn, getCookiesDecrypt } from "@/lib/utils";
import { cn, getCookiesDecrypt } from "@/lib/utils/utils";
import { Button } from "@/components/ui/button";
import { Calendar } from "@/components/ui/calendar";
import {
@ -19,7 +19,7 @@ import {
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
import { generateTicket } from "@/service/tableau/tableau-service";
import { generateTicket } from "@/lib/services/tableau/tableau-service";
const users = [
{ id: 1, name: "POLRI" },

View File

@ -1,5 +1,5 @@
"use client";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import SiteBreadcrumb from "@/components/ui/structures/site-breadcrumb";
import {
Accordion,
AccordionContent,
@ -11,7 +11,7 @@ import { addDays, format } from "date-fns";
import { Calendar as CalendarIcon } from "lucide-react";
import { DateRange } from "react-day-picker";
import Cookies from "js-cookie";
import { cn, getCookiesDecrypt } from "@/lib/utils";
import { cn, getCookiesDecrypt } from "@/lib/utils/utils";
import { Button } from "@/components/ui/button";
import { Calendar } from "@/components/ui/calendar";
import {
@ -19,7 +19,7 @@ import {
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
import { generateTicket } from "@/service/tableau/tableau-service";
import { generateTicket } from "@/lib/services/tableau/tableau-service";
const users = [
{ id: 1, name: "POLRI" },

View File

@ -1,5 +1,5 @@
"use client";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import SiteBreadcrumb from "@/components/ui/structures/site-breadcrumb";
import {
Accordion,
AccordionContent,
@ -11,7 +11,7 @@ import { addDays, format } from "date-fns";
import { Calendar as CalendarIcon } from "lucide-react";
import { DateRange } from "react-day-picker";
import Cookies from "js-cookie";
import { cn, getCookiesDecrypt } from "@/lib/utils";
import { cn, getCookiesDecrypt } from "@/lib/utils/utils";
import { Button } from "@/components/ui/button";
import { Calendar } from "@/components/ui/calendar";
import {
@ -19,7 +19,7 @@ import {
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
import { generateTicket } from "@/service/tableau/tableau-service";
import { generateTicket } from "@/lib/services/tableau/tableau-service";
export default function ContentManagement() {
const [startDate, setStartDate] = useState<any>(new Date());

View File

@ -2,7 +2,7 @@ import * as React from "react";
import { ColumnDef } from "@tanstack/react-table";
import { Eye, MoreVertical, SquarePen, Trash2 } from "lucide-react";
import { cn } from "@/lib/utils";
import { cn } from "@/lib/utils/utils"
import {
DropdownMenu,
DropdownMenuContent,
@ -16,7 +16,7 @@ import Swal from "sweetalert2";
import { Link, useRouter } from "@/i18n/routing";
import withReactContent from "sweetalert2-react-content";
import { close, error, loading } from "@/config/swal";
import { deleteMediaBlastAccount } from "@/service/broadcast/broadcast";
import { deleteMediaBlastAccount } from "@/lib/services/broadcast/broadcast";
import { useToast } from "@/components/ui/use-toast";
const columns: ColumnDef<any>[] = [

View File

@ -27,14 +27,14 @@ import {
import { UserIcon } from "lucide-react";
import { useRouter, useSearchParams } from "next/navigation";
import TablePagination from "@/components/table/table-pagination";
import TablePagination from "@/components/features/table/table-pagination";
import columns from "./column";
import {
Popover,
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
import { getMediaBlastAccountPage } from "@/service/broadcast/broadcast";
import { getMediaBlastAccountPage } from "@/lib/services/broadcast/broadcast";
import { Checkbox } from "@/components/ui/checkbox";
import { close, loading } from "@/config/swal";
import { Link } from "@/i18n/routing";

View File

@ -1,5 +1,5 @@
"use client";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import SiteBreadcrumb from "@/components/ui/structures/site-breadcrumb";
import { z } from "zod";
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
@ -21,15 +21,15 @@ import {
} from "@/components/ui/popover";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
import { cn } from "@/lib/utils";
import { cn } from "@/lib/utils/utils"
import { format } from "date-fns";
import { CalendarIcon } from "lucide-react";
import { Calendar } from "@/components/ui/calendar";
import { getOnlyDate } from "@/utils/globals";
import { getOnlyDate } from "@/lib/utils/globals";
import {
saveMediaBlastAccount,
saveMediaBlastCampaign,
} from "@/service/broadcast/broadcast";
} from "@/lib/services/broadcast/broadcast";
import { error } from "@/config/swal";
import { useRouter } from "@/i18n/routing";
import { Checkbox } from "@/components/ui/checkbox";

View File

@ -1,5 +1,5 @@
"use client";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import SiteBreadcrumb from "@/components/ui/structures/site-breadcrumb";
import { z } from "zod";
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
@ -21,16 +21,16 @@ import {
} from "@/components/ui/popover";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
import { cn } from "@/lib/utils";
import { cn } from "@/lib/utils/utils"
import { format } from "date-fns";
import { CalendarIcon } from "lucide-react";
import { Calendar } from "@/components/ui/calendar";
import { getOnlyDate } from "@/utils/globals";
import { getOnlyDate } from "@/lib/utils/globals";
import {
getMediaBlastAccount,
saveMediaBlastAccount,
saveMediaBlastCampaign,
} from "@/service/broadcast/broadcast";
} from "@/lib/services/broadcast/broadcast";
import { error } from "@/config/swal";
import { useRouter } from "@/i18n/routing";
import { Checkbox } from "@/components/ui/checkbox";

View File

@ -1,4 +1,4 @@
import SiteBreadcrumb from "@/components/site-breadcrumb";
import SiteBreadcrumb from "@/components/ui/structures/site-breadcrumb";
import AccountListTable from "./component/table";
export default function AdminCampaignList() {

View File

@ -2,7 +2,7 @@ import * as React from "react";
import { ColumnDef } from "@tanstack/react-table";
import { Eye, MoreVertical, SquarePen, Trash2 } from "lucide-react";
import { cn } from "@/lib/utils";
import { cn } from "@/lib/utils/utils"
import {
DropdownMenu,
DropdownMenuContent,

View File

@ -37,7 +37,7 @@ import {
TrendingUp,
UserIcon,
} from "lucide-react";
import { cn } from "@/lib/utils";
import { cn } from "@/lib/utils/utils"
import {
DropdownMenu,
DropdownMenuContent,
@ -48,13 +48,13 @@ import {
} from "@/components/ui/dropdown-menu";
import { Input } from "@/components/ui/input";
import { InputGroup, InputGroupText } from "@/components/ui/input-group";
import { paginationBlog } from "@/service/blog/blog";
import { ticketingPagination } from "@/service/ticketing/ticketing";
import { paginationBlog } from "@/lib/services/blog/blog";
import { ticketingPagination } from "@/lib/services/ticketing/ticketing";
import { Badge } from "@/components/ui/badge";
import { useRouter, useSearchParams } from "next/navigation";
import TablePagination from "@/components/table/table-pagination";
import TablePagination from "@/components/features/table/table-pagination";
import columns from "./column";
import { getPlanningPagination } from "@/service/agenda-setting/agenda-setting";
import { getPlanningPagination } from "@/lib/services/agenda-setting/agenda-setting";
import {
Popover,
PopoverContent,
@ -63,12 +63,12 @@ import {
import {
getMediaBlastCampaignPage,
listDataMedia,
} from "@/service/broadcast/broadcast";
import { listEnableCategory } from "@/service/content/content";
} from "@/lib/services/broadcast/broadcast";
import { listEnableCategory } from "@/lib/services/content/content";
import { Checkbox } from "@/components/ui/checkbox";
import { close, loading } from "@/config/swal";
import { Link } from "@/i18n/routing";
import { NewCampaignIcon } from "@/components/icon";
import { NewCampaignIcon } from "/components/icon";
const CampaignListTable = () => {
const router = useRouter();

View File

@ -1,5 +1,5 @@
"use client";
import SiteBreadcrumb from "@/components/site-breadcrumb";
import SiteBreadcrumb from "@/components/ui/structures/site-breadcrumb";
import { z } from "zod";
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
@ -21,12 +21,12 @@ import {
} from "@/components/ui/popover";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
import { cn } from "@/lib/utils";
import { cn } from "@/lib/utils/utils"
import { format } from "date-fns";
import { CalendarIcon } from "lucide-react";
import { Calendar } from "@/components/ui/calendar";
import { getOnlyDate } from "@/utils/globals";
import { saveMediaBlastCampaign } from "@/service/broadcast/broadcast";
import { getOnlyDate } from "@/lib/utils/globals";
import { saveMediaBlastCampaign } from "@/lib/services/broadcast/broadcast";
import { error } from "@/config/swal";
import { useRouter } from "@/i18n/routing";

Some files were not shown because too many files have changed in this diff Show More