From 1174707918efa5434613ccb5b353a0257b2f6b43 Mon Sep 17 00:00:00 2001 From: Abdulbari Date: Thu, 30 Oct 2025 19:21:22 +0300 Subject: [PATCH] Update sge-frontend/src/views/DataSet/EmissionSource.js --- .../src/views/DataSet/EmissionSource.js | 2490 ++++++++--------- 1 file changed, 1245 insertions(+), 1245 deletions(-) diff --git a/sge-frontend/src/views/DataSet/EmissionSource.js b/sge-frontend/src/views/DataSet/EmissionSource.js index f8dcf31..07c9632 100644 --- a/sge-frontend/src/views/DataSet/EmissionSource.js +++ b/sge-frontend/src/views/DataSet/EmissionSource.js @@ -1,1245 +1,1245 @@ -import React, { useState, useEffect } from "react"; -import { ChevronDown, Edit, MoreVertical, Plus, Trash } from "react-feather"; -import { - Card, - CardHeader, - CardTitle, - Input, - Label, - Row, - Col, - Button, - Modal, - ModalHeader, - ModalBody, - ModalFooter, - UncontrolledDropdown, - DropdownToggle, - DropdownMenu, - DropdownItem, -} from "reactstrap"; -import Select from "react-select"; -import DataTable from "react-data-table-component"; -import ReactPaginate from "react-paginate"; -import { useSnackbar } from "notistack"; -import { useDispatch, useSelector } from "react-redux"; -import withReactContent from "sweetalert2-react-content"; -import { default as SweetAlert } from "sweetalert2"; -import { useTranslation } from "react-i18next"; -import { - getEmissionSourcesWithPaginate, - addEmissionSource, - updateEmissionSource, - updateEmissionSourceOfWaste, - deleteEmissionSource, -} from "../../redux/actions/emissionSources/index"; -import { - getSectors, - getSectorById, - getConsuptionUnits, -} from "../../redux/actions/datas"; -import Factors from "../../components/emission-source/factors"; -import { permissionCheck } from "../../components/permission-check"; -import { customFilterForSelect } from "../../utility/Utils"; - -const Swal = withReactContent(SweetAlert); - -const EmissionSource = () => { - const { t } = useTranslation(); - - const initialColumns = [ - { - name: t("EmissionSources.emissionSourceName"), - selector: (row) => row.tag, - sortable: true, - minWidth: "250px", - }, - { - name: t("EmissionSources.subSector"), - selector: (row) => row.subsector, - sortable: false, - minWidth: "250px", - cell: (row) => {row.subSector?.tag || "-"}, - }, - { - name: t("EmissionSources.sector"), - selector: (row) => row.subsector, - sortable: false, - minWidth: "250px", - cell: (row) => {row.subSector?.sector?.tag || "-"}, - }, - { - name: t("EmissionSources.emissionScopes"), - selector: (row) => row.emissionScope, - sortable: false, - minWidth: "250px", - cell: (row) => ( - - {row.emissionScope && row.emissionScope != "null" - ? "Kapsam-" + row.emissionScope - : "-"} - - ), - }, - { - name: t("Actions"), - allowOverflow: false, - maxWidth: "100px", - cell: (row) => { - return ( -
- - - - - - {permissionCheck("emission_source_update") && ( - handleEditEmissionSource(row)} - > - - - {t("Cruds.edit")} - - - )} - {permissionCheck("emission_source_delete") && ( - handleDeleteEmissionSource(row)} - > - - - {t("Cruds.delete")} - - - )} - - -
- ); - }, - }, - ]; - - useEffect(() => { - if ( - !( - permissionCheck("emission_source_delete") || - permissionCheck("emission_source_update") - ) - ) { - const updatedColumns = initialColumns.filter( - (column) => column.name !== ("Aksiyonlar" || "Actions") - ); - setServerSideColumns(updatedColumns); - } - }, []); - - const dispatch = useDispatch(); - const { enqueueSnackbar } = useSnackbar(); - - const [currentPage, setCurrentPage] = useState(1); - const [rowsPerPage, setRowsPerPage] = useState(5); - const [loading, setLoading] = useState(false); - - const [serverSideColumns, setServerSideColumns] = useState(initialColumns); - - const emissionSourceStore = useSelector((state) => state.emissionSources); - const datasStore = useSelector((state) => state.datas); - const [emissionSources, setEmissionSources] = useState([]); - const [selectedSector, setSelectedSector] = useState(null); - const [sectorsOptions, setSectorsOptions] = useState([]); - const [subSectorsOptions, setSubSectorsOptions] = useState([]); - const [showAddEmissionSourceModal, setShowAddEmissionSourceModal] = - useState(false); - const [editingEmissionSourceData, setEditingEmissionSourceData] = useState( - {} - ); - const [searchValue, setSearchValue] = useState(""); - const [selectedSectorFilter, setSelectedSectorFilter] = useState(""); - const [showDeletedEmissionSource, setShowDeletedEmissionSource] = - useState(false); - - useEffect(() => { - dispatch( - getEmissionSourcesWithPaginate({ - currentPage, - rowsPerPage, - selectedSectorFilter, - showDeletedEmissionSource, - }) - ); - }, [ - currentPage, - rowsPerPage, - selectedSectorFilter, - showDeletedEmissionSource, - ]); - - useEffect(() => { - dispatch(getSectors()); - dispatch(getConsuptionUnits({ sector: "Atık" })); - }, []); - - useEffect(() => { - if (selectedSector != null) dispatch(getSectorById(selectedSector)); - }, [selectedSector]); - - useEffect(() => { - if (emissionSourceStore?.emissionSourcesWithPaginate?.content) { - setEmissionSources( - emissionSourceStore?.emissionSourcesWithPaginate?.content - ); - } - }, [emissionSourceStore.emissionSourcesWithPaginate?.content]); - - useEffect(() => { - setSectorsOptions( - datasStore?.sectors.map((sector) => { - return { - value: sector?.id, - label: sector?.tag, - }; - }) - ); - }, [datasStore?.sectors]); - - useEffect(() => { - setSubSectorsOptions( - datasStore?.sector?.subSectors?.map((subSector) => { - return { - value: subSector?.id, - label: subSector?.tag, - }; - }) - ); - }, [datasStore?.sector]); - - const handleFilter = (e) => { - setSearchValue(e.target.value); - - if (e.target.value !== "") { - setEmissionSources( - emissionSourceStore.emissionSourcesWithPaginate?.content?.filter( - (source) => - source.tag - .toUpperCase() - .normalize("NFD") - .replace(/[\u0300-\u036f]/g, "") - .includes( - e.target.value - .toUpperCase() - .normalize("NFD") - .replace(/[\u0300-\u036f]/g, "") - ) - ) - ); - } else { - setEmissionSources( - emissionSourceStore.emissionSourcesWithPaginate?.content - ); - } - }; - - const handlePagination = (page) => { - setCurrentPage(page.selected + 1); - setEmissionSources(emissionSources.emissionSourcesWithPaginate?.content); - }; - - const handlePerPage = (e) => { - setCurrentPage(1); - setRowsPerPage(parseInt(e.target.value)); - setEmissionSources(emissionSources.emissionSourcesWithPaginate?.content); - }; - - const CustomPagination = () => { - const count = Number( - ( - emissionSourceStore?.emissionSourcesWithPaginate?.pageInfo - ?.totalElements / rowsPerPage - ).toFixed(1) - ); -//asdaasdasda - return ( - handlePagination(page)} - pageClassName={"page-item"} - nextLinkClassName={"page-link"} - nextClassName={"page-item next"} - previousClassName={"page-item prev"} - previousLinkClassName={"page-link"} - pageLinkClassName={"page-link"} - breakClassName="page-item" - breakLinkClassName="page-link" - containerClassName={ - "pagination react-paginate separated-pagination pagination-sm justify-content-end pr-1 mt-1" - } - /> - ); - }; - - const onAddEmissionSourceButtonPressed = () => { - setEditingEmissionSourceData({ - emissionSourceConvertUnits: datasStore?.consuptionUnits?.map( - (consuptionUnit) => { - return { - unit: { - id: consuptionUnit.id, - tag: consuptionUnit.tag, - }, - value: "", - }; - } - ), - }); - setShowAddEmissionSourceModal(true); - }; - - function convertToDesiredFormatAndStringify(arr) { - const cleanedArray = arr - .filter((item) => item.unit.tag !== "TJ") - .filter((item) => item.value !== "") - .map((item) => ({ - unitId: item.unit?.id || "", - convertValue: item.value || "", - })); - - return JSON.stringify(cleanedArray).replace(/"([^"]+)":/g, "$1:"); - } - - const onAddEmissionSourceModalButtonPressed = () => { - setLoading(true); - - if (!editingEmissionSourceData.id) { - const newEmissionSourceData = { - tag: editingEmissionSourceData?.tag, - description: editingEmissionSourceData?.description || "-", - emissionScope: editingEmissionSourceData?.emissionScope?.value, - subSector: editingEmissionSourceData?.subSector?.value, - co2: editingEmissionSourceData?.co2 || 0, - ch4: editingEmissionSourceData?.ch4 || 0, - n2o: editingEmissionSourceData?.n2o || 0, - emissionSourceConvertUnits: convertToDesiredFormatAndStringify( - editingEmissionSourceData.emissionSourceConvertUnits - ), - }; - - dispatch(addEmissionSource(newEmissionSourceData)) - .then(() => { - setLoading(false); - setSelectedSector(null); - setShowAddEmissionSourceModal(false); - enqueueSnackbar(t("Warnings.addedSuccessfully"), { - variant: "success", - preventDuplicate: true, - }); - }) - .catch(() => { - setLoading(false); - setShowAddEmissionSourceModal(false); - enqueueSnackbar(t("Warnings.addedFail"), { - variant: "error", - preventDuplicate: true, - }); - }); - } else { - const updateEmissionSourceData = { - id: editingEmissionSourceData.id, - tag: editingEmissionSourceData?.tag, - description: editingEmissionSourceData?.description || "-", - emissionScope: editingEmissionSourceData?.emissionScope?.value, - subSector: editingEmissionSourceData?.subSector?.value, - co2: editingEmissionSourceData?.co2 || 0, - ch4: editingEmissionSourceData?.ch4 || 0, - n2o: editingEmissionSourceData?.n2o || 0, - emissionSourceConvertUnits: convertToDesiredFormatAndStringify( - editingEmissionSourceData.emissionSourceConvertUnits - ), - ...editingEmissionSourceData.wasteEmissionSourceSupplement, - }; - dispatch( - editingEmissionSourceData?.sector?.label != "Atık" - ? updateEmissionSource(updateEmissionSourceData) - : updateEmissionSourceOfWaste(updateEmissionSourceData) - ) - .then(() => { - enqueueSnackbar(t("Warnings.updatedSuccessfully"), { - variant: "success", - }); - setLoading(false); - setSelectedSector(null); - setEditingEmissionSourceData(null); - setShowAddEmissionSourceModal(false); - }) - .catch(() => { - enqueueSnackbar( - `${updateEmissionSourceData.tag}, ${t("Warnings.updatedFail")}`, - { - variant: "error", - } - ); - setLoading(false); - }); - } - }; - - const renderEmissionSourceModal = () => { - //Atık için Modal - if (editingEmissionSourceData?.sector?.label === "Atık") { - return ( - - setShowAddEmissionSourceModal(!showAddEmissionSourceModal) - } - className="modal-dialog-centered" - > - - setShowAddEmissionSourceModal(!showAddEmissionSourceModal) - } - > - {editingEmissionSourceData?.id - ? editingEmissionSourceData.tag - : t("EmissionSources.addEmissionSource")} - - -
- - - setEditingEmissionSourceData({ - ...editingEmissionSourceData, - tag: e.target.value, - }) - } - /> -
- -
- - subSector.label != "Katı Atık Bertarafı" - )} - className="react-select" - placeholder="" - filterOption={customFilterForSelect} - defaultValue={editingEmissionSourceData?.subSector} - onChange={(value) => { - setEditingEmissionSourceData({ - ...editingEmissionSourceData, - subSector: value, - }); - }} - /> -
-
- - {editingEmissionSourceData?.subSector?.label != - "Yakma ve Açık Yanma" ? ( - - - - {editingEmissionSourceData?.subSector?.label != - "Atık Su Arıtma ve Deşarjı" ? ( - - ) : ( - - )} - - - - - { - const inputValue = e.target.value; - if ( - /^\d*\.?\d*$/.test(inputValue) || - inputValue === "" - ) { - setEditingEmissionSourceData({ - ...editingEmissionSourceData, - wasteEmissionSourceSupplement: { - ...editingEmissionSourceData.wasteEmissionSourceSupplement, - dryWeightCH4: inputValue, - }, - }); - } - }} - /> - - {editingEmissionSourceData?.subSector?.label != - "Atık Su Arıtma ve Deşarjı" && ( - - - { - const inputValue = e.target.value; - if ( - /^\d*\.?\d*$/.test(inputValue) || - inputValue === "" - ) { - setEditingEmissionSourceData({ - ...editingEmissionSourceData, - wasteEmissionSourceSupplement: { - ...editingEmissionSourceData.wasteEmissionSourceSupplement, - wetWeightCH4: inputValue, - }, - }); - } - }} - /> - - )} - - - - - {editingEmissionSourceData?.subSector?.label != - "Atık Su Arıtma ve Deşarjı" ? ( - - ) : ( - - )} - - - - - { - const inputValue = e.target.value; - if ( - /^\d*\.?\d*$/.test(inputValue) || - inputValue === "" - ) { - setEditingEmissionSourceData({ - ...editingEmissionSourceData, - wasteEmissionSourceSupplement: { - ...editingEmissionSourceData.wasteEmissionSourceSupplement, - dryWeightN2O: inputValue, - }, - }); - } - }} - /> - - {editingEmissionSourceData?.subSector?.label != - "Atık Su Arıtma ve Deşarjı" && ( - - - { - const inputValue = e.target.value; - if ( - /^\d*\.?\d*$/.test(inputValue) || - inputValue === "" - ) { - setEditingEmissionSourceData({ - ...editingEmissionSourceData, - wasteEmissionSourceSupplement: { - ...editingEmissionSourceData.wasteEmissionSourceSupplement, - wetWeightN2O: inputValue, - }, - }); - } - }} - /> - - )} - - - - ) : ( - -
- - - - - { - const inputValue = e.target.value; - if ( - /^\d*\.?\d*$/.test(inputValue) || - inputValue === "" - ) { - setEditingEmissionSourceData({ - ...editingEmissionSourceData, - wasteEmissionSourceSupplement: { - ...editingEmissionSourceData.wasteEmissionSourceSupplement, - dryWeightCH4: - editingEmissionSourceData - ?.wasteEmissionSourceSupplement - .dryWeightCH4 != 0 && inputValue, - dampWeightCH4: - editingEmissionSourceData - ?.wasteEmissionSourceSupplement - .dampWeightCH4 != 0 && inputValue, - }, - }); - } - }} - /> - - - - { - const inputValue = e.target.value; - if ( - /^\d*\.?\d*$/.test(inputValue) || - inputValue === "" - ) { - setEditingEmissionSourceData({ - ...editingEmissionSourceData, - wasteEmissionSourceSupplement: { - ...editingEmissionSourceData.wasteEmissionSourceSupplement, - wetWeightN2O: inputValue, - }, - }); - } - }} - /> - - -
-
- - - - - { - const inputValue = e.target.value; - if ( - /^\d*\.?\d*$/.test(inputValue) || - inputValue === "" - ) { - setEditingEmissionSourceData({ - ...editingEmissionSourceData, - wasteEmissionSourceSupplement: { - ...editingEmissionSourceData.wasteEmissionSourceSupplement, - wetWeightCH4: inputValue, - }, - }); - } - }} - /> - - - - { - const inputValue = e.target.value; - if ( - /^\d*\.?\d*$/.test(inputValue) || - inputValue === "" - ) { - setEditingEmissionSourceData({ - ...editingEmissionSourceData, - wasteEmissionSourceSupplement: { - ...editingEmissionSourceData.wasteEmissionSourceSupplement, - dryWeightN2O: inputValue, - }, - }); - } - }} - /> - - -
-
- )} -
-
- - - -
- ); - } - - //Atık hariç diğer sektörler için Modal - const convertedUnits = handleConvertUnits( - editingEmissionSourceData?.emissionSourceConvertUnits - ); - - return ( - - setShowAddEmissionSourceModal(!showAddEmissionSourceModal) - } - className="modal-dialog-centered" - > - - setShowAddEmissionSourceModal(!showAddEmissionSourceModal) - } - > - {editingEmissionSourceData?.id - ? editingEmissionSourceData.tag - : t("EmissionSources.addEmissionSource")} - - -
- - - setEditingEmissionSourceData({ - ...editingEmissionSourceData, - tag: e.target.value, - }) - } - /> -
- -
- - { - setEditingEmissionSourceData({ - ...editingEmissionSourceData, - subSector: value, - }); - }} - /> -
-
- - { - return null; - }} - /> - { - const inputValue = e.target.value; - if (/^\d*\.?\d*$/.test(inputValue) || inputValue === "") { - const updatedConvertUnits = [...convertedUnits]; - updatedConvertUnits[index] = { - ...item, - value: inputValue, - }; - setEditingEmissionSourceData({ - ...editingEmissionSourceData, - emissionSourceConvertUnits: updatedConvertUnits, - }); - } - }} - /> - - ); - })} -
- - {/* */} -
- - - -
- ); - }; - - const handleConvertUnits = (emissionSourceConvertUnits) => { - const existingUnitIds = - emissionSourceConvertUnits?.map((item) => item.unit.id) || []; - const missingUnits = datasStore.consuptionUnits.filter( - (unit) => !existingUnitIds.includes(unit.id) - ); - const convertUnitsOfSelectedSource = [ - ...(emissionSourceConvertUnits || []), - ...missingUnits.map((unit) => ({ - unit: { id: unit.id, tag: unit.tag }, - value: "", // You can set the default value for missing units here - })), - ]; - return convertUnitsOfSelectedSource; - }; - - const handleEditEmissionSource = (selectedSource) => { - const sectorOfSelectedSource = { - value: selectedSource?.subSector?.sector?.id, - label: selectedSource?.subSector?.sector?.tag, - }; - const subSectorOfSelectedSource = { - value: selectedSource?.subSector?.id, - label: selectedSource?.subSector?.tag, - }; - const emissionScopeOfSelectedSource = { - value: selectedSource?.emissionScope, - label: selectedSource?.emissionScope - ? "Kapsam-" + selectedSource?.emissionScope - : "", - }; - const convertUnitsOfSelectedSource = - selectedSource?.emissionSourceConvertUnits?.map((item) => ({ - ...item, - value: item.value.toString(), - })); - - const wasteEmissionSourceSupplementOfSelectedSource = { - dryWeightCH4: - selectedSource?.wasteEmissionSourceSupplement?.dryWeightCH4 || 0, - wetWeightCH4: - selectedSource?.wasteEmissionSourceSupplement?.wetWeightCH4 || 0, - dryWeightN2O: - selectedSource?.wasteEmissionSourceSupplement?.dryWeightN2O || 0, - wetWeightN2O: - selectedSource?.wasteEmissionSourceSupplement?.wetWeightN2O || 0, - dampWeightCH4: - selectedSource?.wasteEmissionSourceSupplement?.dampWeightCH4 || 0, - }; - setSelectedSector(selectedSource?.subSector?.sector?.id); - setShowAddEmissionSourceModal(true); - setEditingEmissionSourceData({ - id: selectedSource.id, - tag: selectedSource?.tag, - description: selectedSource?.description || "-", - subSector: selectedSource?.subSector, - co2: selectedSource?.co2, - ch4: selectedSource?.ch4, - n2o: selectedSource?.n2o, - sector: sectorOfSelectedSource, - subSector: subSectorOfSelectedSource, - emissionScope: emissionScopeOfSelectedSource, - emissionSourceConvertUnits: convertUnitsOfSelectedSource, - wasteEmissionSourceSupplement: - wasteEmissionSourceSupplementOfSelectedSource, - }); - }; - - const handleDeleteEmissionSource = async (selectedSource) => { - const result = await Swal.fire({ - title: `${selectedSource.tag}, ${t("Warnings.sureForDelete")}`, - text: t("Warnings.notUndone"), - icon: "warning", - showCancelButton: true, - confirmButtonText: t("Cruds.delete"), - cancelButtonText: t("Cruds.cancel"), - customClass: { - confirmButton: "btn btn-primary", - cancelButton: "btn btn-danger ml-1", - }, - buttonsStyling: false, - }); - if (result.value !== null && result.value === true) { - dispatch(deleteEmissionSource(selectedSource.id)); - } - }; - - return ( -
- - - {t("EmissionSources.emissionSources")} - {permissionCheck("emission_source_create") && ( - - )} - - - -
- - handlePerPage(e)} - > - - - - - - - -
- - - {permissionCheck("deleted_items") && ( -
- { - setShowDeletedEmissionSource(e.target.checked); - setCurrentPage(1); - }} - /> - -
- )} - - - { - setSelectedSectorFilter(e.target.value); - setCurrentPage(1); - }} - > - - {sectorsOptions.map((sector, index) => ( - - ))} - - - -
- } - paginationComponent={CustomPagination} - data={emissionSources} - noDataComponent={ -

- {t("EmissionSources.emissionSource")} - {t("Warnings.notFound")} -

- } - /> -
- {renderEmissionSourceModal()} -
- ); -}; - -export default EmissionSource; +import React, { useState, useEffect } from "react"; +import { ChevronDown, Edit, MoreVertical, Plus, Trash } from "react-feather"; +import { + Card, + CardHeader, + CardTitle, + Input, + Label, + Row, + Col, + Button, + Modal, + ModalHeader, + ModalBody, + ModalFooter, + UncontrolledDropdown, + DropdownToggle, + DropdownMenu, + DropdownItem, +} from "reactstrap"; +import Select from "react-select"; +import DataTable from "react-data-table-component"; +import ReactPaginate from "react-paginate"; +import { useSnackbar } from "notistack"; +import { useDispatch, useSelector } from "react-redux"; +import withReactContent from "sweetalert2-react-content"; +import { default as SweetAlert } from "sweetalert2"; +import { useTranslation } from "react-i18next"; +import { + getEmissionSourcesWithPaginate, + addEmissionSource, + updateEmissionSource, + updateEmissionSourceOfWaste, + deleteEmissionSource, +} from "../../redux/actions/emissionSources/index"; +import { + getSectors, + getSectorById, + getConsuptionUnits, +} from "../../redux/actions/datas"; +import Factors from "../../components/emission-source/factors"; +import { permissionCheck } from "../../components/permission-check"; +import { customFilterForSelect } from "../../utility/Utils"; + +const Swal = withReactContent(SweetAlert); + +const EmissionSource = () => { + const { t } = useTranslation(); + + const initialColumns = [ + { + name: t("EmissionSources.emissionSourceName"), + selector: (row) => row.tag, + sortable: true, + minWidth: "250px", + }, + { + name: t("EmissionSources.subSector"), + selector: (row) => row.subsector, + sortable: false, + minWidth: "250px", + cell: (row) => {row.subSector?.tag || "-"}, + }, + { + name: t("EmissionSources.sector"), + selector: (row) => row.subsector, + sortable: false, + minWidth: "250px", + cell: (row) => {row.subSector?.sector?.tag || "-"}, + }, + { + name: t("EmissionSources.emissionScopes"), + selector: (row) => row.emissionScope, + sortable: false, + minWidth: "250px", + cell: (row) => ( + + {row.emissionScope && row.emissionScope != "null" + ? "Kapsam-" + row.emissionScope + : "-"} + + ), + }, + { + name: t("Actions"), + allowOverflow: false, + maxWidth: "100px", + cell: (row) => { + return ( +
+ + + + + + {permissionCheck("emission_source_update") && ( + handleEditEmissionSource(row)} + > + + + {t("Cruds.edit")} + + + )} + {permissionCheck("emission_source_delete") && ( + handleDeleteEmissionSource(row)} + > + + + {t("Cruds.delete")} + + + )} + + +
+ ); + }, + }, + ]; + + useEffect(() => { + if ( + !( + permissionCheck("emission_source_delete") || + permissionCheck("emission_source_update") + ) + ) { + const updatedColumns = initialColumns.filter( + (column) => column.name !== ("Aksiyonlar" || "Actions") + ); + setServerSideColumns(updatedColumns); + } + }, []); + + const dispatch = useDispatch(); + const { enqueueSnackbar } = useSnackbar(); + + const [currentPage, setCurrentPage] = useState(1); + const [rowsPerPage, setRowsPerPage] = useState(5); + const [loading, setLoading] = useState(false); + + const [serverSideColumns, setServerSideColumns] = useState(initialColumns); + + const emissionSourceStore = useSelector((state) => state.emissionSources); + const datasStore = useSelector((state) => state.datas); + const [emissionSources, setEmissionSources] = useState([]); + const [selectedSector, setSelectedSector] = useState(null); + const [sectorsOptions, setSectorsOptions] = useState([]); + const [subSectorsOptions, setSubSectorsOptions] = useState([]); + const [showAddEmissionSourceModal, setShowAddEmissionSourceModal] = + useState(false); + const [editingEmissionSourceData, setEditingEmissionSourceData] = useState( + {} + ); + const [searchValue, setSearchValue] = useState(""); + const [selectedSectorFilter, setSelectedSectorFilter] = useState(""); + const [showDeletedEmissionSource, setShowDeletedEmissionSource] = + useState(false); + + useEffect(() => { + dispatch( + getEmissionSourcesWithPaginate({ + currentPage, + rowsPerPage, + selectedSectorFilter, + showDeletedEmissionSource, + }) + ); + }, [ + currentPage, + rowsPerPage, + selectedSectorFilter, + showDeletedEmissionSource, + ]); + + useEffect(() => { + dispatch(getSectors()); + dispatch(getConsuptionUnits({ sector: "Atık" })); + }, []); + + useEffect(() => { + if (selectedSector != null) dispatch(getSectorById(selectedSector)); + }, [selectedSector]); + + useEffect(() => { + if (emissionSourceStore?.emissionSourcesWithPaginate?.content) { + setEmissionSources( + emissionSourceStore?.emissionSourcesWithPaginate?.content + ); + } + }, [emissionSourceStore.emissionSourcesWithPaginate?.content]); + + useEffect(() => { + setSectorsOptions( + datasStore?.sectors.map((sector) => { + return { + value: sector?.id, + label: sector?.tag, + }; + }) + ); + }, [datasStore?.sectors]); + + useEffect(() => { + setSubSectorsOptions( + datasStore?.sector?.subSectors?.map((subSector) => { + return { + value: subSector?.id, + label: subSector?.tag, + }; + }) + ); + }, [datasStore?.sector]); + + const handleFilter = (e) => { + setSearchValue(e.target.value); + + if (e.target.value !== "") { + setEmissionSources( + emissionSourceStore.emissionSourcesWithPaginate?.content?.filter( + (source) => + source.tag + .toUpperCase() + .normalize("NFD") + .replace(/[\u0300-\u036f]/g, "") + .includes( + e.target.value + .toUpperCase() + .normalize("NFD") + .replace(/[\u0300-\u036f]/g, "") + ) + ) + ); + } else { + setEmissionSources( + emissionSourceStore.emissionSourcesWithPaginate?.content + ); + } + }; + + const handlePagination = (page) => { + setCurrentPage(page.selected + 1); + setEmissionSources(emissionSources.emissionSourcesWithPaginate?.content); + }; + + const handlePerPage = (e) => { + setCurrentPage(1); + setRowsPerPage(parseInt(e.target.value)); + setEmissionSources(emissionSources.emissionSourcesWithPaginate?.content); + }; + + const CustomPagination = () => { + const count = Number( + ( + emissionSourceStore?.emissionSourcesWithPaginate?.pageInfo + ?.totalElements / rowsPerPage + ).toFixed(1) + ); +//asdaasdasd + return ( + handlePagination(page)} + pageClassName={"page-item"} + nextLinkClassName={"page-link"} + nextClassName={"page-item next"} + previousClassName={"page-item prev"} + previousLinkClassName={"page-link"} + pageLinkClassName={"page-link"} + breakClassName="page-item" + breakLinkClassName="page-link" + containerClassName={ + "pagination react-paginate separated-pagination pagination-sm justify-content-end pr-1 mt-1" + } + /> + ); + }; + + const onAddEmissionSourceButtonPressed = () => { + setEditingEmissionSourceData({ + emissionSourceConvertUnits: datasStore?.consuptionUnits?.map( + (consuptionUnit) => { + return { + unit: { + id: consuptionUnit.id, + tag: consuptionUnit.tag, + }, + value: "", + }; + } + ), + }); + setShowAddEmissionSourceModal(true); + }; + + function convertToDesiredFormatAndStringify(arr) { + const cleanedArray = arr + .filter((item) => item.unit.tag !== "TJ") + .filter((item) => item.value !== "") + .map((item) => ({ + unitId: item.unit?.id || "", + convertValue: item.value || "", + })); + + return JSON.stringify(cleanedArray).replace(/"([^"]+)":/g, "$1:"); + } + + const onAddEmissionSourceModalButtonPressed = () => { + setLoading(true); + + if (!editingEmissionSourceData.id) { + const newEmissionSourceData = { + tag: editingEmissionSourceData?.tag, + description: editingEmissionSourceData?.description || "-", + emissionScope: editingEmissionSourceData?.emissionScope?.value, + subSector: editingEmissionSourceData?.subSector?.value, + co2: editingEmissionSourceData?.co2 || 0, + ch4: editingEmissionSourceData?.ch4 || 0, + n2o: editingEmissionSourceData?.n2o || 0, + emissionSourceConvertUnits: convertToDesiredFormatAndStringify( + editingEmissionSourceData.emissionSourceConvertUnits + ), + }; + + dispatch(addEmissionSource(newEmissionSourceData)) + .then(() => { + setLoading(false); + setSelectedSector(null); + setShowAddEmissionSourceModal(false); + enqueueSnackbar(t("Warnings.addedSuccessfully"), { + variant: "success", + preventDuplicate: true, + }); + }) + .catch(() => { + setLoading(false); + setShowAddEmissionSourceModal(false); + enqueueSnackbar(t("Warnings.addedFail"), { + variant: "error", + preventDuplicate: true, + }); + }); + } else { + const updateEmissionSourceData = { + id: editingEmissionSourceData.id, + tag: editingEmissionSourceData?.tag, + description: editingEmissionSourceData?.description || "-", + emissionScope: editingEmissionSourceData?.emissionScope?.value, + subSector: editingEmissionSourceData?.subSector?.value, + co2: editingEmissionSourceData?.co2 || 0, + ch4: editingEmissionSourceData?.ch4 || 0, + n2o: editingEmissionSourceData?.n2o || 0, + emissionSourceConvertUnits: convertToDesiredFormatAndStringify( + editingEmissionSourceData.emissionSourceConvertUnits + ), + ...editingEmissionSourceData.wasteEmissionSourceSupplement, + }; + dispatch( + editingEmissionSourceData?.sector?.label != "Atık" + ? updateEmissionSource(updateEmissionSourceData) + : updateEmissionSourceOfWaste(updateEmissionSourceData) + ) + .then(() => { + enqueueSnackbar(t("Warnings.updatedSuccessfully"), { + variant: "success", + }); + setLoading(false); + setSelectedSector(null); + setEditingEmissionSourceData(null); + setShowAddEmissionSourceModal(false); + }) + .catch(() => { + enqueueSnackbar( + `${updateEmissionSourceData.tag}, ${t("Warnings.updatedFail")}`, + { + variant: "error", + } + ); + setLoading(false); + }); + } + }; + + const renderEmissionSourceModal = () => { + //Atık için Modal + if (editingEmissionSourceData?.sector?.label === "Atık") { + return ( + + setShowAddEmissionSourceModal(!showAddEmissionSourceModal) + } + className="modal-dialog-centered" + > + + setShowAddEmissionSourceModal(!showAddEmissionSourceModal) + } + > + {editingEmissionSourceData?.id + ? editingEmissionSourceData.tag + : t("EmissionSources.addEmissionSource")} + + +
+ + + setEditingEmissionSourceData({ + ...editingEmissionSourceData, + tag: e.target.value, + }) + } + /> +
+ +
+ + subSector.label != "Katı Atık Bertarafı" + )} + className="react-select" + placeholder="" + filterOption={customFilterForSelect} + defaultValue={editingEmissionSourceData?.subSector} + onChange={(value) => { + setEditingEmissionSourceData({ + ...editingEmissionSourceData, + subSector: value, + }); + }} + /> +
+
+ + {editingEmissionSourceData?.subSector?.label != + "Yakma ve Açık Yanma" ? ( + + + + {editingEmissionSourceData?.subSector?.label != + "Atık Su Arıtma ve Deşarjı" ? ( + + ) : ( + + )} + + + + + { + const inputValue = e.target.value; + if ( + /^\d*\.?\d*$/.test(inputValue) || + inputValue === "" + ) { + setEditingEmissionSourceData({ + ...editingEmissionSourceData, + wasteEmissionSourceSupplement: { + ...editingEmissionSourceData.wasteEmissionSourceSupplement, + dryWeightCH4: inputValue, + }, + }); + } + }} + /> + + {editingEmissionSourceData?.subSector?.label != + "Atık Su Arıtma ve Deşarjı" && ( + + + { + const inputValue = e.target.value; + if ( + /^\d*\.?\d*$/.test(inputValue) || + inputValue === "" + ) { + setEditingEmissionSourceData({ + ...editingEmissionSourceData, + wasteEmissionSourceSupplement: { + ...editingEmissionSourceData.wasteEmissionSourceSupplement, + wetWeightCH4: inputValue, + }, + }); + } + }} + /> + + )} + + + + + {editingEmissionSourceData?.subSector?.label != + "Atık Su Arıtma ve Deşarjı" ? ( + + ) : ( + + )} + + + + + { + const inputValue = e.target.value; + if ( + /^\d*\.?\d*$/.test(inputValue) || + inputValue === "" + ) { + setEditingEmissionSourceData({ + ...editingEmissionSourceData, + wasteEmissionSourceSupplement: { + ...editingEmissionSourceData.wasteEmissionSourceSupplement, + dryWeightN2O: inputValue, + }, + }); + } + }} + /> + + {editingEmissionSourceData?.subSector?.label != + "Atık Su Arıtma ve Deşarjı" && ( + + + { + const inputValue = e.target.value; + if ( + /^\d*\.?\d*$/.test(inputValue) || + inputValue === "" + ) { + setEditingEmissionSourceData({ + ...editingEmissionSourceData, + wasteEmissionSourceSupplement: { + ...editingEmissionSourceData.wasteEmissionSourceSupplement, + wetWeightN2O: inputValue, + }, + }); + } + }} + /> + + )} + + + + ) : ( + +
+ + + + + { + const inputValue = e.target.value; + if ( + /^\d*\.?\d*$/.test(inputValue) || + inputValue === "" + ) { + setEditingEmissionSourceData({ + ...editingEmissionSourceData, + wasteEmissionSourceSupplement: { + ...editingEmissionSourceData.wasteEmissionSourceSupplement, + dryWeightCH4: + editingEmissionSourceData + ?.wasteEmissionSourceSupplement + .dryWeightCH4 != 0 && inputValue, + dampWeightCH4: + editingEmissionSourceData + ?.wasteEmissionSourceSupplement + .dampWeightCH4 != 0 && inputValue, + }, + }); + } + }} + /> + + + + { + const inputValue = e.target.value; + if ( + /^\d*\.?\d*$/.test(inputValue) || + inputValue === "" + ) { + setEditingEmissionSourceData({ + ...editingEmissionSourceData, + wasteEmissionSourceSupplement: { + ...editingEmissionSourceData.wasteEmissionSourceSupplement, + wetWeightN2O: inputValue, + }, + }); + } + }} + /> + + +
+
+ + + + + { + const inputValue = e.target.value; + if ( + /^\d*\.?\d*$/.test(inputValue) || + inputValue === "" + ) { + setEditingEmissionSourceData({ + ...editingEmissionSourceData, + wasteEmissionSourceSupplement: { + ...editingEmissionSourceData.wasteEmissionSourceSupplement, + wetWeightCH4: inputValue, + }, + }); + } + }} + /> + + + + { + const inputValue = e.target.value; + if ( + /^\d*\.?\d*$/.test(inputValue) || + inputValue === "" + ) { + setEditingEmissionSourceData({ + ...editingEmissionSourceData, + wasteEmissionSourceSupplement: { + ...editingEmissionSourceData.wasteEmissionSourceSupplement, + dryWeightN2O: inputValue, + }, + }); + } + }} + /> + + +
+
+ )} +
+
+ + + +
+ ); + } + + //Atık hariç diğer sektörler için Modal + const convertedUnits = handleConvertUnits( + editingEmissionSourceData?.emissionSourceConvertUnits + ); + + return ( + + setShowAddEmissionSourceModal(!showAddEmissionSourceModal) + } + className="modal-dialog-centered" + > + + setShowAddEmissionSourceModal(!showAddEmissionSourceModal) + } + > + {editingEmissionSourceData?.id + ? editingEmissionSourceData.tag + : t("EmissionSources.addEmissionSource")} + + +
+ + + setEditingEmissionSourceData({ + ...editingEmissionSourceData, + tag: e.target.value, + }) + } + /> +
+ +
+ + { + setEditingEmissionSourceData({ + ...editingEmissionSourceData, + subSector: value, + }); + }} + /> +
+
+ + { + return null; + }} + /> + { + const inputValue = e.target.value; + if (/^\d*\.?\d*$/.test(inputValue) || inputValue === "") { + const updatedConvertUnits = [...convertedUnits]; + updatedConvertUnits[index] = { + ...item, + value: inputValue, + }; + setEditingEmissionSourceData({ + ...editingEmissionSourceData, + emissionSourceConvertUnits: updatedConvertUnits, + }); + } + }} + /> + + ); + })} +
+ + {/* */} +
+ + + +
+ ); + }; + + const handleConvertUnits = (emissionSourceConvertUnits) => { + const existingUnitIds = + emissionSourceConvertUnits?.map((item) => item.unit.id) || []; + const missingUnits = datasStore.consuptionUnits.filter( + (unit) => !existingUnitIds.includes(unit.id) + ); + const convertUnitsOfSelectedSource = [ + ...(emissionSourceConvertUnits || []), + ...missingUnits.map((unit) => ({ + unit: { id: unit.id, tag: unit.tag }, + value: "", // You can set the default value for missing units here + })), + ]; + return convertUnitsOfSelectedSource; + }; + + const handleEditEmissionSource = (selectedSource) => { + const sectorOfSelectedSource = { + value: selectedSource?.subSector?.sector?.id, + label: selectedSource?.subSector?.sector?.tag, + }; + const subSectorOfSelectedSource = { + value: selectedSource?.subSector?.id, + label: selectedSource?.subSector?.tag, + }; + const emissionScopeOfSelectedSource = { + value: selectedSource?.emissionScope, + label: selectedSource?.emissionScope + ? "Kapsam-" + selectedSource?.emissionScope + : "", + }; + const convertUnitsOfSelectedSource = + selectedSource?.emissionSourceConvertUnits?.map((item) => ({ + ...item, + value: item.value.toString(), + })); + + const wasteEmissionSourceSupplementOfSelectedSource = { + dryWeightCH4: + selectedSource?.wasteEmissionSourceSupplement?.dryWeightCH4 || 0, + wetWeightCH4: + selectedSource?.wasteEmissionSourceSupplement?.wetWeightCH4 || 0, + dryWeightN2O: + selectedSource?.wasteEmissionSourceSupplement?.dryWeightN2O || 0, + wetWeightN2O: + selectedSource?.wasteEmissionSourceSupplement?.wetWeightN2O || 0, + dampWeightCH4: + selectedSource?.wasteEmissionSourceSupplement?.dampWeightCH4 || 0, + }; + setSelectedSector(selectedSource?.subSector?.sector?.id); + setShowAddEmissionSourceModal(true); + setEditingEmissionSourceData({ + id: selectedSource.id, + tag: selectedSource?.tag, + description: selectedSource?.description || "-", + subSector: selectedSource?.subSector, + co2: selectedSource?.co2, + ch4: selectedSource?.ch4, + n2o: selectedSource?.n2o, + sector: sectorOfSelectedSource, + subSector: subSectorOfSelectedSource, + emissionScope: emissionScopeOfSelectedSource, + emissionSourceConvertUnits: convertUnitsOfSelectedSource, + wasteEmissionSourceSupplement: + wasteEmissionSourceSupplementOfSelectedSource, + }); + }; + + const handleDeleteEmissionSource = async (selectedSource) => { + const result = await Swal.fire({ + title: `${selectedSource.tag}, ${t("Warnings.sureForDelete")}`, + text: t("Warnings.notUndone"), + icon: "warning", + showCancelButton: true, + confirmButtonText: t("Cruds.delete"), + cancelButtonText: t("Cruds.cancel"), + customClass: { + confirmButton: "btn btn-primary", + cancelButton: "btn btn-danger ml-1", + }, + buttonsStyling: false, + }); + if (result.value !== null && result.value === true) { + dispatch(deleteEmissionSource(selectedSource.id)); + } + }; + + return ( +
+ + + {t("EmissionSources.emissionSources")} + {permissionCheck("emission_source_create") && ( + + )} + + + +
+ + handlePerPage(e)} + > + + + + + + + +
+ + + {permissionCheck("deleted_items") && ( +
+ { + setShowDeletedEmissionSource(e.target.checked); + setCurrentPage(1); + }} + /> + +
+ )} + + + { + setSelectedSectorFilter(e.target.value); + setCurrentPage(1); + }} + > + + {sectorsOptions.map((sector, index) => ( + + ))} + + + +
+ } + paginationComponent={CustomPagination} + data={emissionSources} + noDataComponent={ +

+ {t("EmissionSources.emissionSource")} + {t("Warnings.notFound")} +

+ } + /> +
+ {renderEmissionSourceModal()} +
+ ); +}; + +export default EmissionSource;