fixed settings page sorting by list order

This commit was merged in pull request #81.
This commit is contained in:
victorAnumudu
2025-09-04 17:46:47 +01:00
parent 599e8a7715
commit f66f92c58d
6 changed files with 37 additions and 10 deletions
+5 -2
View File
@@ -2,14 +2,16 @@ import { useQuery } from '@tanstack/react-query'
import BreadcrumbComBS from "../breadcrumb/BreadcrumbComBS";
// import getImage from "../../utils/getImage";
import ProductStart from "./ProductStart";
import { useLocation } from 'react-router-dom';
import { useLocation, useNavigate } from 'react-router-dom';
import {MyProductData} from "../../services/services";
import ProductActive from "./ProductActive";
import ProductProvision from "./ProductProvision";
import {productConst} from "../../constants/products";
import queryKeys from "../../services/queryKeys";
import siteLinks from '../../links/siteLinks';
export default function ProductFactory(){
const navigate = useNavigate()
const location = useLocation();
const pathname = location.pathname;
@@ -45,8 +47,9 @@ export default function ProductFactory(){
</>
: isError ?
<div className="row">
<div className="col-12">
<div className="text-center col-12" style={{minHeight: '500px', placeContent: 'center'}}>
<p className='text-danger'>{error?.message}</p>
<button onClick={() => navigate(siteLinks.home)} className='mt-3 btn btn-primary'>Return Home</button>
</div>
</div>
:
@@ -5,6 +5,7 @@ import SiteTemplateSelector from './SiteTemplateSelector';
import NoYesBooleanDropdown from './NoYesBooleanDropdown';
import {IoMdArrowDropdown} from 'react-icons/io';
import queryKeys from '../../../services/queryKeys';
import sortObjectByListOrder from '../../../helpers/sortObjectByListOrder';
const GeneralTab = memo(({name = 'Full Name', data, isCustom, productData, backendValues, setFieldsChanged}) => {
@@ -27,9 +28,11 @@ const GeneralTab = memo(({name = 'Full Name', data, isCustom, productData, backe
const [fields, setFields] = useState({})
const sortedData = sortObjectByListOrder(data ? data : {}) // SORTED SETTINGSCONFIG
useEffect(() => {
const fieldData = {}
Object.entries(data)?.forEach(([key, value]) => { // LOOP TO POPULATE FIELDDATA PROPERTIES WITH DATA OF EACH TAB
Object.entries(sortedData)?.forEach(([key, value]) => { // LOOP TO POPULATE FIELDDATA PROPERTIES WITH DATA OF EACH TAB
fieldData[value?.name?.toLowerCase().replaceAll(" ", "_")] = ''
})
backendValues?.data?.forEach(item => { //LOOPING THROUGH USER ALREADY ADDED DATA FROM BACKEND IF ANY AND UPDATING THE FIELDDATA OBJECT
@@ -98,7 +101,7 @@ const GeneralTab = memo(({name = 'Full Name', data, isCustom, productData, backe
:
<>
{isCustom === true ?
<SiteTemplateSelector name={name} data={data} isCustom={isCustom}
<SiteTemplateSelector name={name} data={sortedData} isCustom={isCustom}
productData={productData}/>
:
<div className="page-account-form">
@@ -107,7 +110,7 @@ const GeneralTab = memo(({name = 'Full Name', data, isCustom, productData, backe
<form id='tab_form'>
<div className="form-row">
<>
{Object.entries(data)?.map(([key, value]) => {
{Object.entries(sortedData)?.map(([key, value]) => {
let fieldName = key; // value.key.toLowerCase().replaceAll(" ", "_")
let fieldValue = fields[key]; //fields[value.name.toLowerCase().replaceAll(" ", "_")]
return (
@@ -4,6 +4,7 @@ import { getSettingsData, getMyProductConfig } from '../../../services/services'
import queryKeys from '../../../services/queryKeys';
import { useSelector } from 'react-redux';
import { useQuery } from '@tanstack/react-query';
import sortObjectByListOrder from '../../../helpers/sortObjectByListOrder'
const Settings = memo(({productData}) => {
@@ -59,6 +60,8 @@ const Settings = memo(({productData}) => {
const settingsData = {data: data?.data?.settings, isFetching, isError, error}
// console.log('data', settingsData)
const sortedSettingsConfig = sortObjectByListOrder(settingsConfig ? settingsConfig : {}) // SORTED SETTINGSCONFIG
return (
<>
{configIsFetching ?
@@ -79,7 +82,7 @@ const Settings = memo(({productData}) => {
<div className="tab tab-vertical">
<ul className="nav nav-tabs" role="tablist">
<>
{Object.entries(settingsConfig).map(([key, value], index) => (
{Object.entries(sortedSettingsConfig).map(([key, value], index) => (
<li key={key} className="nav-item">
<a className={`nav-link ${(activeTab == value.controls || (index == 0 & !activeTab)) && 'active show'}`}
id={key}
@@ -99,7 +102,7 @@ const Settings = memo(({productData}) => {
</ul>
<div className="tab-content">
<>
{Object.entries(settingsConfig).map(([key, value], index) => (
{Object.entries(sortedSettingsConfig).map(([key, value], index) => (
<div key={key} className={`tab-pane fade ${(activeTab == value.controls || (index == 0 & !activeTab)) && 'active show'}`}
// id={value.controls} role="tabpanel"
// aria-labelledby={key}
@@ -116,4 +119,4 @@ const Settings = memo(({productData}) => {
}
)
export default Settings
export default Settings
+4 -1
View File
@@ -1,16 +1,19 @@
import React from "react";
import BreadcrumbComBS from "../breadcrumb/BreadcrumbComBS";
import getImage from "../../utils/getImage";
//const imP = '../../../../src/assets/img/side-banner.jpg'
export default function Start() {
const bgImg = getImage("side-banner.jpg");
return (
<>
<BreadcrumbComBS title='Get Started...' paths={['Dashboard', 'Start']}/>
<div className="row">
<div className="col-xl-3 col-md-6">
<div className="card card-statistics text-center py-3"
style={{minHeight: '350px', backgroundImage: '../../../src/assets/img/side-banner.jpg'}}>
style={{minHeight: '350px', backgroundImage: `url(${bgImg})`}}>
<div className="card-body pricing-content">
{/*<div className="pricing-content-card">*/}
{/* <h5>Premium</h5>*/}
+14
View File
@@ -0,0 +1,14 @@
const sortObjectByListOrder = (data) => {
const sortedEntriesByValue = Object.entries(data).sort((a, b) => {
if(a[1].list_order > b[1].list_order){
return 1
}else{
return -1
}
}); // Sorts numerically by value
const sortedObjectByValue = Object.fromEntries(sortedEntriesByValue);
return sortedObjectByValue
}
export default sortObjectByListOrder
+2 -1
View File
@@ -26,7 +26,8 @@ const postAuxEnd = (path, postData, media=false) => {
return axios.post(`${basePath}${path}`, postData).then(res => {
return res
}).catch(err => {
throw new Error(err.response.data.msg);
// console.log('res', err.response.data)
throw new Error(err.response.data.error_message);
})
}