fix outbound call routing race condition show default lcr route set that user cannot delete (#577)

This commit is contained in:
Hoan Luu Huu
2025-11-18 19:52:28 +07:00
committed by GitHub
parent b1ddaf230d
commit f003c158dc

View File

@@ -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;