mirror of
https://github.com/mudabbir-ahmad/MAD-Treasure-Hunt.git
synced 2026-10-07 19:00:20 +00:00
83 lines
2.1 KiB
JavaScript
83 lines
2.1 KiB
JavaScript
import {useCallback, useEffect, useMemo, useState} from 'react';
|
|
import {createSubgroup, getVisibleSubgroups, updateSubgroupCache} from '../API/API';
|
|
import {getSession} from '../Model/SessionStore';
|
|
|
|
const useSubgroupAdminViewModel = () => {
|
|
const [subgroups, setSubgroups] = useState([]);
|
|
const [subgroupName, setSubgroupName] = useState('');
|
|
const [cacheTriggerMeters, setCacheTriggerMeters] = useState('20');
|
|
const [error, setError] = useState('');
|
|
const [searchQuery, setSearchQuery] = useState('');
|
|
const { currentGid } = getSession();
|
|
|
|
const loadSubgroups = useCallback(async () => {
|
|
if (!currentGid) {
|
|
return;
|
|
}
|
|
const rows = await getVisibleSubgroups(currentGid);
|
|
setSubgroups(rows);
|
|
}, [currentGid]);
|
|
|
|
const filteredSubgroups = useMemo(() => {
|
|
if (!searchQuery.trim()) {
|
|
return subgroups;
|
|
}
|
|
const q = searchQuery.trim().toLowerCase();
|
|
return subgroups.filter((sg) => {
|
|
const nameMatch = sg.SubGroupName.toLowerCase().includes(q);
|
|
const idMatch = String(sg.SGid) === q;
|
|
return nameMatch || idMatch;
|
|
});
|
|
}, [subgroups, searchQuery]);
|
|
|
|
useEffect(() => {
|
|
loadSubgroups();
|
|
}, [loadSubgroups]);
|
|
|
|
const addSubgroup = async () => {
|
|
setError('');
|
|
try {
|
|
await createSubgroup({
|
|
gid: currentGid,
|
|
subgroupName: subgroupName.trim(),
|
|
cacheTriggerMeters: Number(cacheTriggerMeters),
|
|
});
|
|
setSubgroupName('');
|
|
await loadSubgroups();
|
|
return true;
|
|
} catch (e) {
|
|
setError(e.message);
|
|
return false;
|
|
}
|
|
};
|
|
|
|
const updateCacheForSubgroup = async (sgid, triggerMeters) => {
|
|
setError('');
|
|
try {
|
|
await updateSubgroupCache({ gid: currentGid, sgid, triggerMeters });
|
|
await loadSubgroups();
|
|
return true;
|
|
} catch (e) {
|
|
setError(e.message);
|
|
return false;
|
|
}
|
|
};
|
|
|
|
return {
|
|
subgroups,
|
|
filteredSubgroups,
|
|
searchQuery,
|
|
subgroupName,
|
|
cacheTriggerMeters,
|
|
error,
|
|
setSearchQuery,
|
|
setSubgroupName,
|
|
setCacheTriggerMeters,
|
|
addSubgroup,
|
|
updateCacheForSubgroup,
|
|
};
|
|
};
|
|
|
|
export default useSubgroupAdminViewModel;
|
|
|