mirror of
https://github.com/jambonz/jambonz-webapp.git
synced 2026-01-25 02:08:19 +00:00
fix outbound call routing race condition show default lcr route set that user cannot delete (#577)
This commit is contained in:
@@ -67,9 +67,6 @@ export const LcrForm = ({ lcrDataMap, lcrRouteDataMap }: LcrFormProps) => {
|
|||||||
const [accountSid, setAccountSid] = useState("");
|
const [accountSid, setAccountSid] = useState("");
|
||||||
const [isActive, setIsActive] = useState(true);
|
const [isActive, setIsActive] = useState(true);
|
||||||
const [lcrRoutes, setLcrRoutes] = useState<LcrRoute[]>([LCR_ROUTE_TEMPLATE]);
|
const [lcrRoutes, setLcrRoutes] = useState<LcrRoute[]>([LCR_ROUTE_TEMPLATE]);
|
||||||
const [previousLcrRoutes, setPreviousLcrRoutes] = useState<LcrRoute[]>([
|
|
||||||
LCR_ROUTE_TEMPLATE,
|
|
||||||
]);
|
|
||||||
const [previouseLcr, setPreviousLcr] = useState<Lcr | null>();
|
const [previouseLcr, setPreviousLcr] = useState<Lcr | null>();
|
||||||
const [accounts] = useServiceProviderData<Account[]>("Accounts");
|
const [accounts] = useServiceProviderData<Account[]>("Accounts");
|
||||||
const [lcrForDelete, setLcrForDelete] = useState<Lcr | null>();
|
const [lcrForDelete, setLcrForDelete] = useState<Lcr | null>();
|
||||||
@@ -127,38 +124,35 @@ export const LcrForm = ({ lcrDataMap, lcrRouteDataMap }: LcrFormProps) => {
|
|||||||
}, [lcrDataMap?.data, previouseLcr]);
|
}, [lcrDataMap?.data, previouseLcr]);
|
||||||
|
|
||||||
useMemo(() => {
|
useMemo(() => {
|
||||||
let default_lcr_route_sid = "";
|
// Only process when both lcrDataMap and lcrRouteDataMap are available
|
||||||
if (
|
if (lcrRouteDataMap && lcrRouteDataMap.data && lcrDataMap?.data) {
|
||||||
lcrRouteDataMap &&
|
const defaultCarrierSetEntrySid =
|
||||||
lcrRouteDataMap.data &&
|
lcrDataMap.data.default_carrier_set_entry_sid;
|
||||||
lcrRouteDataMap.data !== previousLcrRoutes
|
|
||||||
) {
|
// Find and store default route information
|
||||||
setPreviousLcrRoutes(lcrRouteDataMap.data);
|
lcrRouteDataMap.data.forEach((route) => {
|
||||||
// Find default carrier
|
route.lcr_carrier_set_entries?.forEach((entry) => {
|
||||||
lcrRouteDataMap.data.forEach((lr) => {
|
if (entry.lcr_carrier_set_entry_sid === defaultCarrierSetEntrySid) {
|
||||||
lr.lcr_carrier_set_entries?.forEach((entry) => {
|
|
||||||
if (
|
|
||||||
entry.lcr_carrier_set_entry_sid ===
|
|
||||||
lcrDataMap?.data?.default_carrier_set_entry_sid
|
|
||||||
) {
|
|
||||||
setDefaultLcrCarrier(entry.voip_carrier_sid || defaultCarrier);
|
setDefaultLcrCarrier(entry.voip_carrier_sid || defaultCarrier);
|
||||||
setDefaultLcrCarrierSetEntrySid(
|
setDefaultLcrCarrierSetEntrySid(
|
||||||
entry.lcr_carrier_set_entry_sid || null,
|
entry.lcr_carrier_set_entry_sid || null,
|
||||||
);
|
);
|
||||||
default_lcr_route_sid = entry.lcr_route_sid || "";
|
setDefaultLcrRoute(route);
|
||||||
setDefaultLcrRoute(lr);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
if (lcrRouteDataMap && lcrRouteDataMap.data)
|
// Filter out routes that contain the default carrier set entry
|
||||||
setLcrRoutes(
|
const filteredRoutes = lcrRouteDataMap.data.filter((route) => {
|
||||||
lcrRouteDataMap.data.filter(
|
return !route.lcr_carrier_set_entries?.some(
|
||||||
(route) => route.lcr_route_sid !== default_lcr_route_sid,
|
(entry) =>
|
||||||
),
|
entry.lcr_carrier_set_entry_sid === defaultCarrierSetEntrySid,
|
||||||
);
|
);
|
||||||
}, [lcrRouteDataMap?.data]);
|
});
|
||||||
|
|
||||||
|
setLcrRoutes(filteredRoutes);
|
||||||
|
}
|
||||||
|
}, [lcrRouteDataMap?.data, lcrDataMap?.data]);
|
||||||
|
|
||||||
const addLcrRoutes = () => {
|
const addLcrRoutes = () => {
|
||||||
const newLcrRoute = LCR_ROUTE_TEMPLATE;
|
const newLcrRoute = LCR_ROUTE_TEMPLATE;
|
||||||
|
|||||||
Reference in New Issue
Block a user