PluginProbe
Yatra – Travel Booking & Tour Operator Software / 3.0.13
Yatra – Travel Booking & Tour Operator Software v3.0.13
3.0.17 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 All 85 releases
yatra / resources / js / pages / premium-pages / AdditionalServices.tsx

AdditionalServices.tsx in Yatra – Travel Booking & Tour Operator Software 3.0.13, at resources/js/pages/premium-pages/AdditionalServices.tsx

325 lines 11.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Additional Services Premium Page
3 *
4 * Premium upgrade page for Additional Services module.
5 * Shows when Yatra Pro is not active or module is not enabled.
6 *
7 * @package Yatra
8 * @since 3.0.0
9 */
10
11 import React from "react";
12 import { Card, CardContent } from "../../components/ui/card";
13 import { Button } from "../../components/ui/button";
14 import { __ } from "../../lib/i18n";
15 import {
16 Package,
17 DollarSign,
18 Users,
19 Sparkles,
20 CheckCircle,
21 ArrowRight,
22 Shield,
23 TrendingUp,
24 RotateCcw,
25 FileText,
26 } from "lucide-react";
27
28 // Premium Upgrade Component
29 const AdditionalServicesPremium: React.FC = () => {
30 const features = [
31 {
32 icon: Package,
33 title: __("Service Management"),
34 description: __(
35 "Create and manage unlimited add-on services for your trips.",
36 ),
37 },
38 {
39 icon: DollarSign,
40 title: __("Flexible Pricing"),
41 description: __(
42 "Set pricing per person, per booking, or per day with multiple options.",
43 ),
44 },
45 {
46 icon: Users,
47 title: __("Trip Assignment"),
48 description: __(
49 "Assign services to specific trips or apply globally to all trips.",
50 ),
51 },
52 {
53 icon: Shield,
54 title: __("Booking Integration"),
55 description: __(
56 "Seamless integration with booking process and payment collection.",
57 ),
58 },
59 ];
60
61 const stats = [
62 {
63 icon: TrendingUp,
64 value: "25%",
65 label: __("Revenue Increase"),
66 },
67 {
68 icon: Users,
69 value: "89%",
70 label: __("Customer Satisfaction"),
71 },
72 {
73 icon: Package,
74 value: "Unlimited",
75 label: __("Services"),
76 },
77 {
78 icon: DollarSign,
79 value: "Flexible",
80 label: __("Pricing Options"),
81 },
82 ];
83
84 const popularServices = [
85 {
86 icon: FileText,
87 title: __("Travel Insurance"),
88 description: __("Comprehensive travel coverage for peace of mind."),
89 price: __("From $29/person"),
90 },
91 {
92 icon: RotateCcw,
93 title: __("Airport Transfers"),
94 description: __("Hassle-free airport pickup and drop-off services."),
95 price: __("From $45/transfer"),
96 },
97 {
98 icon: Package,
99 title: __("Equipment Rental"),
100 description: __("Quality gear and equipment for outdoor activities."),
101 price: __("From $15/day"),
102 },
103 {
104 icon: Users,
105 title: __("Meal Packages"),
106 description: __(
107 "Delicious meal options for different dietary requirements.",
108 ),
109 price: __("From $25/day"),
110 },
111 ];
112
113 return (
114 <div className="space-y-8">
115 {/* Premium Notice */}
116 <div className="bg-gradient-to-r from-amber-50 to-orange-50 dark:from-amber-900/20 dark:to-orange-900/20 border border-amber-200 dark:border-amber-800 rounded-xl p-6">
117 <div className="flex items-center justify-between">
118 <div className="flex items-center gap-3">
119 <Sparkles className="w-6 h-6 text-amber-600 dark:text-amber-400" />
120 <div>
121 <h3 className="text-lg font-semibold text-amber-900 dark:text-amber-100">
122 {__("Premium Feature")}
123 </h3>
124 <p className="text-amber-700 dark:text-amber-300 text-sm">
125 {__(
126 "Additional Services is a premium module. Upgrade to Yatra Pro to unlock all features.",
127 )}
128 </p>
129 </div>
130 </div>
131 <Button
132 className="bg-amber-600 text-white hover:bg-amber-700 px-6 py-2 text-sm font-medium"
133 onClick={() =>
134 window.open(
135 "https://wpyatra.com/pricing?module=additional-services",
136 "_blank",
137 )
138 }
139 >
140 {__("Upgrade to Pro")}
141 <ArrowRight className="w-4 h-4 ml-2" />
142 </Button>
143 </div>
144 </div>
145
146 {/* Hero Section */}
147 <div className="text-center mb-12">
148 <div className="inline-flex items-center justify-center w-16 h-16 rounded-full bg-purple-100 dark:bg-purple-900 mb-6">
149 <Package className="w-8 h-8 text-purple-600 dark:text-purple-400" />
150 </div>
151 <div className="flex items-center justify-center space-x-2 mb-4">
152 <h1 className="text-4xl font-bold text-gray-900 dark:text-white">
153 {__("Additional Services")}
154 </h1>
155 <div className="inline-flex items-center px-2 py-1 rounded-full bg-gradient-to-r from-amber-500 to-orange-500 text-white text-xs font-semibold shadow-md">
156 <Sparkles className="w-3 h-3 mr-1" />
157 {__("PRO")}
158 </div>
159 </div>
160 <p className="text-xl text-gray-600 dark:text-gray-400 max-w-2xl mx-auto">
161 {__(
162 "Boost your revenue by offering optional add-ons like airport transfers, travel insurance, equipment rental, and meals during trip booking.",
163 )}
164 </p>
165 </div>
166
167 {/* Stats Preview */}
168 <div className="grid grid-cols-1 md:grid-cols-4 gap-6 mb-12">
169 {stats.map((stat, index) => {
170 const Icon = stat.icon;
171 return (
172 <Card
173 key={index}
174 className="border border-gray-200 dark:border-gray-700"
175 >
176 <CardContent className="pt-6">
177 <div className="flex items-center gap-3 mb-2">
178 <div className="w-10 h-10 rounded-full bg-purple-100 dark:bg-purple-900 flex items-center justify-center">
179 <Icon className="w-5 h-5 text-purple-600 dark:text-purple-400" />
180 </div>
181 <div>
182 <div className="text-2xl font-bold text-gray-900 dark:text-white">
183 {stat.value}
184 </div>
185 <div className="text-sm text-gray-600 dark:text-gray-400">
186 {stat.label}
187 </div>
188 </div>
189 </div>
190 </CardContent>
191 </Card>
192 );
193 })}
194 </div>
195
196 {/* Features Grid */}
197 <div className="mb-12">
198 <h2 className="text-2xl font-bold text-gray-900 dark:text-white mb-6 text-center">
199 {__("Powerful Features")}
200 </h2>
201 <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
202 {features.map((feature, index) => {
203 const Icon = feature.icon;
204 return (
205 <Card
206 key={index}
207 className="border border-gray-200 dark:border-gray-700"
208 >
209 <CardContent className="pt-6">
210 <div className="flex items-start gap-4">
211 <div className="w-12 h-12 rounded-full bg-purple-100 dark:bg-purple-900 flex items-center justify-center flex-shrink-0">
212 <Icon className="w-6 h-6 text-purple-600 dark:text-purple-400" />
213 </div>
214 <div>
215 <h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">
216 {feature.title}
217 </h3>
218 <p className="text-gray-600 dark:text-gray-400 text-sm">
219 {feature.description}
220 </p>
221 </div>
222 </div>
223 </CardContent>
224 </Card>
225 );
226 })}
227 </div>
228 </div>
229
230 {/* Popular Services */}
231 <div className="mb-12">
232 <h2 className="text-2xl font-bold text-gray-900 dark:text-white mb-6 text-center">
233 {__("Popular Service Types")}
234 </h2>
235 <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
236 {popularServices.map((service, index) => {
237 const Icon = service.icon;
238 return (
239 <Card
240 key={index}
241 className="border border-gray-200 dark:border-gray-700"
242 >
243 <CardContent className="pt-6">
244 <div className="text-center">
245 <div className="w-12 h-12 rounded-full bg-purple-100 dark:bg-purple-900 flex items-center justify-center mx-auto mb-4">
246 <Icon className="w-6 h-6 text-purple-600 dark:text-purple-400" />
247 </div>
248 <h4 className="font-semibold mb-2">{service.title}</h4>
249 <p className="text-sm text-gray-600 dark:text-gray-400 mb-3">
250 {service.description}
251 </p>
252 <div className="text-purple-600 dark:text-purple-400 font-semibold text-sm">
253 {service.price}
254 </div>
255 </div>
256 </CardContent>
257 </Card>
258 );
259 })}
260 </div>
261 </div>
262
263 {/* CTA Section */}
264 <div className="bg-gradient-to-r from-purple-50 to-indigo-50 dark:from-purple-900/20 dark:to-indigo-900/20 border border-purple-200 dark:border-purple-800 rounded-xl p-8">
265 <div className="flex flex-col md:flex-row items-center justify-between">
266 <div className="mb-6 md:mb-0 md:pr-8">
267 <div className="flex items-center gap-3 mb-4">
268 <div className="w-12 h-12 rounded-full bg-purple-100 dark:bg-purple-900 flex items-center justify-center">
269 <Sparkles className="w-6 h-6 text-purple-600 dark:text-purple-400" />
270 </div>
271 <h3 className="text-2xl font-bold text-gray-900 dark:text-white">
272 {__("Unlock Additional Services")}
273 </h3>
274 </div>
275 <p className="text-gray-600 dark:text-gray-400 mb-4">
276 {__(
277 "Offer premium add-ons and boost your revenue with Yatra Pro.",
278 )}
279 </p>
280 <div className="space-y-2">
281 <div className="flex items-center gap-2">
282 <CheckCircle className="w-4 h-4 text-green-500" />
283 <span className="text-sm text-gray-600 dark:text-gray-400">
284 {__("Airport transfers")}
285 </span>
286 </div>
287 <div className="flex items-center gap-2">
288 <CheckCircle className="w-4 h-4 text-green-500" />
289 <span className="text-sm text-gray-600 dark:text-gray-400">
290 {__("Travel insurance")}
291 </span>
292 </div>
293 <div className="flex items-center gap-2">
294 <CheckCircle className="w-4 h-4 text-green-500" />
295 <span className="text-sm text-gray-600 dark:text-gray-400">
296 {__("Equipment rental")}
297 </span>
298 </div>
299 </div>
300 </div>
301 <div className="flex flex-col items-center">
302 <Button
303 className="bg-purple-600 text-white hover:bg-purple-700 px-8 py-3 text-sm font-medium mb-3"
304 onClick={() =>
305 window.open(
306 "https://wpyatra.com/pricing?module=additional-services",
307 "_blank",
308 )
309 }
310 >
311 {__("Upgrade to Pro")}
312 <ArrowRight className="w-4 h-4 ml-2" />
313 </Button>
314 <p className="text-xs text-gray-500 dark:text-gray-400">
315 {__("14-day money-back guarantee")}
316 </p>
317 </div>
318 </div>
319 </div>
320 </div>
321 );
322 };
323
324 export default AdditionalServicesPremium;
325