PluginProbe
Yatra – Travel Booking & Tour Operator Software / 3.0.16
Yatra – Travel Booking & Tour Operator Software v3.0.16
3.0.16 3.0.15 3.0.14 3.0.14.1 3.0.14.2 3.0.12 3.0.13 3.0.11 3.0.10 3.0.9 3.0.8 3.0.7 3.0.6 3.0.5 3.0.5.1 3.0.4 3.0.3 3.0.2.9 3.0.2.7 3.0.2.8 3.0.2.6 trunk 1.0.0 2.0.0 2.0.1 All 84 releases
← All changes | resources/js/App.tsx +10 -4 3.0.8 → 3.0.16 View file →
@@ -104,8 +104,9 @@
104 104 const RecurringRuleForm = lazy(() => import("./pages/RecurringRuleForm"));
105 105 const Whatsapp = lazy(() => import("./pages/Whatsapp"));
106 106 const ChannelManager = lazy(() => import("./pages/ChannelManager"));
107 107 const Webhooks = lazy(() => import("./pages/Webhooks"));
108 +const ScheduledPayments = lazy(() => import("./pages/ScheduledPayments"));
108 109 const TripConsentForm = lazy(() => import("./pages/TripConsentForm"));
109 110 const BookingForm = lazy(() => import("./pages/BookingForm"));
110 111 const ViewBooking = lazy(() => import("./pages/ViewBooking"));
111 112 const AvailabilityForm = lazy(() => import("./pages/AvailabilityForm"));
@@ -163,9 +164,9 @@
163 164 // Get subpage, tab, and action from URL query parameters
164 165 const subpage = useMemo(() => {
165 166 const params = new URLSearchParams(window.location.search);
166 167 return params.get("subpage") || "dashboard";
167 - // eslint-disable-next-line react-hooks/exhaustive-deps
168 + // eslint-disable-next-line react-hooks/exhaustive-deps
168 169 }, [urlKey]);
169 170
170 171 // Mark a badged section seen when its page is opened, so the sidebar badge
171 172 // clears (bumps the wp_options marker server-side, then the shared counts
@@ -175,21 +176,21 @@
175 176 const section = SUBPAGE_TO_SECTION[subpage.toLowerCase()];
176 177 if (section) {
177 178 markSectionSeen.mutate(section);
178 179 }
179 - // eslint-disable-next-line react-hooks/exhaustive-deps
180 + // eslint-disable-next-line react-hooks/exhaustive-deps
180 181 }, [subpage]);
181 182
182 183 const tab = useMemo(() => {
183 184 const params = new URLSearchParams(window.location.search);
184 185 return params.get("tab") || "all";
185 - // eslint-disable-next-line react-hooks/exhaustive-deps
186 + // eslint-disable-next-line react-hooks/exhaustive-deps
186 187 }, [urlKey]);
187 188
188 189 const action = useMemo(() => {
189 190 const params = new URLSearchParams(window.location.search);
190 191 return params.get("action");
191 - // eslint-disable-next-line react-hooks/exhaustive-deps
192 + // eslint-disable-next-line react-hooks/exhaustive-deps
192 193 }, [urlKey, subpage]);
193 194
194 195 // Render the appropriate page based on subpage, tab, and action parameters
195 196 const renderPage = () => {
@@ -353,8 +354,13 @@
353 354 return <DiscountForm />;
354 355 }
355 356 return <Discounts />;
356 357 case "payments":
358 + // Scheduled balance payments (Pro module) live under Payments as a tab.
359 + // Checked before the action branches because this tab has no forms.
360 + if (tab.toLowerCase() === "scheduled") {
361 + return <ScheduledPayments />;
362 + }
357 363 // Check if we're viewing, creating, or editing a payment
358 364 if (action === "view") {
359 365 return <ViewPayment />;
360 366 }