diff --git a/next.config.js b/next.config.js index 9a97971..51fc3ed 100644 --- a/next.config.js +++ b/next.config.js @@ -10,7 +10,7 @@ const nextConfig = { }, transpilePackages: ["next-image-export-optimizer"], env: { - nextImageExportOptimizer_imageFolderPath: "public/images", + nextImageExportOptimizer_imageFolderPath: "public", nextImageExportOptimizer_exportFolderPath: "out", nextImageExportOptimizer_quality: "75", nextImageExportOptimizer_storePicturesInWEBP: "true", @@ -45,6 +45,7 @@ const { withSentryConfig } = require("@sentry/nextjs"); module.exports = withSentryConfig( module.exports, { + enabled: process.env.NODE_ENV === 'production', // For all available options, see: // https://github.com/getsentry/sentry-webpack-plugin#options diff --git a/package-lock.json b/package-lock.json index bdbb138..1331915 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@ant-design/icons": "^5.3.0", "@sentry/nextjs": "^8.26.0", "antd": "^5.12.5", + "apexcharts": "^3.49.1", "cookies-next": "^4.1.1", "dayjs": "^1.11.10", "docxtemplater": "^3.40.0", @@ -4072,8 +4073,7 @@ "node_modules/@yr/monotone-cubic-spline": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", - "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==", - "peer": true + "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==" }, "node_modules/acorn": { "version": "8.12.1", @@ -4236,7 +4236,6 @@ "version": "3.52.0", "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.52.0.tgz", "integrity": "sha512-7dg0ADKs8AA89iYMZMe2sFDG0XK5PfqllKV9N+i3hKHm3vEtdhwz8AlXGm+/b0nJ6jKiaXsqci5LfVxNhtB+dA==", - "peer": true, "dependencies": { "@yr/monotone-cubic-spline": "^1.0.3", "svg.draggable.js": "^2.2.2", @@ -9429,7 +9428,6 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", - "peer": true, "dependencies": { "svg.js": "^2.0.1" }, @@ -9441,7 +9439,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", "integrity": "sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==", - "peer": true, "dependencies": { "svg.js": ">=2.3.x" }, @@ -9453,7 +9450,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", "integrity": "sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==", - "peer": true, "dependencies": { "svg.js": "^2.2.5" }, @@ -9464,14 +9460,12 @@ "node_modules/svg.js": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", - "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==", - "peer": true + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" }, "node_modules/svg.pathmorphing.js": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", - "peer": true, "dependencies": { "svg.js": "^2.4.0" }, @@ -9483,7 +9477,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", - "peer": true, "dependencies": { "svg.js": "^2.6.5", "svg.select.js": "^2.1.2" @@ -9496,7 +9489,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", - "peer": true, "dependencies": { "svg.js": "^2.2.5" }, @@ -9508,7 +9500,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", - "peer": true, "dependencies": { "svg.js": "^2.6.5" }, diff --git a/public/css/template.scss b/public/css/template.scss index f75ee2b..cef2e61 100644 --- a/public/css/template.scss +++ b/public/css/template.scss @@ -250,7 +250,7 @@ section { .ant-upload-select { background-color: #ffffff !important; - border: 1px solid #e1e3ea !important; + //border: 1px solid #e1e3ea !important; overflow: hidden; } @@ -1816,4 +1816,8 @@ section { .ant-spin .ant-spin-dot-holder { color: var(--primary); +} + +hr.border{ + border: 1px dashed #e9e9e9; } \ No newline at end of file diff --git a/public/sw.js.map b/public/sw.js.map index 1831f7a..7c9a05b 100644 --- a/public/sw.js.map +++ b/public/sw.js.map @@ -1 +1 @@ -{"version":3,"file":"sw.js","sources":["../../../Users/modern/AppData/Local/Temp/d3da5137cc0f02db0dee33dd804e57ce/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from 'C:/laragon/www/das/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkFirst as workbox_strategies_NetworkFirst} from 'C:/laragon/www/das/node_modules/workbox-strategies/NetworkFirst.mjs';\nimport {NetworkOnly as workbox_strategies_NetworkOnly} from 'C:/laragon/www/das/node_modules/workbox-strategies/NetworkOnly.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from 'C:/laragon/www/das/node_modules/workbox-core/clientsClaim.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\nimportScripts(\n \n);\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n\nworkbox_routing_registerRoute(\"/\", new workbox_strategies_NetworkFirst({ \"cacheName\":\"start-url\", plugins: [{ cacheWillUpdate: async ({ request, response, event, state }) => { if (response && response.type === 'opaqueredirect') { return new Response(response.body, { status: 200, statusText: 'OK', headers: response.headers }) } return response } }] }), 'GET');\nworkbox_routing_registerRoute(/.*/i, new workbox_strategies_NetworkOnly({ \"cacheName\":\"dev\", plugins: [] }), 'GET');\n\n\n\n\n"],"names":["importScripts","self","skipWaiting","workbox_core_clientsClaim","workbox_routing_registerRoute","workbox_strategies_NetworkFirst","plugins","cacheWillUpdate","request","response","event","state","type","Response","body","status","statusText","headers","workbox_strategies_NetworkOnly"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"sw.js","sources":["C:/Users/Zame/AppData/Local/Temp/54f006ce701c372e5d85677bc3eb65a7/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from 'E:/JS PROJECT/das/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkFirst as workbox_strategies_NetworkFirst} from 'E:/JS PROJECT/das/node_modules/workbox-strategies/NetworkFirst.mjs';\nimport {NetworkOnly as workbox_strategies_NetworkOnly} from 'E:/JS PROJECT/das/node_modules/workbox-strategies/NetworkOnly.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from 'E:/JS PROJECT/das/node_modules/workbox-core/clientsClaim.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\nimportScripts(\n \n);\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n\nworkbox_routing_registerRoute(\"/\", new workbox_strategies_NetworkFirst({ \"cacheName\":\"start-url\", plugins: [{ cacheWillUpdate: async ({ request, response, event, state }) => { if (response && response.type === 'opaqueredirect') { return new Response(response.body, { status: 200, statusText: 'OK', headers: response.headers }) } return response } }] }), 'GET');\nworkbox_routing_registerRoute(/.*/i, new workbox_strategies_NetworkOnly({ \"cacheName\":\"dev\", plugins: [] }), 'GET');\n\n\n\n\n"],"names":["importScripts","self","skipWaiting","workbox_core_clientsClaim","workbox_routing_registerRoute","workbox_strategies_NetworkFirst","plugins","cacheWillUpdate","request","response","event","state","type","Response","body","status","statusText","headers","workbox_strategies_NetworkOnly"],"mappings":"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"} \ No newline at end of file diff --git a/src/app/api/sentry-example-api/route.js b/src/app/api/sentry-example-api/route.js deleted file mode 100644 index f486f3d..0000000 --- a/src/app/api/sentry-example-api/route.js +++ /dev/null @@ -1,9 +0,0 @@ -import { NextResponse } from "next/server"; - -export const dynamic = "force-dynamic"; - -// A faulty API route to test Sentry's error monitoring -export function GET() { - throw new Error("Sentry Example API Route Error"); - return NextResponse.json({ data: "Testing Sentry Error..." }); -} diff --git a/src/app/main/karyawan/penjadwalan/daftarPenjadwalan/FormModal.jsx b/src/app/main/karyawan/penjadwalan/daftarPenjadwalan/FormModal.jsx new file mode 100644 index 0000000..b525736 --- /dev/null +++ b/src/app/main/karyawan/penjadwalan/daftarPenjadwalan/FormModal.jsx @@ -0,0 +1,142 @@ +import {useForm} from "react-hook-form"; +import {useEffect, useState} from "react"; +import {Button, Col, Modal, Row, Spin, TimePicker, Upload} from "antd"; +import {CloseOutlined, UploadOutlined} from "@ant-design/icons"; +import Input from "@/components/util/Input"; +import "./style.scss"; +import {DropdownAPI} from "@/lib/DropdownAPI"; + +const {RangePicker} = TimePicker; + +export default function FormModal({modalStatus, actClose, data, loadingModal, jenis}) { + const [viewReadonly, setViewReadonly] = useState(false) + const [dropdownLoading, setDropdownLoading] = useState(false) + const [dropdown, setDropdown] = useState({ + jabatanId: [], karyawanId: [], jenisId: [] + }) + const [fileList, setFileList] = useState(null); + + const props = { + onRemove: (file) => { + const index = fileList.indexOf(file); + const newFileList = fileList.slice(); + newFileList.splice(index, 1); + setFileList(newFileList); + }, + beforeUpload: (file) => { + console.log(file) + setFileList([file]); + return false; + }, + fileList, + }; + + const { + register, setValue, watch, getValues, formState: {errors}, + } = useForm(); + + const dropdownInit = async () => { + setDropdownLoading(true) + let listJabatan = await DropdownAPI.jabatan(); + let listKaryawan = await DropdownAPI.karyawan(); + let listJenis = await DropdownAPI.jenisPenjadwalan(); + + setDropdown({ + jabatanId: listJabatan, karyawanId: listKaryawan, jenisId: listJenis, + }) + setDropdownLoading(false) + } + + + const TypeAction = () => { + if (jenis === 'detail') { + return (<>) + } else { + return () + } + } + + useEffect(() => { + if (jenis === 'detail') { + setViewReadonly(true); + } else { + + setViewReadonly(false); + } + }, [jenis]); + + useEffect(() => { + dropdownInit() + }, []); + + return ( + +
+ +
+
+
Data Penjadwalan
+
Data Penjadwalan
+
+
+ + + + + + + + + + + + + + + + + + + +
+ + + {/**/} + + +
+ +
+ +
+
+ +
+ + + + ) + +} \ No newline at end of file diff --git a/src/app/main/karyawan/penjadwalan/daftarPenjadwalan/page.jsx b/src/app/main/karyawan/penjadwalan/daftarPenjadwalan/page.jsx new file mode 100644 index 0000000..e21b02f --- /dev/null +++ b/src/app/main/karyawan/penjadwalan/daftarPenjadwalan/page.jsx @@ -0,0 +1,182 @@ +"use client" +import {useEffect, useState} from "react"; +import {Helper} from "@/lib/Helper"; +import WrapperContent from "@/components/util/WrapperContent"; +import SearchInput from "@/components/util/SearchInput"; +import {API} from "@/lib/API"; +import notifStore from "@/store/notifStore"; +import {EditOutlined, PlusCircleOutlined, ReloadOutlined, SettingOutlined} from "@ant-design/icons"; +import {Col, Dropdown} from "antd"; +import FormModal from "./FormModal"; +import DTAntServerSide from "@/components/util/DTAntServerSide"; +import Input from "@/components/util/Input"; +import {DropdownAPI} from "@/lib/DropdownAPI"; +import {useForm} from "react-hook-form"; + +export default function Page() { + const {notifOpen} = notifStore() + const [searchText, setSearchText] = useState(null); + const [trigerGetData, setTrigerGetData] = useState(0) + const [loadingTable, setLoadingTable] = useState(true) + const [dropdownLoading, setDropdownLoading] = useState(false) + const [dropdown, setDropdown] = useState({ + jabatanId: [], karyawanId: [], jenisId: [] + }) + const { + register, setValue, watch, getValues, formState: {errors}, + } = useForm(); + const [modal, setModal] = useState({ + loadingModal:false, + modalStatus:false, + jenis:null, + data:[] + }) + const [tableColumn, setTableColumn] = useState([ + { + title: "Tanggal Dibuat", render: (_, row) => (Helper.formatDate(row.crtdt, 'd-M-Y H:i:s')) + }, { + title: "Nama Karyawan", render: (_, row) => ("Zamzam") + }, { + title: "Jabatan", render: (_, row) => ("Staf") + }, { + title: "Jenis", render: (_, row) => ("Dinas") + }, { + title: "Lama", render: (_, row) => ("5 Hari") + }, { + title: "Mulai - Selesai", render: (_, row) => ("13 Mei 2024 - 18 Meni 2024") + }, { + title: "Keterangan", render: (_, row) => ("Release Web") + }, { + title: "Dokumen / File", render: (_, row) => ("perjalanandinas.pdf") + }, { + render: (_, row) => { + const items = [{ + key: '1', label: (), + }]; + + return (<> + + + + + + ); + }, width: "40px" + },]); + + const handleSearch = (event) => { + const handler = setTimeout(() => { + setSearchText(event.target.value); + }, 1000); + + return () => { + clearTimeout(handler); + }; + }; + + const dropdownInit = async () => { + setDropdownLoading(true) + let listJabatan = await DropdownAPI.jabatan(); + let listKaryawan = await DropdownAPI.karyawan(); + let listJenis = await DropdownAPI.jenisPenjadwalan(); + + setDropdown({ + jabatanId: listJabatan, karyawanId: listKaryawan, jenisId: listJenis, + }) + setDropdownLoading(false) + } + + + const modalOpen = async (id,type) => { + setModal(prev => ({ + ...prev, + modalStatus: true, + jenis: type, + loadingModal: true + })); + + let res = await API.GET('/ref/karyawan/'+id) + + setModal(prev => ({ + ...prev, + data: res.result, + loadingModal: false + })); + } + + useEffect(() => { + dropdownInit() + }, []); + return (<> + +
+
+
+
+
Penjadwalan
+
Penjadwalan Karyawan
+
+
Penjadwalan Karyawan
+
+
+ +
+ +
+
+ +
+ + +
+
+ +
+
+ {tableColumn ? : ("loading")} + +
+
+
+
+ { + setModal(prev => ({ + ...prev, + modalStatus: false, + loadingModal: false + })); + }} + data={modal?.data} /> + ) +} \ No newline at end of file diff --git a/src/app/main/karyawan/penjadwalan/daftarPenjadwalan/style.scss b/src/app/main/karyawan/penjadwalan/daftarPenjadwalan/style.scss new file mode 100644 index 0000000..8279593 --- /dev/null +++ b/src/app/main/karyawan/penjadwalan/daftarPenjadwalan/style.scss @@ -0,0 +1,26 @@ +.form-shift{ + display: flex; + gap: 10px; + width: 100%; + background: #F4F4F4; + border-radius: 20px; + justify-content: space-between; + margin-bottom: 20px; + + .title{ + width: 30%; + padding: 10px 20px; + font-size: 13px; + font-weight: 600; + } + .input { + .ant-picker{ + border-radius: 20px; + height: 100%; + + .ant-picker-input >input { + text-align: center; + } + } + } +} \ No newline at end of file diff --git a/src/app/main/karyawan/penjadwalan/jenisPenjadwalan/page.jsx b/src/app/main/karyawan/penjadwalan/jenisPenjadwalan/page.jsx new file mode 100644 index 0000000..834b26d --- /dev/null +++ b/src/app/main/karyawan/penjadwalan/jenisPenjadwalan/page.jsx @@ -0,0 +1,56 @@ +"use client" +import {useEffect, useState} from "react"; +import RefTemplate from "@/components/refTemplate/Main"; +import {Helper} from "@/lib/Helper"; + +export default function Page() { + const [listForm, setListForm] = useState() + + const initListForm = async () => { + + // TYPE form + setListForm([ + { + type: 'text', + name: 'tipeQuotesNm', + alias: 'Jenis Penjadwalan', + maxLength: '150', + required: true, + col: 24 + }]) + } + + useEffect(() => { + initListForm() + }, []); + return ( + <> + a.tipeQuotesId - b.tipeQuotesId + }, + { + title: "Jenis Penjadwalan", + dataIndex: 'tipeQuotesNm', + sorter: (a, b) => b.tipeQuotesNm.localeCompare(a.tipeQuotesNm) + }, + { + title: "Update Terakhir", + render: (_, row) => (Helper.formatDate(row.uptdt,'d-M-Y H:i:s')) + }, + + ]} + listForm={listForm} + /> + + ) +} \ No newline at end of file diff --git a/src/app/main/karyawan/shift/jenisShift/FormModal.jsx b/src/app/main/karyawan/shift/jenisShift/FormModal.jsx new file mode 100644 index 0000000..6a05f73 --- /dev/null +++ b/src/app/main/karyawan/shift/jenisShift/FormModal.jsx @@ -0,0 +1,109 @@ +import {useForm} from "react-hook-form"; +import {useEffect, useState} from "react"; +import {Col, Modal, Row, Spin} from "antd"; +import {CloseOutlined} from "@ant-design/icons"; +import Input from "@/components/util/Input"; +import { Flex, TimePicker } from 'antd'; +const { RangePicker } = TimePicker; + +import dayjs from 'dayjs'; +import "./style.scss"; + +export default function FormModal({modalStatus, actClose, data, loadingModal,jenis}) { + const [viewReadonly, setViewReadonly] = useState(false) + const format = 'HH:mm'; + const { + register, setValue, watch, getValues, formState: {errors}, + } = useForm(); + + const TypeAction = () => { + if(jenis === 'detail'){ + return( + <> + ) + }else{ + return( + + ) + } + } + + useEffect(() => { + if (jenis === 'detail'){ + setViewReadonly(true); + }else{ + + setViewReadonly(false); + } + }, [jenis]); + + return ( + +
+ +
+
+
Data Jenis Shift
+
Data Jenis Shift
+
+
+ + + + + +
+
Senin
+
+
+ + +
+
Selasa
+
+
+ + +
+
Rabu
+
+
+ + +
+
Kamis
+
+
+ + +
+
Jum'at
+
+
+ + +
+
Sabtu
+
+
+ + +
+
Minggu
+
+
+ +
+ +
+ +
+
+ +
+ + + + ) + +} \ No newline at end of file diff --git a/src/app/main/karyawan/shift/jenisShift/page.jsx b/src/app/main/karyawan/shift/jenisShift/page.jsx index 977de5c..32b577a 100644 --- a/src/app/main/karyawan/shift/jenisShift/page.jsx +++ b/src/app/main/karyawan/shift/jenisShift/page.jsx @@ -1,64 +1,160 @@ "use client" import {useEffect, useState} from "react"; -import RefTemplate from "@/components/refTemplate/Main"; import {Helper} from "@/lib/Helper"; +import WrapperContent from "@/components/util/WrapperContent"; +import SearchInput from "@/components/util/SearchInput"; +import DTAnt from "@/components/util/DTAnt"; +import {API} from "@/lib/API"; +import notifStore from "@/store/notifStore"; +import {EditOutlined, PlusCircleOutlined, ReloadOutlined, SettingOutlined} from "@ant-design/icons"; +import {Dropdown} from "antd"; +import FormModal from "./FormModal"; export default function Page() { - const [listForm, setListForm] = useState() + const {notifOpen} = notifStore() + const [searchText, setSearchText] = useState(null); + const [Data, setData] = useState([]); + const [loadingTable, setLoadingTable] = useState(true) + const [modal, setModal] = useState({ + loadingModal:false, + modalStatus:false, + jenis:null, + data:[] + }) + const [tableColumn, setTableColumn] = useState([ + { + title: "Update Terakhir", render: (_, row) => (Helper.formatDate(row.uptdt, 'd-M-Y H:i:s')) + }, { + title: "Nama Shift", render: (_, row) => ("Shift Normal") + }, { + title: "Senin", render: (_, row) => ("09:00 - 17:00") + }, { + title: "Selasa", render: (_, row) => ("09:00 - 17:00") + }, { + title: "Rabu", render: (_, row) => ("09:00 - 17:00") + }, { + title: "Kamis", render: (_, row) => ("09:00 - 17:00") + }, { + title: "Jum'at", render: (_, row) => ("09:00 - 17:00") + }, { + title: "Sabtu", render: (_, row) => ("09:00 - 17:00") + }, { + title: "Minggu", render: (_, row) => ("09:00 - 17:00") + }, { + render: (_, row) => { + const items = [{ + key: '1', label: (), + }]; - const initListForm = async () => { + return (<> + + + + - // TYPE form - setListForm([ - { - type: 'text', - name: 'divisiNm', - alias: 'Divisi', - maxLength: '150', - required: true, - col: 24 - }]) + ); + }, width: "40px" + },]); + + + const handleSearch = (event) => { + const handler = setTimeout(() => { + setSearchText(event.target.value); + }, 1000); + + return () => { + clearTimeout(handler); + }; + }; + + const filteredData = Data?.data?.filter((item) => Object.values(item).some((value) => { + if (searchText) { + return value?.toString().toLowerCase().includes(searchText.toLowerCase()) + } else { + return value + } + })); + + const getData = async () => { + setLoadingTable(true) + let response = await API.GET('/ref/divisi') + if (response.status !== 200) { + setLoadingTable(false) + notifOpen("Gagal", response?.result?.message, "danger"); + return false + } + console.log(response) + + setData(response?.result) + setLoadingTable(false) + } + + const modalOpen = async (id,type) => { + setModal(prev => ({ + ...prev, + modalStatus: true, + jenis: type, + loadingModal: true + })); + + let res = await API.GET('/ref/karyawan/'+id) + + setModal(prev => ({ + ...prev, + data: res.result, + loadingModal: false + })); } useEffect(() => { - initListForm() + getData() }, []); - return ( - <> - a.divisiId - b.divisiId - }, - { - title: "Divisi", - dataIndex: 'divisiNm', - sorter: (a, b) => b.divisiNm.localeCompare(a.divisiNm) - }, - { - title: "Update Terakhir", - render: (_, row) => (Helper.formatDate(row.uptdt,'d-M-Y H:i:s')) - }, - { - title: "Status", - width: '5%', - render: (_, row) => (row.isActive === true ? - Aktif : - Tidak Aktif) - }, + return (<> + +
+
+
+
+
Penjadwalan
+
Penjadwalan Karyawan
+
+
Penjadwalan Karyawan
+
+
+ + + +
+
- ]} - listForm={listForm} - /> - - ) +
+
+ {tableColumn ? : ("loading")} + +
+
+
+
+ { + setModal(prev => ({ + ...prev, + modalStatus: false, + loadingModal: false + })); + }} + data={modal?.data} /> + ) } \ No newline at end of file diff --git a/src/app/main/karyawan/shift/jenisShift/style.scss b/src/app/main/karyawan/shift/jenisShift/style.scss new file mode 100644 index 0000000..8279593 --- /dev/null +++ b/src/app/main/karyawan/shift/jenisShift/style.scss @@ -0,0 +1,26 @@ +.form-shift{ + display: flex; + gap: 10px; + width: 100%; + background: #F4F4F4; + border-radius: 20px; + justify-content: space-between; + margin-bottom: 20px; + + .title{ + width: 30%; + padding: 10px 20px; + font-size: 13px; + font-weight: 600; + } + .input { + .ant-picker{ + border-radius: 20px; + height: 100%; + + .ant-picker-input >input { + text-align: center; + } + } + } +} \ No newline at end of file diff --git a/src/app/main/karyawan/shift/shiftKaryawan/FormModal.jsx b/src/app/main/karyawan/shift/shiftKaryawan/FormModal.jsx new file mode 100644 index 0000000..3f1a78c --- /dev/null +++ b/src/app/main/karyawan/shift/shiftKaryawan/FormModal.jsx @@ -0,0 +1,85 @@ +import {useForm} from "react-hook-form"; +import {useEffect, useState} from "react"; +import {Col, Modal, Row, Spin} from "antd"; +import {CloseOutlined} from "@ant-design/icons"; +import Input from "@/components/util/Input"; +import { Flex, TimePicker } from 'antd'; +const { RangePicker } = TimePicker; + +import dayjs from 'dayjs'; +import "./style.scss"; + +export default function FormModal({modalStatus, actClose, data, loadingModal,jenis}) { + const [viewReadonly, setViewReadonly] = useState(false) + const format = 'HH:mm'; + const { + register, setValue, watch, getValues, formState: {errors}, + } = useForm(); + + const TypeAction = () => { + if(jenis === 'detail'){ + return( + <> + ) + }else{ + return( + + ) + } + } + + useEffect(() => { + if (jenis === 'detail'){ + setViewReadonly(true); + }else{ + + setViewReadonly(false); + } + + setValue("karyawanNm",'Zamzam Nurzaman') + + }, [jenis]); + + return ( + +
+ +
+
+
Ubah Shift Karyawan Minggu Depan
+
Ubah Shift Karyawan Minggu Depan
+
+
+ + {(jenis === 'edit') ? + + :'' } + + + + + + + + +
+ +
+
+ +
+ + + + ) + +} \ No newline at end of file diff --git a/src/app/main/karyawan/shift/shiftKaryawan/page.jsx b/src/app/main/karyawan/shift/shiftKaryawan/page.jsx new file mode 100644 index 0000000..74bacb2 --- /dev/null +++ b/src/app/main/karyawan/shift/shiftKaryawan/page.jsx @@ -0,0 +1,154 @@ +"use client" +import {useEffect, useState} from "react"; +import {Helper} from "@/lib/Helper"; +import WrapperContent from "@/components/util/WrapperContent"; +import SearchInput from "@/components/util/SearchInput"; +import DTAnt from "@/components/util/DTAnt"; +import {API} from "@/lib/API"; +import notifStore from "@/store/notifStore"; +import {EditOutlined, PlusCircleOutlined, ReloadOutlined, SettingOutlined} from "@ant-design/icons"; +import {Dropdown} from "antd"; +import FormModal from "./FormModal"; + +export default function Page() { + const {notifOpen} = notifStore() + const [searchText, setSearchText] = useState(null); + const [Data, setData] = useState([]); + const [loadingTable, setLoadingTable] = useState(true) + const [modal, setModal] = useState({ + loadingModal:false, + modalStatus:false, + jenis:null, + data:[] + }) + const [tableColumn, setTableColumn] = useState([ + { + title: "Update Terakhir", render: (_, row) => (Helper.formatDate(row.uptdt, 'd-M-Y H:i:s')) + }, { + title: "Nama Karyawan", render: (_, row) => ("Zamzam Nurzaman") + }, { + title: "Jabatan", render: (_, row) => ("Staf Lapangan") + }, { + title: "Status Pegawai", render: (_, row) => ("Pegawai Tetap") + }, { + title: "Shift Minggu Ini", render: (_, row) => ("Shift Normal") + }, { + title: "Shift Minggu Depan", render: (_, row) => ("Pagi Malam") + }, { + render: (_, row) => { + const items = [{ + key: '1', label: (), + }]; + + return (<> + + + + + + ); + }, width: "40px" + },]); + + + const handleSearch = (event) => { + const handler = setTimeout(() => { + setSearchText(event.target.value); + }, 1000); + + return () => { + clearTimeout(handler); + }; + }; + + const filteredData = Data?.data?.filter((item) => Object.values(item).some((value) => { + if (searchText) { + return value?.toString().toLowerCase().includes(searchText.toLowerCase()) + } else { + return value + } + })); + + const getData = async () => { + setLoadingTable(true) + let response = await API.GET('/ref/divisi') + if (response.status !== 200) { + setLoadingTable(false) + notifOpen("Gagal", response?.result?.message, "danger"); + return false + } + console.log(response) + + setData(response?.result) + setLoadingTable(false) + } + + const modalOpen = async (id,type) => { + setModal(prev => ({ + ...prev, + modalStatus: true, + jenis: type, + loadingModal: true + })); + + let res = await API.GET('/ref/karyawan/'+id) + + setModal(prev => ({ + ...prev, + data: res.result, + loadingModal: false + })); + } + + useEffect(() => { + getData() + }, []); + + return (<> + +
+
+
+
+
Shift
+
Daftar Shift Karyawan
+
+
Daftar Shift Karyawan
+
+
+ + + +
+
+ +
+
+ {tableColumn ? : ("loading")} + +
+
+
+
+ { + setModal(prev => ({ + ...prev, + modalStatus: false, + loadingModal: false + })); + }} + data={modal?.data} /> + ) +} \ No newline at end of file diff --git a/src/app/main/karyawan/shift/shiftKaryawan/style.scss b/src/app/main/karyawan/shift/shiftKaryawan/style.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/sentry-example-page/page.jsx b/src/app/sentry-example-page/page.jsx deleted file mode 100644 index 16f83b1..0000000 --- a/src/app/sentry-example-page/page.jsx +++ /dev/null @@ -1,79 +0,0 @@ -"use client"; - -import Head from "next/head"; -import * as Sentry from "@sentry/nextjs"; - -export default function Page() { - return ( -
- - Sentry Onboarding - - - -
-

- - - -

- -

Get started by sending us a sample error:

- - -

- Next, look for the error on the{" "} - Issues Page. -

-

- For more information, see{" "} - - https://docs.sentry.io/platforms/javascript/guides/nextjs/ - -

-
-
- ); -} diff --git a/src/components/util/DTAnt.jsx b/src/components/util/DTAnt.jsx index 2700fe6..b532fbc 100644 --- a/src/components/util/DTAnt.jsx +++ b/src/components/util/DTAnt.jsx @@ -2,6 +2,7 @@ import React, {useEffect, useState} from "react"; import {Table} from "antd"; import LoadingTable from "@/components/util/LoadingTable"; +import {v4 as uuidv4} from "uuid"; function DTAnt({ columnTable, data, loadingTable, size, pageSize, rowKey, totalRow }) { const [columns, setColumns] = useState([]); @@ -20,7 +21,7 @@ function DTAnt({ columnTable, data, loadingTable, size, pageSize, rowKey, totalR locale={{ emptyText: (loadingTable) ? '-' : null }} columns={columns} dataSource={data} - rowKey={rowKey} + rowKey={() => (rowKey) ? rowKey: uuidv4()} size={(size) ? size : 'medium'} pagination={{ defaultPageSize: (pageSize) ? pageSize : 10, diff --git a/src/components/util/Input/InputSelect.jsx b/src/components/util/Input/InputSelect.jsx index c539904..1efe7ad 100644 --- a/src/components/util/Input/InputSelect.jsx +++ b/src/components/util/Input/InputSelect.jsx @@ -11,6 +11,7 @@ const InputSelect = ({ setValue, setReadonly, setDisabled, + setMultiple, val, loading, withSearch = true, @@ -39,7 +40,8 @@ const InputSelect = ({