loan order working
This commit is contained in:
52
src/contexts/BaseEnumsContext.js
Normal file
52
src/contexts/BaseEnumsContext.js
Normal file
@@ -0,0 +1,52 @@
|
||||
import React, { createContext, useContext, useState, useEffect } from 'react';
|
||||
import { API_CONFIG } from '../constants/api';
|
||||
|
||||
const BaseEnumsContext = createContext({ enums: null, refresh: () => {}, getEnums: async () => null });
|
||||
|
||||
export const BaseEnumsProvider = ({ children }) => {
|
||||
const [enums, setEnums] = useState(null);
|
||||
const [lastFetched, setLastFetched] = useState(0);
|
||||
|
||||
const fetchEnums = async () => {
|
||||
try {
|
||||
const res = await fetch(`${API_CONFIG.BASE_URL}${API_CONFIG.ENDPOINTS.ENUMS}`);
|
||||
const json = await res.json();
|
||||
setEnums(json);
|
||||
setLastFetched(Date.now());
|
||||
} catch (e) {
|
||||
console.warn('Failed to fetch base-app-enums', e.message);
|
||||
}
|
||||
};
|
||||
|
||||
// initial fetch and 60s refresh
|
||||
useEffect(() => {
|
||||
fetchEnums();
|
||||
const id = setInterval(fetchEnums, 60000);
|
||||
return () => clearInterval(id);
|
||||
}, []);
|
||||
|
||||
const getEnums = async () => {
|
||||
if (!enums || Date.now() - lastFetched > 60000) {
|
||||
await fetchEnums();
|
||||
}
|
||||
return enums;
|
||||
};
|
||||
|
||||
const getLabel = (category, key) => {
|
||||
if (!enums || !enums[category]) return key;
|
||||
return enums[category][key] ?? key;
|
||||
};
|
||||
|
||||
const getOptions = (category) => {
|
||||
if (!enums || !enums[category]) return [];
|
||||
return Object.entries(enums[category]).map(([value, label]) => ({ value, label }));
|
||||
};
|
||||
|
||||
return (
|
||||
<BaseEnumsContext.Provider value={{ enums, refresh: fetchEnums, getEnums, getLabel, getOptions }}>
|
||||
{children}
|
||||
</BaseEnumsContext.Provider>
|
||||
);
|
||||
};
|
||||
|
||||
export const useBaseEnums = () => useContext(BaseEnumsContext);
|
||||
Reference in New Issue
Block a user