forked from BLC/sgeUpdated
few translation edits and changing it to use vmEmission query
This commit is contained in:
@@ -122,7 +122,10 @@ const DataCenterManagement = () => {
|
||||
|
||||
const [mapPosition, setMapPosition] = useState(null);
|
||||
|
||||
const dataCenterStore = useSelector((state) => state.dataCenter);
|
||||
const dataCenterStore = useSelector((state) => {
|
||||
console.log('DataCenter Store:', state.dataCenter);
|
||||
return state.dataCenter;
|
||||
});
|
||||
const emissionScopeStore = useSelector((state) => state.emissionScope);
|
||||
const datasStore = useSelector((state) => state.datas);
|
||||
const emissionSourceStore = useSelector((state) => state.emissionSources);
|
||||
@@ -179,8 +182,9 @@ const DataCenterManagement = () => {
|
||||
},
|
||||
{
|
||||
name: t("Actions"),
|
||||
allowOverflow: false,
|
||||
maxWidth: "150px",
|
||||
allowOverflow: true,
|
||||
width: "150px",
|
||||
center: true,
|
||||
cell: (row) => {
|
||||
return (
|
||||
<div className="d-flex">
|
||||
@@ -189,7 +193,7 @@ const DataCenterManagement = () => {
|
||||
<MoreVertical size={15} />
|
||||
</DropdownToggle>
|
||||
<DropdownMenu container={"body"} end>
|
||||
{permissionCheck("datacenter_update") && (
|
||||
{permissionCheck("data_center_update") && (
|
||||
<DropdownItem
|
||||
tag="a"
|
||||
className="w-100"
|
||||
@@ -199,7 +203,7 @@ const DataCenterManagement = () => {
|
||||
<span className="align-middle ml-50">{t("Cruds.edit")}</span>
|
||||
</DropdownItem>
|
||||
)}
|
||||
{permissionCheck("datacenter_delete") && (
|
||||
{permissionCheck("data_center_delete") && (
|
||||
<DropdownItem
|
||||
tag="a"
|
||||
className="w-100"
|
||||
@@ -348,24 +352,25 @@ const DataCenterManagement = () => {
|
||||
}, [selectedDataCenter.areaId, areasStore?.areas]);
|
||||
|
||||
const handleEditDataCenter = (row) => {
|
||||
console.log('Editing data center:', row);
|
||||
setEditingDataCenter(row);
|
||||
setSelectedDataCenter({
|
||||
name: row.dataCenter,
|
||||
externalId: row.externalId,
|
||||
number: row.number,
|
||||
address: row.address,
|
||||
areaId: row.area?.id,
|
||||
cityId: null, // City is a string in the backend, not an object
|
||||
externalId: row.externalId?.toString(),
|
||||
number: row.number?.toString(),
|
||||
address: row.address || "",
|
||||
areaId: row.area?.id || null,
|
||||
cityId: null,
|
||||
latitude: row.latitude,
|
||||
longitude: row.longitude,
|
||||
ayposURL: row.ayposURL,
|
||||
ayposURL: row.ayposURL || "",
|
||||
city: row.city || "",
|
||||
emissionScopeId: row.emissionScope?.id,
|
||||
sectorId: row.sector?.id,
|
||||
subSectorId: row.subSector?.id,
|
||||
emissionSourceId: row.emissionSource?.id,
|
||||
consuptionUnitId: row.consuptionUnit?.id,
|
||||
activitySubUnitId: row.activitySubUnit?.id
|
||||
emissionScopeId: row.emissionScope?.id || null,
|
||||
sectorId: row.sector?.id || null,
|
||||
subSectorId: row.subSector?.id || null,
|
||||
emissionSourceId: row.emissionSource?.id || null,
|
||||
consuptionUnitId: row.consuptionUnit?.id || null,
|
||||
activitySubUnitId: row.activitySubUnit?.id || null
|
||||
});
|
||||
|
||||
// Set the selected sector and sub sector for cascading dropdowns
|
||||
@@ -409,34 +414,62 @@ const DataCenterManagement = () => {
|
||||
const validateForm = () => {
|
||||
const errors = [];
|
||||
|
||||
// Required fields
|
||||
if (!selectedDataCenter.name) {
|
||||
// Required fields validation
|
||||
if (!selectedDataCenter.name?.trim()) {
|
||||
errors.push(t("DataCenter.nameRequired"));
|
||||
}
|
||||
if (!selectedDataCenter.externalId) {
|
||||
if (!selectedDataCenter.externalId?.trim()) {
|
||||
errors.push(t("DataCenter.externalIdRequired"));
|
||||
}
|
||||
if (!selectedDataCenter.sectorId) {
|
||||
errors.push(t("DataCenter.sectorRequired"));
|
||||
}
|
||||
|
||||
// Validate external ID is a number
|
||||
if (selectedDataCenter.externalId && isNaN(parseInt(selectedDataCenter.externalId))) {
|
||||
errors.push(t("DataCenter.externalIdMustBeNumber"));
|
||||
// Number validations
|
||||
try {
|
||||
if (selectedDataCenter.externalId) {
|
||||
const externalId = parseInt(selectedDataCenter.externalId);
|
||||
if (isNaN(externalId) || externalId < 0) {
|
||||
errors.push(t("DataCenter.externalIdMustBePositiveNumber"));
|
||||
}
|
||||
}
|
||||
if (selectedDataCenter.number) {
|
||||
const number = parseInt(selectedDataCenter.number);
|
||||
if (isNaN(number) || number < 1) {
|
||||
errors.push(t("DataCenter.numberMustBePositive"));
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
errors.push(t("DataCenter.invalidNumberFormat"));
|
||||
}
|
||||
|
||||
// Validate coordinates if either is provided
|
||||
if ((selectedDataCenter.latitude && !selectedDataCenter.longitude) ||
|
||||
(!selectedDataCenter.latitude && selectedDataCenter.longitude)) {
|
||||
errors.push(t("DataCenter.bothCoordinatesRequired"));
|
||||
// Coordinate validations
|
||||
if (selectedDataCenter.latitude || selectedDataCenter.longitude) {
|
||||
try {
|
||||
const lat = parseFloat(selectedDataCenter.latitude);
|
||||
const lng = parseFloat(selectedDataCenter.longitude);
|
||||
|
||||
if (isNaN(lat) || lat < -90 || lat > 90) {
|
||||
errors.push(t("DataCenter.invalidLatitude"));
|
||||
}
|
||||
if (isNaN(lng) || lng < -180 || lng > 180) {
|
||||
errors.push(t("DataCenter.invalidLongitude"));
|
||||
}
|
||||
} catch (e) {
|
||||
errors.push(t("DataCenter.invalidCoordinates"));
|
||||
}
|
||||
}
|
||||
|
||||
// Validate area and city are selected together
|
||||
if (selectedDataCenter.areaId && !selectedDataCenter.cityId) {
|
||||
errors.push(t("DataCenter.cityRequired"));
|
||||
// URL validation
|
||||
if (selectedDataCenter.ayposURL?.trim()) {
|
||||
try {
|
||||
new URL(selectedDataCenter.ayposURL);
|
||||
} catch (e) {
|
||||
errors.push(t("DataCenter.invalidURL"));
|
||||
}
|
||||
}
|
||||
|
||||
// Validate sector hierarchy
|
||||
// Relationship validations
|
||||
if (selectedDataCenter.subSectorId && !selectedDataCenter.sectorId) {
|
||||
errors.push(t("DataCenter.sectorRequired"));
|
||||
}
|
||||
@@ -446,6 +479,9 @@ const DataCenterManagement = () => {
|
||||
if (selectedDataCenter.consuptionUnitId && !selectedDataCenter.emissionSourceId) {
|
||||
errors.push(t("DataCenter.emissionSourceRequired"));
|
||||
}
|
||||
if (selectedDataCenter.activitySubUnitId && !selectedDataCenter.subSectorId) {
|
||||
errors.push(t("DataCenter.subSectorRequiredForActivity"));
|
||||
}
|
||||
|
||||
return errors;
|
||||
};
|
||||
@@ -460,11 +496,16 @@ const DataCenterManagement = () => {
|
||||
}
|
||||
|
||||
try {
|
||||
// Ensure number is set for new data centers
|
||||
// Format data according to GraphQL input type
|
||||
const dataToSubmit = {
|
||||
...selectedDataCenter,
|
||||
number: selectedDataCenter.number || 1, // Default to 1 if not set
|
||||
city: selectedDataCenter.city, // Add city to the payload
|
||||
dataCenter: selectedDataCenter.name,
|
||||
externalId: parseInt(selectedDataCenter.externalId),
|
||||
number: parseInt(selectedDataCenter.number || "1"),
|
||||
address: selectedDataCenter.address,
|
||||
areaId: selectedDataCenter.areaId,
|
||||
latitude: selectedDataCenter.latitude ? parseFloat(selectedDataCenter.latitude) : null,
|
||||
longitude: selectedDataCenter.longitude ? parseFloat(selectedDataCenter.longitude) : null,
|
||||
ayposURL: selectedDataCenter.ayposURL,
|
||||
emissionScopeId: selectedDataCenter.emissionScopeId,
|
||||
sectorId: selectedDataCenter.sectorId,
|
||||
subSectorId: selectedDataCenter.subSectorId,
|
||||
@@ -482,6 +523,9 @@ const DataCenterManagement = () => {
|
||||
await dispatch(createDataCenter(dataToSubmit));
|
||||
enqueueSnackbar(t("DataCenter.createSuccess"), { variant: "success" });
|
||||
}
|
||||
|
||||
// Refresh the data centers list
|
||||
await dispatch(getDataCenters());
|
||||
|
||||
handleCloseModal();
|
||||
} catch (error) {
|
||||
@@ -1035,7 +1079,9 @@ const DataCenterManagement = () => {
|
||||
sortIcon={<ChevronDown size={10} />}
|
||||
paginationDefaultPage={currentPage}
|
||||
paginationComponent={CustomPagination}
|
||||
data={dataCenterStore.dataCenters}
|
||||
data={dataCenterStore?.dataCenters || []}
|
||||
progressPending={dataCenterStore?.loading}
|
||||
progressComponent={<div className="text-center p-3">Loading...</div>}
|
||||
noDataComponent={
|
||||
<div className="p-2 text-center">
|
||||
{t("Common.noDataAvailable")}
|
||||
|
||||
Reference in New Issue
Block a user