Feat:fix detail penugasan, approver language
This commit is contained in:
parent
bc2bbd98cf
commit
be7e34ee11
|
|
@ -590,15 +590,15 @@ const CalendarView = ({ categories }: CalendarViewProps) => {
|
||||||
<Dialog open={open} onOpenChange={setOpen}>
|
<Dialog open={open} onOpenChange={setOpen}>
|
||||||
<DialogTrigger asChild>
|
<DialogTrigger asChild>
|
||||||
{roleId == 2 ? (
|
{roleId == 2 ? (
|
||||||
<Button className="dark:bg-background dark:text-foreground ml-2">
|
<Button className="dark:bg-background dark:text-foreground ">
|
||||||
<Book className="w-4 h-4 me-1" />
|
<Book className="w-4 h-4" />
|
||||||
Hasil Pantauan BAG PA
|
{t("bag-pa-monitoring-results")}
|
||||||
</Button>
|
</Button>
|
||||||
) : null}
|
) : null}
|
||||||
</DialogTrigger>
|
</DialogTrigger>
|
||||||
<DialogContent className="sm:max-w-[425px] md:max-w-[500px] lg:max-w-[1500px] overflow-y-auto max-h-[500px]">
|
<DialogContent className="sm:max-w-[425px] md:max-w-[500px] lg:max-w-[1500px] overflow-y-auto max-h-[500px]">
|
||||||
<DialogHeader>
|
<DialogHeader>
|
||||||
<DialogTitle>Hasil Pantauan</DialogTitle>
|
<DialogTitle>{t("monitoring-results")}</DialogTitle>
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
{getModalContent("terkirim")}
|
{getModalContent("terkirim")}
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ import {
|
||||||
TableRow,
|
TableRow,
|
||||||
} from "@/components/ui/table";
|
} from "@/components/ui/table";
|
||||||
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
|
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
|
||||||
import { ChevronDown, Search } from "lucide-react";
|
import { ChevronDown, Plus, Search } from "lucide-react";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import { Input } from "@/components/ui/input";
|
import { Input } from "@/components/ui/input";
|
||||||
import { InputGroup, InputGroupText } from "@/components/ui/input-group";
|
import { InputGroup, InputGroupText } from "@/components/ui/input-group";
|
||||||
|
|
@ -42,11 +42,14 @@ import {
|
||||||
} from "@/components/ui/dropdown-menu";
|
} from "@/components/ui/dropdown-menu";
|
||||||
import { Label } from "@/components/ui/label";
|
import { Label } from "@/components/ui/label";
|
||||||
import { listEnableCategory } from "@/service/content/content";
|
import { listEnableCategory } from "@/service/content/content";
|
||||||
|
import { useTranslations } from "next-intl";
|
||||||
|
import { CardHeader, CardTitle } from "@/components/ui/card";
|
||||||
|
import { Link } from "@/i18n/routing";
|
||||||
|
|
||||||
const BlogTable = () => {
|
const BlogTable = () => {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const searchParams = useSearchParams();
|
const searchParams = useSearchParams();
|
||||||
|
const t = useTranslations("Blog");
|
||||||
const [dataTable, setDataTable] = React.useState<any[]>([]);
|
const [dataTable, setDataTable] = React.useState<any[]>([]);
|
||||||
const [totalData, setTotalData] = React.useState<number>(1);
|
const [totalData, setTotalData] = React.useState<number>(1);
|
||||||
const [sorting, setSorting] = React.useState<SortingState>([]);
|
const [sorting, setSorting] = React.useState<SortingState>([]);
|
||||||
|
|
@ -169,198 +172,218 @@ const BlogTable = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="w-full overflow-x-auto">
|
<div>
|
||||||
<div className="flex flex-col md:flex-row lg:flex-row md:justify-between lg:justify-between items-center md:px-5 lg:px-5">
|
<CardHeader className="border-b border-solid border-default-200 mb-6">
|
||||||
<div className="w-full md:w-[200px] lg:w-[200px] px-2">
|
<CardTitle>
|
||||||
<InputGroup merged>
|
<div className="flex items-center">
|
||||||
<InputGroupText className="bg-transparent dark:border-secondary dark:group-focus-within:border-secondary">
|
<div className="flex-1 text-xl font-medium text-default-900">
|
||||||
<Search className=" h-4 w-4 dark:text-white" />
|
{t("table")} {t("blog")}
|
||||||
</InputGroupText>
|
</div>
|
||||||
<Input
|
<div className="flex-none">
|
||||||
type="text"
|
<Link href={"/contributor/blog/create"}>
|
||||||
placeholder="Search Judul..."
|
<Button fullWidth color="primary">
|
||||||
className="bg-transparent dark:border-secondary dark:placeholder-white/80 dark:focus:border-secondary dark:text-white"
|
<Plus className="w-6 h-6 me-1.5" />
|
||||||
value={search}
|
{t("create-indeks")}
|
||||||
onChange={handleSearch}
|
|
||||||
/>
|
|
||||||
</InputGroup>
|
|
||||||
</div>
|
|
||||||
<div className="flex flex-row items-center gap-3">
|
|
||||||
<div className="flex items-center py-4">
|
|
||||||
<DropdownMenu>
|
|
||||||
<DropdownMenuTrigger asChild>
|
|
||||||
<Button variant="outline" className="ml-auto" size="md">
|
|
||||||
Filter <ChevronDown />
|
|
||||||
</Button>
|
</Button>
|
||||||
</DropdownMenuTrigger>
|
</Link>
|
||||||
<DropdownMenuContent
|
</div>
|
||||||
align="end"
|
|
||||||
className="w-64 h-[200px] overflow-y-auto"
|
|
||||||
>
|
|
||||||
<div className="flex flex-row justify-between my-1 mx-1">
|
|
||||||
<p>Filter</p>
|
|
||||||
{/* <p
|
|
||||||
className="text-blue-600 cursor-pointer"
|
|
||||||
onClick={fetchData}
|
|
||||||
>
|
|
||||||
Simpan
|
|
||||||
</p> */}
|
|
||||||
</div>
|
|
||||||
<Label className="ml-2">Kategori</Label>
|
|
||||||
{categories.length > 0 ? (
|
|
||||||
categories.map((category) => (
|
|
||||||
<div
|
|
||||||
key={category.id}
|
|
||||||
className="flex items-center px-4 py-1"
|
|
||||||
>
|
|
||||||
<input
|
|
||||||
type="checkbox"
|
|
||||||
id={`category-${category.id}`}
|
|
||||||
className="mr-2"
|
|
||||||
checked={selectedCategories.includes(category.id)}
|
|
||||||
onChange={() => handleCheckboxChange(category.id)}
|
|
||||||
/>
|
|
||||||
<label
|
|
||||||
htmlFor={`category-${category.id}`}
|
|
||||||
className="text-sm"
|
|
||||||
>
|
|
||||||
{category.name}
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
))
|
|
||||||
) : (
|
|
||||||
<p className="text-sm text-gray-500 px-4 py-2">
|
|
||||||
No categories found.
|
|
||||||
</p>
|
|
||||||
)}
|
|
||||||
<Label className="ml-2 mt-2">Status</Label>
|
|
||||||
<div className="flex items-center px-4 py-1">
|
|
||||||
<input
|
|
||||||
type="checkbox"
|
|
||||||
id="status-2"
|
|
||||||
className="mr-2"
|
|
||||||
checked={statusFilter.includes(1)}
|
|
||||||
onChange={() => handleStatusCheckboxChange(1)}
|
|
||||||
/>
|
|
||||||
<label htmlFor="status-2" className="text-sm">
|
|
||||||
Menunggu Review
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div className="flex items-center px-4 py-1">
|
|
||||||
<input
|
|
||||||
type="checkbox"
|
|
||||||
id="status-2"
|
|
||||||
className="mr-2"
|
|
||||||
checked={statusFilter.includes(2)}
|
|
||||||
onChange={() => handleStatusCheckboxChange(2)}
|
|
||||||
/>
|
|
||||||
<label htmlFor="status-2" className="text-sm">
|
|
||||||
Diterima
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div className="flex items-center px-4 py-1">
|
|
||||||
<input
|
|
||||||
type="checkbox"
|
|
||||||
id="status-3"
|
|
||||||
className="mr-2"
|
|
||||||
checked={statusFilter.includes(3)}
|
|
||||||
onChange={() => handleStatusCheckboxChange(3)}
|
|
||||||
/>
|
|
||||||
<label htmlFor="status-3" className="text-sm">
|
|
||||||
Minta Update
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div className="flex items-center px-4 py-1">
|
|
||||||
<input
|
|
||||||
type="checkbox"
|
|
||||||
id="status-4"
|
|
||||||
className="mr-2"
|
|
||||||
checked={statusFilter.includes(4)}
|
|
||||||
onChange={() => handleStatusCheckboxChange(4)}
|
|
||||||
/>
|
|
||||||
<label htmlFor="status-4" className="text-sm">
|
|
||||||
Ditolak
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</DropdownMenuContent>
|
|
||||||
</DropdownMenu>
|
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center py-4">
|
</CardTitle>
|
||||||
<DropdownMenu>
|
</CardHeader>
|
||||||
<DropdownMenuTrigger asChild>
|
|
||||||
<Button variant="outline" className="ml-auto" size="md">
|
<div className="w-full overflow-x-auto">
|
||||||
Columns <ChevronDown />
|
<div className="flex flex-col md:flex-row lg:flex-row md:justify-between lg:justify-between items-center md:px-5 lg:px-5">
|
||||||
</Button>
|
<div className="w-full md:w-[200px] lg:w-[200px] px-2">
|
||||||
</DropdownMenuTrigger>
|
<InputGroup merged>
|
||||||
<DropdownMenuContent align="end">
|
<InputGroupText className="bg-transparent dark:border-secondary dark:group-focus-within:border-secondary">
|
||||||
{table
|
<Search className=" h-4 w-4 dark:text-white" />
|
||||||
.getAllColumns()
|
</InputGroupText>
|
||||||
.filter((column) => column.getCanHide())
|
<Input
|
||||||
.map((column) => {
|
type="text"
|
||||||
return (
|
placeholder="Search Title"
|
||||||
<DropdownMenuCheckboxItem
|
className="bg-transparent dark:border-secondary dark:placeholder-white/80 dark:focus:border-secondary dark:text-white"
|
||||||
key={column.id}
|
value={search}
|
||||||
className="capitalize"
|
onChange={handleSearch}
|
||||||
checked={column.getIsVisible()}
|
/>
|
||||||
onCheckedChange={(value) =>
|
</InputGroup>
|
||||||
column.toggleVisibility(!!value)
|
</div>
|
||||||
}
|
<div className="flex flex-row items-center gap-3">
|
||||||
|
<div className="flex items-center py-4">
|
||||||
|
<DropdownMenu>
|
||||||
|
<DropdownMenuTrigger asChild>
|
||||||
|
<Button variant="outline" className="ml-auto" size="md">
|
||||||
|
Filter <ChevronDown />
|
||||||
|
</Button>
|
||||||
|
</DropdownMenuTrigger>
|
||||||
|
<DropdownMenuContent
|
||||||
|
align="end"
|
||||||
|
className="w-64 h-[200px] overflow-y-auto"
|
||||||
|
>
|
||||||
|
<div className="flex flex-row justify-between my-1 mx-1">
|
||||||
|
<p>Filter</p>
|
||||||
|
</div>
|
||||||
|
<Label className="ml-2">{t("category")}</Label>
|
||||||
|
{categories.length > 0 ? (
|
||||||
|
categories.map((category) => (
|
||||||
|
<div
|
||||||
|
key={category.id}
|
||||||
|
className="flex items-center px-4 py-1"
|
||||||
>
|
>
|
||||||
{column.id}
|
<input
|
||||||
</DropdownMenuCheckboxItem>
|
type="checkbox"
|
||||||
);
|
id={`category-${category.id}`}
|
||||||
})}
|
className="mr-2"
|
||||||
</DropdownMenuContent>
|
checked={selectedCategories.includes(category.id)}
|
||||||
</DropdownMenu>
|
onChange={() => handleCheckboxChange(category.id)}
|
||||||
|
/>
|
||||||
|
<label
|
||||||
|
htmlFor={`category-${category.id}`}
|
||||||
|
className="text-sm"
|
||||||
|
>
|
||||||
|
{category.name}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
))
|
||||||
|
) : (
|
||||||
|
<p className="text-sm text-gray-500 px-4 py-2">
|
||||||
|
No categories found.
|
||||||
|
</p>
|
||||||
|
)}
|
||||||
|
<Label className="ml-2 mt-2">Status</Label>
|
||||||
|
<div className="flex items-center px-4 py-1">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
id="status-2"
|
||||||
|
className="mr-2"
|
||||||
|
checked={statusFilter.includes(1)}
|
||||||
|
onChange={() => handleStatusCheckboxChange(1)}
|
||||||
|
/>
|
||||||
|
<label htmlFor="status-2" className="text-sm">
|
||||||
|
Menunggu Review
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center px-4 py-1">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
id="status-2"
|
||||||
|
className="mr-2"
|
||||||
|
checked={statusFilter.includes(2)}
|
||||||
|
onChange={() => handleStatusCheckboxChange(2)}
|
||||||
|
/>
|
||||||
|
<label htmlFor="status-2" className="text-sm">
|
||||||
|
Diterima
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center px-4 py-1">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
id="status-3"
|
||||||
|
className="mr-2"
|
||||||
|
checked={statusFilter.includes(3)}
|
||||||
|
onChange={() => handleStatusCheckboxChange(3)}
|
||||||
|
/>
|
||||||
|
<label htmlFor="status-3" className="text-sm">
|
||||||
|
Minta Update
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center px-4 py-1">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
id="status-4"
|
||||||
|
className="mr-2"
|
||||||
|
checked={statusFilter.includes(4)}
|
||||||
|
onChange={() => handleStatusCheckboxChange(4)}
|
||||||
|
/>
|
||||||
|
<label htmlFor="status-4" className="text-sm">
|
||||||
|
Ditolak
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</DropdownMenuContent>
|
||||||
|
</DropdownMenu>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center py-4">
|
||||||
|
<DropdownMenu>
|
||||||
|
<DropdownMenuTrigger asChild>
|
||||||
|
<Button variant="outline" className="ml-auto" size="md">
|
||||||
|
Columns <ChevronDown />
|
||||||
|
</Button>
|
||||||
|
</DropdownMenuTrigger>
|
||||||
|
<DropdownMenuContent align="end">
|
||||||
|
{table
|
||||||
|
.getAllColumns()
|
||||||
|
.filter((column) => column.getCanHide())
|
||||||
|
.map((column) => {
|
||||||
|
return (
|
||||||
|
<DropdownMenuCheckboxItem
|
||||||
|
key={column.id}
|
||||||
|
className="capitalize"
|
||||||
|
checked={column.getIsVisible()}
|
||||||
|
onCheckedChange={(value) =>
|
||||||
|
column.toggleVisibility(!!value)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{column.id}
|
||||||
|
</DropdownMenuCheckboxItem>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</DropdownMenuContent>
|
||||||
|
</DropdownMenu>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<Table className="overflow-hidden mt-3">
|
||||||
<Table className="overflow-hidden mt-3">
|
<TableHeader>
|
||||||
<TableHeader>
|
{table.getHeaderGroups().map((headerGroup) => (
|
||||||
{table.getHeaderGroups().map((headerGroup) => (
|
<TableRow key={headerGroup.id} className="bg-default-200">
|
||||||
<TableRow key={headerGroup.id} className="bg-default-200">
|
{headerGroup.headers.map((header) => (
|
||||||
{headerGroup.headers.map((header) => (
|
<TableHead key={header.id}>
|
||||||
<TableHead key={header.id}>
|
{header.isPlaceholder
|
||||||
{header.isPlaceholder
|
? null
|
||||||
? null
|
: flexRender(
|
||||||
: flexRender(
|
header.column.columnDef.header,
|
||||||
header.column.columnDef.header,
|
header.getContext()
|
||||||
header.getContext()
|
)}
|
||||||
)}
|
</TableHead>
|
||||||
</TableHead>
|
|
||||||
))}
|
|
||||||
</TableRow>
|
|
||||||
))}
|
|
||||||
</TableHeader>
|
|
||||||
<TableBody>
|
|
||||||
{table.getRowModel().rows?.length ? (
|
|
||||||
table.getRowModel().rows.map((row) => (
|
|
||||||
<TableRow
|
|
||||||
key={row.id}
|
|
||||||
data-state={row.getIsSelected() && "selected"}
|
|
||||||
className="h-[75px]"
|
|
||||||
>
|
|
||||||
{row.getVisibleCells().map((cell) => (
|
|
||||||
<TableCell key={cell.id}>
|
|
||||||
{flexRender(cell.column.columnDef.cell, cell.getContext())}
|
|
||||||
</TableCell>
|
|
||||||
))}
|
))}
|
||||||
</TableRow>
|
</TableRow>
|
||||||
))
|
))}
|
||||||
) : (
|
</TableHeader>
|
||||||
<TableRow>
|
<TableBody>
|
||||||
<TableCell colSpan={columns.length} className="h-24 text-center">
|
{table.getRowModel().rows?.length ? (
|
||||||
No results.
|
table.getRowModel().rows.map((row) => (
|
||||||
</TableCell>
|
<TableRow
|
||||||
</TableRow>
|
key={row.id}
|
||||||
)}
|
data-state={row.getIsSelected() && "selected"}
|
||||||
</TableBody>
|
className="h-[75px]"
|
||||||
</Table>
|
>
|
||||||
<TablePagination
|
{row.getVisibleCells().map((cell) => (
|
||||||
table={table}
|
<TableCell key={cell.id}>
|
||||||
totalData={totalData}
|
{flexRender(
|
||||||
totalPage={totalPage}
|
cell.column.columnDef.cell,
|
||||||
/>
|
cell.getContext()
|
||||||
|
)}
|
||||||
|
</TableCell>
|
||||||
|
))}
|
||||||
|
</TableRow>
|
||||||
|
))
|
||||||
|
) : (
|
||||||
|
<TableRow>
|
||||||
|
<TableCell
|
||||||
|
colSpan={columns.length}
|
||||||
|
className="h-24 text-center"
|
||||||
|
>
|
||||||
|
No results.
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
)}
|
||||||
|
</TableBody>
|
||||||
|
</Table>
|
||||||
|
<TablePagination
|
||||||
|
table={table}
|
||||||
|
totalData={totalData}
|
||||||
|
totalPage={totalPage}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -11,23 +11,6 @@ const BlogPage = async () => {
|
||||||
<SiteBreadcrumb />
|
<SiteBreadcrumb />
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
<Card>
|
<Card>
|
||||||
<CardHeader className="border-b border-solid border-default-200 mb-6">
|
|
||||||
<CardTitle>
|
|
||||||
<div className="flex items-center">
|
|
||||||
<div className="flex-1 text-xl font-medium text-default-900">
|
|
||||||
Tabel Indeks
|
|
||||||
</div>
|
|
||||||
<div className="flex-none">
|
|
||||||
<Link href={"/contributor/blog/create"}>
|
|
||||||
<Button fullWidth color="primary">
|
|
||||||
<Plus className="w-6 h-6 me-1.5" />
|
|
||||||
Add Index
|
|
||||||
</Button>
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="p-0">
|
<CardContent className="p-0">
|
||||||
<BlogTable />
|
<BlogTable />
|
||||||
</CardContent>
|
</CardContent>
|
||||||
|
|
|
||||||
|
|
@ -22,18 +22,22 @@ import {
|
||||||
TableHeader,
|
TableHeader,
|
||||||
TableRow,
|
TableRow,
|
||||||
} from "@/components/ui/table";
|
} from "@/components/ui/table";
|
||||||
import { Search } from "lucide-react";
|
import { Search, UploadIcon } from "lucide-react";
|
||||||
import { Input } from "@/components/ui/input";
|
import { Input } from "@/components/ui/input";
|
||||||
import { InputGroup, InputGroupText } from "@/components/ui/input-group";
|
import { InputGroup, InputGroupText } from "@/components/ui/input-group";
|
||||||
import { useRouter, useSearchParams } from "next/navigation";
|
import { useRouter, useSearchParams } from "next/navigation";
|
||||||
import TablePagination from "@/components/table/table-pagination";
|
import TablePagination from "@/components/table/table-pagination";
|
||||||
import columns from "./columns";
|
import columns from "./columns";
|
||||||
import { paginationSchedule } from "@/service/schedule/schedule";
|
import { paginationSchedule } from "@/service/schedule/schedule";
|
||||||
|
import { useTranslations } from "next-intl";
|
||||||
|
import { CardHeader, CardTitle } from "@/components/ui/card";
|
||||||
|
import { Link } from "@/i18n/routing";
|
||||||
|
import { Button } from "@/components/ui/button";
|
||||||
|
|
||||||
const EventTable = () => {
|
const EventTable = () => {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const searchParams = useSearchParams();
|
const searchParams = useSearchParams();
|
||||||
|
const t = useTranslations("Schedule");
|
||||||
const [dataTable, setDataTable] = React.useState<any[]>([]);
|
const [dataTable, setDataTable] = React.useState<any[]>([]);
|
||||||
const [totalData, setTotalData] = React.useState<number>(1);
|
const [totalData, setTotalData] = React.useState<number>(1);
|
||||||
const [sorting, setSorting] = React.useState<SortingState>([]);
|
const [sorting, setSorting] = React.useState<SortingState>([]);
|
||||||
|
|
@ -109,81 +113,106 @@ const EventTable = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="w-full overflow-x-auto">
|
<div>
|
||||||
<div className="flex justify-between items-center px-5 gap-2">
|
<CardHeader className="border-b border-solid border-default-200 mb-6">
|
||||||
<div className="w-[150px] md:w-[250px] lg:w-[250px]">
|
<CardTitle>
|
||||||
<InputGroup merged>
|
<div className="flex items-center">
|
||||||
<InputGroupText className="bg-transparent dark:border-secondary dark:group-focus-within:border-secondary">
|
<div className="flex-1 text-xl font-medium text-default-900">
|
||||||
<Search className=" h-4 w-4 dark:text-white" />
|
Event {t("schedule")}
|
||||||
</InputGroupText>
|
</div>
|
||||||
|
<div className="flex-none">
|
||||||
|
<Link href={"/contributor/schedule/event/create"}>
|
||||||
|
<Button color="primary" className="text-white">
|
||||||
|
<UploadIcon />
|
||||||
|
{t("create-schedule")}
|
||||||
|
</Button>
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</CardTitle>
|
||||||
|
</CardHeader>
|
||||||
|
<div className="w-full overflow-x-auto">
|
||||||
|
<div className="flex justify-between items-center px-5 gap-2">
|
||||||
|
<div className="w-[150px] md:w-[250px] lg:w-[250px]">
|
||||||
|
<InputGroup merged>
|
||||||
|
<InputGroupText className="bg-transparent dark:border-secondary dark:group-focus-within:border-secondary">
|
||||||
|
<Search className=" h-4 w-4 dark:text-white" />
|
||||||
|
</InputGroupText>
|
||||||
|
<Input
|
||||||
|
type="text"
|
||||||
|
placeholder="Search Title..."
|
||||||
|
className="bg-transparent dark:border-secondary dark:placeholder-white/80 dark:focus:border-secondary dark:text-white"
|
||||||
|
value={search}
|
||||||
|
onChange={handleSearch}
|
||||||
|
/>
|
||||||
|
</InputGroup>
|
||||||
|
</div>
|
||||||
|
<div className="w-[150px] md:w-[250px] lg:w-[250px]">
|
||||||
<Input
|
<Input
|
||||||
type="text"
|
placeholder="Filter Status..."
|
||||||
placeholder="Search Judul..."
|
value={
|
||||||
className="bg-transparent dark:border-secondary dark:placeholder-white/80 dark:focus:border-secondary dark:text-white"
|
(table.getColumn("status")?.getFilterValue() as string) ?? ""
|
||||||
value={search}
|
}
|
||||||
onChange={handleSearch}
|
onChange={(event: React.ChangeEvent<HTMLInputElement>) =>
|
||||||
|
table.getColumn("status")?.setFilterValue(event.target.value)
|
||||||
|
}
|
||||||
|
className="max-w-sm "
|
||||||
/>
|
/>
|
||||||
</InputGroup>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="w-[150px] md:w-[250px] lg:w-[250px]">
|
<Table className="overflow-hidden mt-3">
|
||||||
<Input
|
<TableHeader>
|
||||||
placeholder="Filter Status..."
|
{table.getHeaderGroups().map((headerGroup) => (
|
||||||
value={
|
<TableRow key={headerGroup.id} className="bg-default-200">
|
||||||
(table.getColumn("status")?.getFilterValue() as string) ?? ""
|
{headerGroup.headers.map((header) => (
|
||||||
}
|
<TableHead key={header.id}>
|
||||||
onChange={(event: React.ChangeEvent<HTMLInputElement>) =>
|
{header.isPlaceholder
|
||||||
table.getColumn("status")?.setFilterValue(event.target.value)
|
? null
|
||||||
}
|
: flexRender(
|
||||||
className="max-w-sm "
|
header.column.columnDef.header,
|
||||||
/>
|
header.getContext()
|
||||||
</div>
|
)}
|
||||||
</div>
|
</TableHead>
|
||||||
<Table className="overflow-hidden mt-3">
|
|
||||||
<TableHeader>
|
|
||||||
{table.getHeaderGroups().map((headerGroup) => (
|
|
||||||
<TableRow key={headerGroup.id} className="bg-default-200">
|
|
||||||
{headerGroup.headers.map((header) => (
|
|
||||||
<TableHead key={header.id}>
|
|
||||||
{header.isPlaceholder
|
|
||||||
? null
|
|
||||||
: flexRender(
|
|
||||||
header.column.columnDef.header,
|
|
||||||
header.getContext()
|
|
||||||
)}
|
|
||||||
</TableHead>
|
|
||||||
))}
|
|
||||||
</TableRow>
|
|
||||||
))}
|
|
||||||
</TableHeader>
|
|
||||||
<TableBody>
|
|
||||||
{table.getRowModel().rows?.length ? (
|
|
||||||
table.getRowModel().rows.map((row) => (
|
|
||||||
<TableRow
|
|
||||||
key={row.id}
|
|
||||||
data-state={row.getIsSelected() && "selected"}
|
|
||||||
className="h-[75px]"
|
|
||||||
>
|
|
||||||
{row.getVisibleCells().map((cell) => (
|
|
||||||
<TableCell key={cell.id}>
|
|
||||||
{flexRender(cell.column.columnDef.cell, cell.getContext())}
|
|
||||||
</TableCell>
|
|
||||||
))}
|
))}
|
||||||
</TableRow>
|
</TableRow>
|
||||||
))
|
))}
|
||||||
) : (
|
</TableHeader>
|
||||||
<TableRow>
|
<TableBody>
|
||||||
<TableCell colSpan={columns.length} className="h-24 text-center">
|
{table.getRowModel().rows?.length ? (
|
||||||
No results.
|
table.getRowModel().rows.map((row) => (
|
||||||
</TableCell>
|
<TableRow
|
||||||
</TableRow>
|
key={row.id}
|
||||||
)}
|
data-state={row.getIsSelected() && "selected"}
|
||||||
</TableBody>
|
className="h-[75px]"
|
||||||
</Table>
|
>
|
||||||
<TablePagination
|
{row.getVisibleCells().map((cell) => (
|
||||||
table={table}
|
<TableCell key={cell.id}>
|
||||||
totalData={totalData}
|
{flexRender(
|
||||||
totalPage={totalPage}
|
cell.column.columnDef.cell,
|
||||||
/>
|
cell.getContext()
|
||||||
|
)}
|
||||||
|
</TableCell>
|
||||||
|
))}
|
||||||
|
</TableRow>
|
||||||
|
))
|
||||||
|
) : (
|
||||||
|
<TableRow>
|
||||||
|
<TableCell
|
||||||
|
colSpan={columns.length}
|
||||||
|
className="h-24 text-center"
|
||||||
|
>
|
||||||
|
No results.
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
)}
|
||||||
|
</TableBody>
|
||||||
|
</Table>
|
||||||
|
<TablePagination
|
||||||
|
table={table}
|
||||||
|
totalData={totalData}
|
||||||
|
totalPage={totalPage}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -12,23 +12,6 @@ const EventPage = async () => {
|
||||||
<SiteBreadcrumb />
|
<SiteBreadcrumb />
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
<Card>
|
<Card>
|
||||||
<CardHeader className="border-b border-solid border-default-200 mb-6">
|
|
||||||
<CardTitle>
|
|
||||||
<div className="flex items-center">
|
|
||||||
<div className="flex-1 text-xl font-medium text-default-900">
|
|
||||||
Jadwal Event
|
|
||||||
</div>
|
|
||||||
<div className="flex-none">
|
|
||||||
<Link href={"/contributor/schedule/event/create"}>
|
|
||||||
<Button color="primary" className="text-white">
|
|
||||||
<UploadIcon />
|
|
||||||
Buat Jadwal
|
|
||||||
</Button>
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="p-0">
|
<CardContent className="p-0">
|
||||||
<EventTable />
|
<EventTable />
|
||||||
</CardContent>
|
</CardContent>
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ import {
|
||||||
Trash2,
|
Trash2,
|
||||||
TrendingDown,
|
TrendingDown,
|
||||||
TrendingUp,
|
TrendingUp,
|
||||||
|
UploadIcon,
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
import { Input } from "@/components/ui/input";
|
import { Input } from "@/components/ui/input";
|
||||||
import { InputGroup, InputGroupText } from "@/components/ui/input-group";
|
import { InputGroup, InputGroupText } from "@/components/ui/input-group";
|
||||||
|
|
@ -42,11 +43,14 @@ import { useRouter, useSearchParams } from "next/navigation";
|
||||||
import TablePagination from "@/components/table/table-pagination";
|
import TablePagination from "@/components/table/table-pagination";
|
||||||
import columns from "./columns";
|
import columns from "./columns";
|
||||||
import { paginationSchedule } from "@/service/schedule/schedule";
|
import { paginationSchedule } from "@/service/schedule/schedule";
|
||||||
|
import { CardHeader, CardTitle } from "@/components/ui/card";
|
||||||
|
import { Link } from "@/i18n/routing";
|
||||||
|
import { useTranslations } from "next-intl";
|
||||||
|
|
||||||
const PressConferenceTable = () => {
|
const PressConferenceTable = () => {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const searchParams = useSearchParams();
|
const searchParams = useSearchParams();
|
||||||
|
const t = useTranslations("Schedule");
|
||||||
const [dataTable, setDataTable] = React.useState<any[]>([]);
|
const [dataTable, setDataTable] = React.useState<any[]>([]);
|
||||||
const [totalData, setTotalData] = React.useState<number>(1);
|
const [totalData, setTotalData] = React.useState<number>(1);
|
||||||
const [sorting, setSorting] = React.useState<SortingState>([]);
|
const [sorting, setSorting] = React.useState<SortingState>([]);
|
||||||
|
|
@ -122,81 +126,106 @@ const PressConferenceTable = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="w-full overflow-x-auto">
|
<div>
|
||||||
<div className="flex justify-between items-center px-5 gap-2">
|
<CardHeader className="border-b border-solid border-default-200 mb-6">
|
||||||
<div className="w-[150px] md:w-[250px] lg:w-[250px]">
|
<CardTitle>
|
||||||
<InputGroup merged>
|
<div className="flex items-center">
|
||||||
<InputGroupText className="bg-transparent dark:border-secondary dark:group-focus-within:border-secondary">
|
<div className="flex-1 text-xl font-medium text-default-900">
|
||||||
<Search className=" h-4 w-4 dark:text-white" />
|
{t("press-conference")} {t("schedule")}
|
||||||
</InputGroupText>
|
</div>
|
||||||
|
<div className="flex-none">
|
||||||
|
<Link href={"/contributor/schedule/press-conference/create"}>
|
||||||
|
<Button color="primary" className="text-white">
|
||||||
|
<UploadIcon />
|
||||||
|
{t("create-schedule")}
|
||||||
|
</Button>
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</CardTitle>
|
||||||
|
</CardHeader>
|
||||||
|
<div className="w-full overflow-x-auto">
|
||||||
|
<div className="flex justify-between items-center px-5 gap-2">
|
||||||
|
<div className="w-[150px] md:w-[250px] lg:w-[250px]">
|
||||||
|
<InputGroup merged>
|
||||||
|
<InputGroupText className="bg-transparent dark:border-secondary dark:group-focus-within:border-secondary">
|
||||||
|
<Search className=" h-4 w-4 dark:text-white" />
|
||||||
|
</InputGroupText>
|
||||||
|
<Input
|
||||||
|
type="text"
|
||||||
|
placeholder="Search Title..."
|
||||||
|
className="bg-transparent dark:border-secondary dark:placeholder-white/80 dark:focus:border-secondary dark:text-white"
|
||||||
|
value={search}
|
||||||
|
onChange={handleSearch}
|
||||||
|
/>
|
||||||
|
</InputGroup>
|
||||||
|
</div>
|
||||||
|
<div className="w-[150px] md:w-[250px] lg:w-[250px]">
|
||||||
<Input
|
<Input
|
||||||
type="text"
|
placeholder="Filter Status..."
|
||||||
placeholder="Search Judul..."
|
value={
|
||||||
className="bg-transparent dark:border-secondary dark:placeholder-white/80 dark:focus:border-secondary dark:text-white"
|
(table.getColumn("status")?.getFilterValue() as string) ?? ""
|
||||||
value={search}
|
}
|
||||||
onChange={handleSearch}
|
onChange={(event: React.ChangeEvent<HTMLInputElement>) =>
|
||||||
|
table.getColumn("status")?.setFilterValue(event.target.value)
|
||||||
|
}
|
||||||
|
className="max-w-sm "
|
||||||
/>
|
/>
|
||||||
</InputGroup>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="w-[150px] md:w-[250px] lg:w-[250px]">
|
<Table className="overflow-hidden mt-3">
|
||||||
<Input
|
<TableHeader>
|
||||||
placeholder="Filter Status..."
|
{table.getHeaderGroups().map((headerGroup) => (
|
||||||
value={
|
<TableRow key={headerGroup.id} className="bg-default-200">
|
||||||
(table.getColumn("status")?.getFilterValue() as string) ?? ""
|
{headerGroup.headers.map((header) => (
|
||||||
}
|
<TableHead key={header.id}>
|
||||||
onChange={(event: React.ChangeEvent<HTMLInputElement>) =>
|
{header.isPlaceholder
|
||||||
table.getColumn("status")?.setFilterValue(event.target.value)
|
? null
|
||||||
}
|
: flexRender(
|
||||||
className="max-w-sm "
|
header.column.columnDef.header,
|
||||||
/>
|
header.getContext()
|
||||||
</div>
|
)}
|
||||||
</div>
|
</TableHead>
|
||||||
<Table className="overflow-hidden mt-3">
|
|
||||||
<TableHeader>
|
|
||||||
{table.getHeaderGroups().map((headerGroup) => (
|
|
||||||
<TableRow key={headerGroup.id} className="bg-default-200">
|
|
||||||
{headerGroup.headers.map((header) => (
|
|
||||||
<TableHead key={header.id}>
|
|
||||||
{header.isPlaceholder
|
|
||||||
? null
|
|
||||||
: flexRender(
|
|
||||||
header.column.columnDef.header,
|
|
||||||
header.getContext()
|
|
||||||
)}
|
|
||||||
</TableHead>
|
|
||||||
))}
|
|
||||||
</TableRow>
|
|
||||||
))}
|
|
||||||
</TableHeader>
|
|
||||||
<TableBody>
|
|
||||||
{table.getRowModel().rows?.length ? (
|
|
||||||
table.getRowModel().rows.map((row) => (
|
|
||||||
<TableRow
|
|
||||||
key={row.id}
|
|
||||||
data-state={row.getIsSelected() && "selected"}
|
|
||||||
className="h-[75px]"
|
|
||||||
>
|
|
||||||
{row.getVisibleCells().map((cell) => (
|
|
||||||
<TableCell key={cell.id}>
|
|
||||||
{flexRender(cell.column.columnDef.cell, cell.getContext())}
|
|
||||||
</TableCell>
|
|
||||||
))}
|
))}
|
||||||
</TableRow>
|
</TableRow>
|
||||||
))
|
))}
|
||||||
) : (
|
</TableHeader>
|
||||||
<TableRow>
|
<TableBody>
|
||||||
<TableCell colSpan={columns.length} className="h-24 text-center">
|
{table.getRowModel().rows?.length ? (
|
||||||
No results.
|
table.getRowModel().rows.map((row) => (
|
||||||
</TableCell>
|
<TableRow
|
||||||
</TableRow>
|
key={row.id}
|
||||||
)}
|
data-state={row.getIsSelected() && "selected"}
|
||||||
</TableBody>
|
className="h-[75px]"
|
||||||
</Table>
|
>
|
||||||
<TablePagination
|
{row.getVisibleCells().map((cell) => (
|
||||||
table={table}
|
<TableCell key={cell.id}>
|
||||||
totalData={totalData}
|
{flexRender(
|
||||||
totalPage={totalPage}
|
cell.column.columnDef.cell,
|
||||||
/>
|
cell.getContext()
|
||||||
|
)}
|
||||||
|
</TableCell>
|
||||||
|
))}
|
||||||
|
</TableRow>
|
||||||
|
))
|
||||||
|
) : (
|
||||||
|
<TableRow>
|
||||||
|
<TableCell
|
||||||
|
colSpan={columns.length}
|
||||||
|
className="h-24 text-center"
|
||||||
|
>
|
||||||
|
No results.
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
)}
|
||||||
|
</TableBody>
|
||||||
|
</Table>
|
||||||
|
<TablePagination
|
||||||
|
table={table}
|
||||||
|
totalData={totalData}
|
||||||
|
totalPage={totalPage}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,6 @@ import SiteBreadcrumb from "@/components/site-breadcrumb";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
|
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
|
||||||
import PressConferenceTable from "./components/presscon-table";
|
import PressConferenceTable from "./components/presscon-table";
|
||||||
import { UploadIcon } from "lucide-react";
|
|
||||||
import { Link } from "@/components/navigation";
|
|
||||||
|
|
||||||
const PressConferencePage = async () => {
|
const PressConferencePage = async () => {
|
||||||
return (
|
return (
|
||||||
|
|
@ -11,23 +9,6 @@ const PressConferencePage = async () => {
|
||||||
<SiteBreadcrumb />
|
<SiteBreadcrumb />
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
<Card>
|
<Card>
|
||||||
<CardHeader className="border-b border-solid border-default-200 mb-6">
|
|
||||||
<CardTitle>
|
|
||||||
<div className="flex items-center">
|
|
||||||
<div className="flex-1 text-xl font-medium text-default-900">
|
|
||||||
Jadwal Konferensi Pers
|
|
||||||
</div>
|
|
||||||
<div className="flex-none">
|
|
||||||
<Link href={"/contributor/schedule/press-conference/create"}>
|
|
||||||
<Button color="primary" className="text-white">
|
|
||||||
<UploadIcon />
|
|
||||||
Buat Jadwal
|
|
||||||
</Button>
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="p-0">
|
<CardContent className="p-0">
|
||||||
<PressConferenceTable />
|
<PressConferenceTable />
|
||||||
</CardContent>
|
</CardContent>
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ import {
|
||||||
Trash2,
|
Trash2,
|
||||||
TrendingDown,
|
TrendingDown,
|
||||||
TrendingUp,
|
TrendingUp,
|
||||||
|
UploadIcon,
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
import { Input } from "@/components/ui/input";
|
import { Input } from "@/components/ui/input";
|
||||||
import { InputGroup, InputGroupText } from "@/components/ui/input-group";
|
import { InputGroup, InputGroupText } from "@/components/ui/input-group";
|
||||||
|
|
@ -43,11 +44,14 @@ import { useRouter, useSearchParams } from "next/navigation";
|
||||||
import TablePagination from "@/components/table/table-pagination";
|
import TablePagination from "@/components/table/table-pagination";
|
||||||
import columns from "./columns";
|
import columns from "./columns";
|
||||||
import { paginationSchedule } from "@/service/schedule/schedule";
|
import { paginationSchedule } from "@/service/schedule/schedule";
|
||||||
|
import { useTranslations } from "next-intl";
|
||||||
|
import { CardHeader, CardTitle } from "@/components/ui/card";
|
||||||
|
import { Link } from "@/i18n/routing";
|
||||||
|
|
||||||
const PressReleaseTable = () => {
|
const PressReleaseTable = () => {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const searchParams = useSearchParams();
|
const searchParams = useSearchParams();
|
||||||
|
const t = useTranslations("Schedule");
|
||||||
const [dataTable, setDataTable] = React.useState<any[]>([]);
|
const [dataTable, setDataTable] = React.useState<any[]>([]);
|
||||||
const [totalData, setTotalData] = React.useState<number>(1);
|
const [totalData, setTotalData] = React.useState<number>(1);
|
||||||
const [sorting, setSorting] = React.useState<SortingState>([]);
|
const [sorting, setSorting] = React.useState<SortingState>([]);
|
||||||
|
|
@ -123,81 +127,107 @@ const PressReleaseTable = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="w-full overflow-x-auto">
|
<div>
|
||||||
<div className="flex justify-between items-center px-5 gap-2">
|
<CardHeader className="border-b border-solid border-default-200 mb-6">
|
||||||
<div className="w-[150px] md:w-[250px] lg:w-[250px]">
|
<CardTitle>
|
||||||
<InputGroup merged>
|
<div className="flex items-center">
|
||||||
<InputGroupText className="bg-transparent dark:border-secondary dark:group-focus-within:border-secondary">
|
<div className="flex-1 text-xl font-medium text-default-900">
|
||||||
<Search className=" h-4 w-4 dark:text-white" />
|
{t("press-release")} {t("schedule")}
|
||||||
</InputGroupText>
|
</div>
|
||||||
|
<div className="flex-none">
|
||||||
|
<Link href={"/contributor/schedule/press-release/create"}>
|
||||||
|
<Button color="primary" className="text-white">
|
||||||
|
<UploadIcon />
|
||||||
|
{t("create-schedule")}
|
||||||
|
</Button>
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</CardTitle>
|
||||||
|
</CardHeader>
|
||||||
|
<div className="w-full overflow-x-auto">
|
||||||
|
<div className="flex justify-between items-center px-5 gap-2">
|
||||||
|
<div className="w-[150px] md:w-[250px] lg:w-[250px]">
|
||||||
|
<InputGroup merged>
|
||||||
|
<InputGroupText className="bg-transparent dark:border-secondary dark:group-focus-within:border-secondary">
|
||||||
|
<Search className=" h-4 w-4 dark:text-white" />
|
||||||
|
</InputGroupText>
|
||||||
|
<Input
|
||||||
|
type="text"
|
||||||
|
placeholder="Search Title..."
|
||||||
|
className="bg-transparent dark:border-secondary dark:placeholder-white/80 dark:focus:border-secondary dark:text-white"
|
||||||
|
value={search}
|
||||||
|
onChange={handleSearch}
|
||||||
|
/>
|
||||||
|
</InputGroup>
|
||||||
|
</div>
|
||||||
|
<div className="w-[150px] md:w-[250px] lg:w-[250px]">
|
||||||
<Input
|
<Input
|
||||||
type="text"
|
placeholder="Filter Status..."
|
||||||
placeholder="Search Judul..."
|
value={
|
||||||
className="bg-transparent dark:border-secondary dark:placeholder-white/80 dark:focus:border-secondary dark:text-white"
|
(table.getColumn("status")?.getFilterValue() as string) ?? ""
|
||||||
value={search}
|
}
|
||||||
onChange={handleSearch}
|
onChange={(event: React.ChangeEvent<HTMLInputElement>) =>
|
||||||
|
table.getColumn("status")?.setFilterValue(event.target.value)
|
||||||
|
}
|
||||||
|
className="w-full "
|
||||||
/>
|
/>
|
||||||
</InputGroup>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="w-[150px] md:w-[250px] lg:w-[250px]">
|
<Table className="overflow-hidden mt-3">
|
||||||
<Input
|
<TableHeader>
|
||||||
placeholder="Filter Status..."
|
{table.getHeaderGroups().map((headerGroup) => (
|
||||||
value={
|
<TableRow key={headerGroup.id} className="bg-default-200">
|
||||||
(table.getColumn("status")?.getFilterValue() as string) ?? ""
|
{headerGroup.headers.map((header) => (
|
||||||
}
|
<TableHead key={header.id}>
|
||||||
onChange={(event: React.ChangeEvent<HTMLInputElement>) =>
|
{header.isPlaceholder
|
||||||
table.getColumn("status")?.setFilterValue(event.target.value)
|
? null
|
||||||
}
|
: flexRender(
|
||||||
className="w-full "
|
header.column.columnDef.header,
|
||||||
/>
|
header.getContext()
|
||||||
</div>
|
)}
|
||||||
</div>
|
</TableHead>
|
||||||
<Table className="overflow-hidden mt-3">
|
|
||||||
<TableHeader>
|
|
||||||
{table.getHeaderGroups().map((headerGroup) => (
|
|
||||||
<TableRow key={headerGroup.id} className="bg-default-200">
|
|
||||||
{headerGroup.headers.map((header) => (
|
|
||||||
<TableHead key={header.id}>
|
|
||||||
{header.isPlaceholder
|
|
||||||
? null
|
|
||||||
: flexRender(
|
|
||||||
header.column.columnDef.header,
|
|
||||||
header.getContext()
|
|
||||||
)}
|
|
||||||
</TableHead>
|
|
||||||
))}
|
|
||||||
</TableRow>
|
|
||||||
))}
|
|
||||||
</TableHeader>
|
|
||||||
<TableBody>
|
|
||||||
{table.getRowModel().rows?.length ? (
|
|
||||||
table.getRowModel().rows.map((row) => (
|
|
||||||
<TableRow
|
|
||||||
key={row.id}
|
|
||||||
data-state={row.getIsSelected() && "selected"}
|
|
||||||
className="h-[75px]"
|
|
||||||
>
|
|
||||||
{row.getVisibleCells().map((cell) => (
|
|
||||||
<TableCell key={cell.id}>
|
|
||||||
{flexRender(cell.column.columnDef.cell, cell.getContext())}
|
|
||||||
</TableCell>
|
|
||||||
))}
|
))}
|
||||||
</TableRow>
|
</TableRow>
|
||||||
))
|
))}
|
||||||
) : (
|
</TableHeader>
|
||||||
<TableRow>
|
<TableBody>
|
||||||
<TableCell colSpan={columns.length} className="h-24 text-center">
|
{table.getRowModel().rows?.length ? (
|
||||||
No results.
|
table.getRowModel().rows.map((row) => (
|
||||||
</TableCell>
|
<TableRow
|
||||||
</TableRow>
|
key={row.id}
|
||||||
)}
|
data-state={row.getIsSelected() && "selected"}
|
||||||
</TableBody>
|
className="h-[75px]"
|
||||||
</Table>
|
>
|
||||||
<TablePagination
|
{row.getVisibleCells().map((cell) => (
|
||||||
table={table}
|
<TableCell key={cell.id}>
|
||||||
totalData={totalData}
|
{flexRender(
|
||||||
totalPage={totalPage}
|
cell.column.columnDef.cell,
|
||||||
/>
|
cell.getContext()
|
||||||
|
)}
|
||||||
|
</TableCell>
|
||||||
|
))}
|
||||||
|
</TableRow>
|
||||||
|
))
|
||||||
|
) : (
|
||||||
|
<TableRow>
|
||||||
|
<TableCell
|
||||||
|
colSpan={columns.length}
|
||||||
|
className="h-24 text-center"
|
||||||
|
>
|
||||||
|
No results.
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
)}
|
||||||
|
</TableBody>
|
||||||
|
</Table>
|
||||||
|
<TablePagination
|
||||||
|
table={table}
|
||||||
|
totalData={totalData}
|
||||||
|
totalPage={totalPage}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
\{" "}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -11,23 +11,6 @@ const PressReleasePage = async () => {
|
||||||
<SiteBreadcrumb />
|
<SiteBreadcrumb />
|
||||||
<div className="space-y-4">
|
<div className="space-y-4">
|
||||||
<Card>
|
<Card>
|
||||||
<CardHeader className="border-b border-solid border-default-200 mb-6">
|
|
||||||
<CardTitle>
|
|
||||||
<div className="flex items-center">
|
|
||||||
<div className="flex-1 text-xl font-medium text-default-900">
|
|
||||||
Jadwal Pers Rilis
|
|
||||||
</div>
|
|
||||||
<div className="flex-none">
|
|
||||||
<Link href={"/contributor/schedule/press-release/create"}>
|
|
||||||
<Button color="primary" className="text-white">
|
|
||||||
<UploadIcon />
|
|
||||||
Buat Jadwal
|
|
||||||
</Button>
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent className="p-0">
|
<CardContent className="p-0">
|
||||||
<PressReleaseTable />
|
<PressReleaseTable />
|
||||||
</CardContent>
|
</CardContent>
|
||||||
|
|
|
||||||
|
|
@ -55,11 +55,12 @@ import columns from "./columns";
|
||||||
import { listTask } from "@/service/task";
|
import { listTask } from "@/service/task";
|
||||||
import { Label } from "@/components/ui/label";
|
import { Label } from "@/components/ui/label";
|
||||||
import { format } from "date-fns";
|
import { format } from "date-fns";
|
||||||
|
import { useTranslations } from "next-intl";
|
||||||
|
|
||||||
const TaskTable = () => {
|
const TaskTable = () => {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const searchParams = useSearchParams();
|
const searchParams = useSearchParams();
|
||||||
|
const t = useTranslations("AnalyticsDashboard");
|
||||||
const [dataTable, setDataTable] = React.useState<any[]>([]);
|
const [dataTable, setDataTable] = React.useState<any[]>([]);
|
||||||
const [totalData, setTotalData] = React.useState<number>(1);
|
const [totalData, setTotalData] = React.useState<number>(1);
|
||||||
const [sorting, setSorting] = React.useState<SortingState>([]);
|
const [sorting, setSorting] = React.useState<SortingState>([]);
|
||||||
|
|
@ -205,7 +206,7 @@ const TaskTable = () => {
|
||||||
}
|
}
|
||||||
px-[18px] py-1 transition duration-100 rounded`}
|
px-[18px] py-1 transition duration-100 rounded`}
|
||||||
>
|
>
|
||||||
Atensi Khusus
|
{t("special-attention")}
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span
|
||||||
className={`
|
className={`
|
||||||
|
|
@ -217,7 +218,7 @@ const TaskTable = () => {
|
||||||
px-[18px] py-1 transition duration-100 rounded
|
px-[18px] py-1 transition duration-100 rounded
|
||||||
`}
|
`}
|
||||||
>
|
>
|
||||||
Tugas Harian
|
{t("daily-tasks")}
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -232,7 +233,7 @@ const TaskTable = () => {
|
||||||
</InputGroupText>
|
</InputGroupText>
|
||||||
<Input
|
<Input
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Search Judul dan Code"
|
placeholder="Search Title dan Code"
|
||||||
className="bg-transparent dark:border-secondary dark:placeholder-white/80 dark:focus:border-secondary dark:text-white w-full"
|
className="bg-transparent dark:border-secondary dark:placeholder-white/80 dark:focus:border-secondary dark:text-white w-full"
|
||||||
value={search}
|
value={search}
|
||||||
onChange={handleSearch}
|
onChange={handleSearch}
|
||||||
|
|
@ -260,7 +261,7 @@ const TaskTable = () => {
|
||||||
<p>Filter</p>
|
<p>Filter</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="mx-2 my-1">
|
<div className="mx-2 my-1">
|
||||||
<Label>Tanggal Awal</Label>
|
<Label>{t("date")}</Label>
|
||||||
<Input
|
<Input
|
||||||
type="date"
|
type="date"
|
||||||
value={dateFilter}
|
value={dateFilter}
|
||||||
|
|
@ -287,7 +288,7 @@ const TaskTable = () => {
|
||||||
onChange={() => handleStatusCheckboxChange(1)}
|
onChange={() => handleStatusCheckboxChange(1)}
|
||||||
/>
|
/>
|
||||||
<label htmlFor="status-1" className="text-sm">
|
<label htmlFor="status-1" className="text-sm">
|
||||||
Selesai
|
{t("done")}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center px-4 py-1">
|
<div className="flex items-center px-4 py-1">
|
||||||
|
|
@ -299,7 +300,7 @@ const TaskTable = () => {
|
||||||
onChange={() => handleStatusCheckboxChange(2)}
|
onChange={() => handleStatusCheckboxChange(2)}
|
||||||
/>
|
/>
|
||||||
<label htmlFor="status-2" className="text-sm">
|
<label htmlFor="status-2" className="text-sm">
|
||||||
Aktif
|
{t("active")}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</DropdownMenuContent>
|
</DropdownMenuContent>
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,10 @@ import SiteBreadcrumb from "@/components/site-breadcrumb";
|
||||||
import { Link } from "@/components/navigation";
|
import { Link } from "@/components/navigation";
|
||||||
import { checkAuthorization, checkLoginSession } from "@/lib/utils";
|
import { checkAuthorization, checkLoginSession } from "@/lib/utils";
|
||||||
import React, { useEffect } from "react";
|
import React, { useEffect } from "react";
|
||||||
|
import { useTranslations } from "next-intl";
|
||||||
|
|
||||||
const TaskPage = () => {
|
const TaskPage = () => {
|
||||||
|
const t = useTranslations("AnalyticsDashboard");
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
function initState() {
|
function initState() {
|
||||||
checkAuthorization("admin"); // Specify the page, e.g., "admin" or another value
|
checkAuthorization("admin"); // Specify the page, e.g., "admin" or another value
|
||||||
|
|
@ -27,13 +29,13 @@ const TaskPage = () => {
|
||||||
<CardTitle>
|
<CardTitle>
|
||||||
<div className="flex flex-col sm:flex-row lg:flex-row lg:items-center">
|
<div className="flex flex-col sm:flex-row lg:flex-row lg:items-center">
|
||||||
<div className="flex-1 text-xl font-medium text-default-900">
|
<div className="flex-1 text-xl font-medium text-default-900">
|
||||||
Tabel Penugasan
|
{t("tabel")} {t("task")}
|
||||||
</div>
|
</div>
|
||||||
<div className="flex-none">
|
<div className="flex-none">
|
||||||
<Link href={"/contributor/task/create"}>
|
<Link href={"/contributor/task/create"}>
|
||||||
<Button color="primary" className="text-white">
|
<Button color="primary" className="text-white">
|
||||||
<UploadIcon />
|
<UploadIcon />
|
||||||
Buat Penugasan
|
{t("create-task")}
|
||||||
</Button>
|
</Button>
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -174,7 +174,7 @@ const InternalTable = () => {
|
||||||
</InputGroupText>
|
</InputGroupText>
|
||||||
<Input
|
<Input
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Search Judul..."
|
placeholder="Search Title..."
|
||||||
className="bg-transparent dark:border-secondary dark:placeholder-white/80 dark:focus:border-secondary dark:text-white"
|
className="bg-transparent dark:border-secondary dark:placeholder-white/80 dark:focus:border-secondary dark:text-white"
|
||||||
value={search}
|
value={search}
|
||||||
onChange={(e) => setSearch(e.target.value)}
|
onChange={(e) => setSearch(e.target.value)}
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,11 @@ import { Link, useRouter } from "@/i18n/routing";
|
||||||
import { PlusIcon } from "lucide-react";
|
import { PlusIcon } from "lucide-react";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import InternalTable from "./internal/components/internal-table";
|
import InternalTable from "./internal/components/internal-table";
|
||||||
|
import { useTranslations } from "next-intl";
|
||||||
|
|
||||||
const CommunicationPage = () => {
|
const CommunicationPage = () => {
|
||||||
const [tab, setTab] = useState("Pertanyaan Internal");
|
const [tab, setTab] = useState("Pertanyaan Internal");
|
||||||
|
const t = useTranslations("Communication");
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<SiteBreadcrumb />
|
<SiteBreadcrumb />
|
||||||
|
|
@ -23,7 +25,7 @@ const CommunicationPage = () => {
|
||||||
<Link href="/shared/communication/internal/create">
|
<Link href="/shared/communication/internal/create">
|
||||||
<Button color="primary" size="md">
|
<Button color="primary" size="md">
|
||||||
<PlusIcon />
|
<PlusIcon />
|
||||||
Pertanyaan baru
|
{t("new-question")}
|
||||||
</Button>
|
</Button>
|
||||||
</Link>
|
</Link>
|
||||||
)}
|
)}
|
||||||
|
|
@ -31,7 +33,7 @@ const CommunicationPage = () => {
|
||||||
<Link href="/shared/communication/collaboration/create">
|
<Link href="/shared/communication/collaboration/create">
|
||||||
<Button color="primary" size="md">
|
<Button color="primary" size="md">
|
||||||
<PlusIcon />
|
<PlusIcon />
|
||||||
Kolaborasi baru
|
{t("new-collaboration")}
|
||||||
</Button>
|
</Button>
|
||||||
</Link>
|
</Link>
|
||||||
)}
|
)}
|
||||||
|
|
@ -47,7 +49,7 @@ const CommunicationPage = () => {
|
||||||
: "bg-white text-black "
|
: "bg-white text-black "
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
Pertanyaan Internal
|
{t("internal-questions")}
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
rounded="md"
|
rounded="md"
|
||||||
|
|
@ -59,7 +61,7 @@ const CommunicationPage = () => {
|
||||||
: "bg-white text-black "
|
: "bg-white text-black "
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
Eskalasi
|
{t("escalation")}
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
rounded="md"
|
rounded="md"
|
||||||
|
|
@ -71,7 +73,7 @@ const CommunicationPage = () => {
|
||||||
: "bg-white text-black "
|
: "bg-white text-black "
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
Kolaborasi
|
{t("collaboration")}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
{tab === "Pertanyaan Internal" && <InternalTable />}
|
{tab === "Pertanyaan Internal" && <InternalTable />}
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,11 @@ import { Button } from "@/components/ui/button";
|
||||||
import { UploadIcon } from "lucide-react";
|
import { UploadIcon } from "lucide-react";
|
||||||
import { getCookiesDecrypt } from "@/lib/utils";
|
import { getCookiesDecrypt } from "@/lib/utils";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
import { useTranslations } from "next-intl";
|
||||||
|
|
||||||
const ContestPage = () => {
|
const ContestPage = () => {
|
||||||
const [userLevelId, setUserLevelId] = useState<any>(null);
|
const [userLevelId, setUserLevelId] = useState<any>(null);
|
||||||
|
const t = useTranslations("Contest");
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setUserLevelId(Number(getCookiesDecrypt("ulie")));
|
setUserLevelId(Number(getCookiesDecrypt("ulie")));
|
||||||
}, []);
|
}, []);
|
||||||
|
|
@ -24,14 +25,14 @@ const ContestPage = () => {
|
||||||
<CardTitle>
|
<CardTitle>
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
<div className="flex-1 text-xl font-medium text-default-900">
|
<div className="flex-1 text-xl font-medium text-default-900">
|
||||||
Tabel Lomba
|
{t("table")} {t("contest")}
|
||||||
</div>
|
</div>
|
||||||
{userLevelId !== 776 && userLevelId !== null && (
|
{userLevelId !== 776 && userLevelId !== null && (
|
||||||
<div className="flex-none">
|
<div className="flex-none">
|
||||||
<Link href={"/shared/contest/create"}>
|
<Link href={"/shared/contest/create"}>
|
||||||
<Button color="primary" className="text-white">
|
<Button color="primary" className="text-white">
|
||||||
<UploadIcon />
|
<UploadIcon />
|
||||||
Buat Lomba
|
{t("create-contest")}
|
||||||
</Button>
|
</Button>
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1547,10 +1547,22 @@ export default function FormTaskDetail() {
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{uploadResults.map((item) => (
|
{uploadResults.map((item: any) => (
|
||||||
<tr key={item.id} className="border-b">
|
<tr key={item.id} className="border-b">
|
||||||
<td className="px-4 py-2 text-blue-500">
|
<td className="px-4 py-2 text-blue-500">
|
||||||
<a href="">{item.title}</a>
|
<Link
|
||||||
|
href={
|
||||||
|
Number(item?.fileType?.id) == 1
|
||||||
|
? `/contributor/content/image/detail/${item?.id}`
|
||||||
|
: Number(item?.fileType?.id) == 2
|
||||||
|
? `/contributor/content/video/detail/${item?.id}`
|
||||||
|
: Number(item?.fileType?.id) == 3
|
||||||
|
? `/contributor/content/teks/detail/${item?.id}`
|
||||||
|
: `/contributor/content/audio/detail/${item?.id}`
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{item.title}
|
||||||
|
</Link>
|
||||||
</td>
|
</td>
|
||||||
<td className="px-4 py-2">{item.fileType.name}</td>
|
<td className="px-4 py-2">{item.fileType.name}</td>
|
||||||
<td className="px-4 py-2">{item.category.name}</td>
|
<td className="px-4 py-2">{item.category.name}</td>
|
||||||
|
|
|
||||||
|
|
@ -181,7 +181,7 @@ export function getMenuList(pathname: string, t: any): Group[] {
|
||||||
submenus: [
|
submenus: [
|
||||||
{
|
{
|
||||||
href: "/contributor/schedule/press-conference",
|
href: "/contributor/schedule/press-conference",
|
||||||
label: "konferensi pers",
|
label: t("press-conference"),
|
||||||
active: pathname.includes("/schedule/press-conference"),
|
active: pathname.includes("/schedule/press-conference"),
|
||||||
icon: "heroicons:arrow-trending-up",
|
icon: "heroicons:arrow-trending-up",
|
||||||
children: [],
|
children: [],
|
||||||
|
|
@ -195,7 +195,7 @@ export function getMenuList(pathname: string, t: any): Group[] {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
href: "/contributor/schedule/press-release",
|
href: "/contributor/schedule/press-release",
|
||||||
label: "pers rilis",
|
label: t("press-release"),
|
||||||
active: pathname.includes("/schedule/press-release"),
|
active: pathname.includes("/schedule/press-release"),
|
||||||
icon: "heroicons:shopping-cart",
|
icon: "heroicons:shopping-cart",
|
||||||
children: [],
|
children: [],
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,12 @@
|
||||||
"create-video": "Create Video",
|
"create-video": "Create Video",
|
||||||
"create-text": "Create Teks",
|
"create-text": "Create Teks",
|
||||||
"create-audio": "Create Audio",
|
"create-audio": "Create Audio",
|
||||||
|
"create-task": "Create Task",
|
||||||
|
"special-attention": "special attention",
|
||||||
|
"daily-tasks": "Daily Tasks",
|
||||||
|
"date": "Date",
|
||||||
|
"active": "Active",
|
||||||
|
"done": "Done",
|
||||||
"image": "Image",
|
"image": "Image",
|
||||||
"video": "Video",
|
"video": "Video",
|
||||||
"audio": "Audio",
|
"audio": "Audio",
|
||||||
|
|
@ -128,7 +134,9 @@
|
||||||
"addEvent": "Add New Agenda",
|
"addEvent": "Add New Agenda",
|
||||||
"shortDesc": "Drag and drop your event or click in the calendar",
|
"shortDesc": "Drag and drop your event or click in the calendar",
|
||||||
"filter": "FILTER",
|
"filter": "FILTER",
|
||||||
"no-data-yet": "Not data yet"
|
"no-data-yet": "Not data yet",
|
||||||
|
"bag-pa-monitoring-results": "BAG PA monitoring results",
|
||||||
|
"monitoring-results": "Monitoring Results"
|
||||||
},
|
},
|
||||||
"TodoApp": {
|
"TodoApp": {
|
||||||
"addTask": "Add Task",
|
"addTask": "Add Task",
|
||||||
|
|
@ -153,6 +161,8 @@
|
||||||
"task": "Task",
|
"task": "Task",
|
||||||
"planning": "Planning",
|
"planning": "Planning",
|
||||||
"schedule": "Schedule",
|
"schedule": "Schedule",
|
||||||
|
"press-conference": "Press Conference",
|
||||||
|
"press-release": "press release",
|
||||||
"curated-content": "Curated Content",
|
"curated-content": "Curated Content",
|
||||||
"communication": "Communication",
|
"communication": "Communication",
|
||||||
"contest": "Contest",
|
"contest": "Contest",
|
||||||
|
|
@ -565,5 +575,29 @@
|
||||||
"Planning": {
|
"Planning": {
|
||||||
"planning": "Planning",
|
"planning": "Planning",
|
||||||
"channel": "Channel"
|
"channel": "Channel"
|
||||||
|
},
|
||||||
|
"Schedule": {
|
||||||
|
"schedule": "Schedule",
|
||||||
|
"press-conference": "Press Conference",
|
||||||
|
"press-release": "Press Release",
|
||||||
|
"create-schedule": "Create Schedule"
|
||||||
|
},
|
||||||
|
"Blog": {
|
||||||
|
"table": "Table",
|
||||||
|
"blog": "Blog",
|
||||||
|
"create-indeks": "Add Blog",
|
||||||
|
"category": "Category"
|
||||||
|
},
|
||||||
|
"Communication": {
|
||||||
|
"internal-questions": "Internal Question",
|
||||||
|
"escalation": "Escalation",
|
||||||
|
"collaboration": "Collaboration",
|
||||||
|
"new-question": "New Question",
|
||||||
|
"new-collaboration": "New Collaboration"
|
||||||
|
},
|
||||||
|
"Contest": {
|
||||||
|
"table": "Table",
|
||||||
|
"contest": "Lomba",
|
||||||
|
"create-contest": "Create Contest"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,12 @@
|
||||||
"create-video": "Unggah Video",
|
"create-video": "Unggah Video",
|
||||||
"create-text": "Unggah Teks",
|
"create-text": "Unggah Teks",
|
||||||
"create-audio": "Unggah Audio",
|
"create-audio": "Unggah Audio",
|
||||||
|
"create-task": "Buat Penugasan",
|
||||||
|
"special-attention": "Atensi Khusus",
|
||||||
|
"daily-tasks": "Tugas Khusus",
|
||||||
|
"date": "Tanggal",
|
||||||
|
"active": "Aktif",
|
||||||
|
"done": "Selesai",
|
||||||
"image": "Image",
|
"image": "Image",
|
||||||
"video": "Video",
|
"video": "Video",
|
||||||
"audio": "Audio",
|
"audio": "Audio",
|
||||||
|
|
@ -129,7 +135,9 @@
|
||||||
"addEvent": "Tambah Agenda Baru",
|
"addEvent": "Tambah Agenda Baru",
|
||||||
"shortDesc": "Drag and drop your event or click in the calendar",
|
"shortDesc": "Drag and drop your event or click in the calendar",
|
||||||
"filter": "FILTER",
|
"filter": "FILTER",
|
||||||
"no-data-yet": "Belum ada Data"
|
"no-data-yet": "Belum ada Data",
|
||||||
|
"bag-pa-monitoring-results": "Hasil Pantauan BAG PA",
|
||||||
|
"monitoring-results": "Hasil Pantauan"
|
||||||
},
|
},
|
||||||
"TodoApp": {
|
"TodoApp": {
|
||||||
"addTask": "Add Task",
|
"addTask": "Add Task",
|
||||||
|
|
@ -154,6 +162,8 @@
|
||||||
"task": "Penugasan",
|
"task": "Penugasan",
|
||||||
"planning": "Perencanaan",
|
"planning": "Perencanaan",
|
||||||
"schedule": "Jadwal",
|
"schedule": "Jadwal",
|
||||||
|
"press-conference": "Konferensi Pers",
|
||||||
|
"press-release": "Pers Rilis",
|
||||||
"curated-content": "Kurasi Konten",
|
"curated-content": "Kurasi Konten",
|
||||||
"communication": "Komunikasi",
|
"communication": "Komunikasi",
|
||||||
"contest": "Lomba",
|
"contest": "Lomba",
|
||||||
|
|
@ -566,5 +576,29 @@
|
||||||
"Planning": {
|
"Planning": {
|
||||||
"planning": "Perencanaan",
|
"planning": "Perencanaan",
|
||||||
"channel": "Kanal"
|
"channel": "Kanal"
|
||||||
|
},
|
||||||
|
"Schedule": {
|
||||||
|
"schedule": "Jadwal",
|
||||||
|
"press-conference": "Konferensi Pers",
|
||||||
|
"press-release": "Pers Rilis",
|
||||||
|
"create-schedule": "Buat Jadwal"
|
||||||
|
},
|
||||||
|
"Blog": {
|
||||||
|
"table": "Tabel",
|
||||||
|
"blog": "Indeks",
|
||||||
|
"create-indeks": "Tambah Indeks",
|
||||||
|
"category": "Kategori"
|
||||||
|
},
|
||||||
|
"Communication": {
|
||||||
|
"internal-questions": "Pertanyaan Internal",
|
||||||
|
"escalation": "Eskalasi",
|
||||||
|
"collaboration": "Kolaborasi",
|
||||||
|
"new-question": "Pertanyaan Baru",
|
||||||
|
"new-collaboration": "Kolaborasi Baru"
|
||||||
|
},
|
||||||
|
"Contest": {
|
||||||
|
"table": "Tabel",
|
||||||
|
"contest": "Lomba",
|
||||||
|
"create-contest": "Buat Lomba"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue