You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.3 KiB
JavaScript
50 lines
1.3 KiB
JavaScript
import React, { createContext, useContext, useState } from 'react';
|
|
|
|
/**
|
|
* Context for tracking band iteration state
|
|
* Used to provide current data item to elements inside bands
|
|
*/
|
|
const BandContext = createContext();
|
|
|
|
export function BandProvider({ children, bandDataMap = {} }) {
|
|
// Map of bandId -> current data item
|
|
// Can be provided externally or managed internally
|
|
const [internalBandData, setInternalBandData] = useState({});
|
|
|
|
// Use external bandDataMap if provided, otherwise use internal state
|
|
const currentBandData = Object.keys(bandDataMap).length > 0 ? bandDataMap : internalBandData;
|
|
|
|
const setBandData = (bandId, data) => {
|
|
setInternalBandData(prev => ({
|
|
...prev,
|
|
[bandId]: data
|
|
}));
|
|
};
|
|
|
|
const clearBandData = () => {
|
|
setInternalBandData({});
|
|
};
|
|
|
|
const removeBandData = (bandId) => {
|
|
setInternalBandData(prev => {
|
|
const newData = { ...prev };
|
|
delete newData[bandId];
|
|
return newData;
|
|
});
|
|
};
|
|
|
|
return (
|
|
<BandContext.Provider value={{ currentBandData, setBandData, clearBandData, removeBandData }}>
|
|
{children}
|
|
</BandContext.Provider>
|
|
);
|
|
}
|
|
|
|
export function useBandContext() {
|
|
const context = useContext(BandContext);
|
|
if (!context) {
|
|
throw new Error('useBandContext must be used within a BandProvider');
|
|
}
|
|
return context;
|
|
}
|