related-ui-components 1.3.4 → 1.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/lib/commonjs/app.js +39 -20
  2. package/lib/commonjs/app.js.map +1 -1
  3. package/lib/commonjs/components/DateRangePicker/DateRangePicker.js +358 -0
  4. package/lib/commonjs/components/DateRangePicker/DateRangePicker.js.map +1 -0
  5. package/lib/commonjs/components/DateRangePicker/index.js +4 -0
  6. package/lib/commonjs/components/DateRangePicker/index.js.map +1 -0
  7. package/lib/commonjs/components/Filters/Filters.js +1 -1
  8. package/lib/commonjs/components/Filters/Filters.js.map +1 -1
  9. package/lib/commonjs/components/Input/Input.js +2 -2
  10. package/lib/commonjs/components/Input/Input.js.map +1 -1
  11. package/lib/commonjs/components/NumericStepper/NumericStepper.js +103 -0
  12. package/lib/commonjs/components/NumericStepper/NumericStepper.js.map +1 -0
  13. package/lib/commonjs/components/NumericStepper/index.js +29 -0
  14. package/lib/commonjs/components/NumericStepper/index.js.map +1 -0
  15. package/lib/commonjs/components/SelectAmount/SelectAmount.js +189 -0
  16. package/lib/commonjs/components/SelectAmount/SelectAmount.js.map +1 -0
  17. package/lib/commonjs/components/SelectAmount/index.js +4 -0
  18. package/lib/commonjs/components/SelectAmount/index.js.map +1 -0
  19. package/lib/commonjs/components/Suggestions/SuggestionList.js +98 -0
  20. package/lib/commonjs/components/Suggestions/SuggestionList.js.map +1 -0
  21. package/lib/commonjs/components/TravelBooking/CarRentalForm.js +370 -0
  22. package/lib/commonjs/components/TravelBooking/CarRentalForm.js.map +1 -0
  23. package/lib/commonjs/components/TravelBooking/FlightForm.js +347 -0
  24. package/lib/commonjs/components/TravelBooking/FlightForm.js.map +1 -0
  25. package/lib/commonjs/components/TravelBooking/FlightSummary.js +257 -0
  26. package/lib/commonjs/components/TravelBooking/FlightSummary.js.map +1 -0
  27. package/lib/commonjs/components/TravelBooking/HotelForm.js +290 -0
  28. package/lib/commonjs/components/TravelBooking/HotelForm.js.map +1 -0
  29. package/lib/commonjs/components/TravelBooking/HotelSummary.js +246 -0
  30. package/lib/commonjs/components/TravelBooking/HotelSummary.js.map +1 -0
  31. package/lib/commonjs/components/TravelBooking/README.md +421 -0
  32. package/lib/commonjs/components/TravelBooking/SummaryBar.js +181 -0
  33. package/lib/commonjs/components/TravelBooking/SummaryBar.js.map +1 -0
  34. package/lib/commonjs/components/TravelBooking/TabSelector.js +115 -0
  35. package/lib/commonjs/components/TravelBooking/TabSelector.js.map +1 -0
  36. package/lib/commonjs/components/TravelBooking/TravelBooking.js +261 -0
  37. package/lib/commonjs/components/TravelBooking/TravelBooking.js.map +1 -0
  38. package/lib/commonjs/components/TravelBooking/index.js +22 -0
  39. package/lib/commonjs/components/TravelBooking/index.js.map +1 -0
  40. package/lib/commonjs/components/TravelBooking/types.js +15 -0
  41. package/lib/commonjs/components/TravelBooking/types.js.map +1 -0
  42. package/lib/commonjs/components/UnlockRewards/UnlockRewards.js +2 -2
  43. package/lib/commonjs/components/UnlockRewards/UnlockRewards.js.map +1 -1
  44. package/lib/commonjs/index.js +0 -5
  45. package/lib/commonjs/index.js.map +1 -1
  46. package/lib/module/app.js +43 -24
  47. package/lib/module/app.js.map +1 -1
  48. package/lib/module/components/DateRangePicker/DateRangePicker.js +350 -0
  49. package/lib/module/components/DateRangePicker/DateRangePicker.js.map +1 -0
  50. package/lib/module/components/DateRangePicker/index.js +4 -0
  51. package/lib/module/components/DateRangePicker/index.js.map +1 -0
  52. package/lib/module/components/Filters/Filters.js +1 -1
  53. package/lib/module/components/Filters/Filters.js.map +1 -1
  54. package/lib/module/components/Input/Input.js +2 -2
  55. package/lib/module/components/Input/Input.js.map +1 -1
  56. package/lib/module/components/NumericStepper/NumericStepper.js +96 -0
  57. package/lib/module/components/NumericStepper/NumericStepper.js.map +1 -0
  58. package/lib/module/components/NumericStepper/index.js +5 -0
  59. package/lib/module/components/NumericStepper/index.js.map +1 -0
  60. package/lib/module/components/SelectAmount/SelectAmount.js +184 -0
  61. package/lib/module/components/SelectAmount/SelectAmount.js.map +1 -0
  62. package/lib/module/components/SelectAmount/index.js +4 -0
  63. package/lib/module/components/SelectAmount/index.js.map +1 -0
  64. package/lib/module/components/Suggestions/SuggestionList.js +92 -0
  65. package/lib/module/components/Suggestions/SuggestionList.js.map +1 -0
  66. package/lib/module/components/TravelBooking/CarRentalForm.js +363 -0
  67. package/lib/module/components/TravelBooking/CarRentalForm.js.map +1 -0
  68. package/lib/module/components/TravelBooking/FlightForm.js +340 -0
  69. package/lib/module/components/TravelBooking/FlightForm.js.map +1 -0
  70. package/lib/module/components/TravelBooking/FlightSummary.js +254 -0
  71. package/lib/module/components/TravelBooking/FlightSummary.js.map +1 -0
  72. package/lib/module/components/TravelBooking/HotelForm.js +286 -0
  73. package/lib/module/components/TravelBooking/HotelForm.js.map +1 -0
  74. package/lib/module/components/TravelBooking/HotelSummary.js +239 -0
  75. package/lib/module/components/TravelBooking/HotelSummary.js.map +1 -0
  76. package/lib/module/components/TravelBooking/README.md +421 -0
  77. package/lib/module/components/TravelBooking/SummaryBar.js +174 -0
  78. package/lib/module/components/TravelBooking/SummaryBar.js.map +1 -0
  79. package/lib/module/components/TravelBooking/TabSelector.js +110 -0
  80. package/lib/module/components/TravelBooking/TabSelector.js.map +1 -0
  81. package/lib/module/components/TravelBooking/TravelBooking.js +243 -0
  82. package/lib/module/components/TravelBooking/TravelBooking.js.map +1 -0
  83. package/lib/module/components/TravelBooking/index.js +22 -0
  84. package/lib/module/components/TravelBooking/index.js.map +1 -0
  85. package/lib/module/components/TravelBooking/types.js +11 -0
  86. package/lib/module/components/TravelBooking/types.js.map +1 -0
  87. package/lib/module/components/UnlockRewards/UnlockRewards.js +2 -2
  88. package/lib/module/components/UnlockRewards/UnlockRewards.js.map +1 -1
  89. package/lib/module/index.js +7 -4
  90. package/lib/module/index.js.map +1 -1
  91. package/lib/typescript/commonjs/app.d.ts.map +1 -1
  92. package/lib/typescript/commonjs/components/DateRangePicker/DateRangePicker.d.ts +25 -0
  93. package/lib/typescript/commonjs/components/DateRangePicker/DateRangePicker.d.ts.map +1 -0
  94. package/lib/typescript/commonjs/components/DateRangePicker/index.d.ts +1 -0
  95. package/lib/typescript/commonjs/components/DateRangePicker/index.d.ts.map +1 -0
  96. package/lib/typescript/commonjs/components/NumericStepper/NumericStepper.d.ts +19 -0
  97. package/lib/typescript/commonjs/components/NumericStepper/NumericStepper.d.ts.map +1 -0
  98. package/lib/typescript/commonjs/components/NumericStepper/index.d.ts +3 -0
  99. package/lib/typescript/commonjs/components/NumericStepper/index.d.ts.map +1 -0
  100. package/lib/typescript/commonjs/components/SelectAmount/SelectAmount.d.ts +29 -0
  101. package/lib/typescript/commonjs/components/SelectAmount/SelectAmount.d.ts.map +1 -0
  102. package/lib/typescript/commonjs/components/SelectAmount/index.d.ts +1 -0
  103. package/lib/typescript/commonjs/components/SelectAmount/index.d.ts.map +1 -0
  104. package/lib/typescript/commonjs/components/Suggestions/SuggestionList.d.ts +14 -0
  105. package/lib/typescript/commonjs/components/Suggestions/SuggestionList.d.ts.map +1 -0
  106. package/lib/typescript/commonjs/components/TravelBooking/CarRentalForm.d.ts +58 -0
  107. package/lib/typescript/commonjs/components/TravelBooking/CarRentalForm.d.ts.map +1 -0
  108. package/lib/typescript/commonjs/components/TravelBooking/FlightForm.d.ts +57 -0
  109. package/lib/typescript/commonjs/components/TravelBooking/FlightForm.d.ts.map +1 -0
  110. package/lib/typescript/commonjs/components/TravelBooking/FlightSummary.d.ts +41 -0
  111. package/lib/typescript/commonjs/components/TravelBooking/FlightSummary.d.ts.map +1 -0
  112. package/lib/typescript/commonjs/components/TravelBooking/HotelForm.d.ts +52 -0
  113. package/lib/typescript/commonjs/components/TravelBooking/HotelForm.d.ts.map +1 -0
  114. package/lib/typescript/commonjs/components/TravelBooking/HotelSummary.d.ts +44 -0
  115. package/lib/typescript/commonjs/components/TravelBooking/HotelSummary.d.ts.map +1 -0
  116. package/lib/typescript/commonjs/components/TravelBooking/SummaryBar.d.ts +17 -0
  117. package/lib/typescript/commonjs/components/TravelBooking/SummaryBar.d.ts.map +1 -0
  118. package/lib/typescript/commonjs/components/TravelBooking/TabSelector.d.ts +17 -0
  119. package/lib/typescript/commonjs/components/TravelBooking/TabSelector.d.ts.map +1 -0
  120. package/lib/typescript/commonjs/components/TravelBooking/TravelBooking.d.ts +84 -0
  121. package/lib/typescript/commonjs/components/TravelBooking/TravelBooking.d.ts.map +1 -0
  122. package/lib/typescript/commonjs/components/TravelBooking/index.d.ts +1 -0
  123. package/lib/typescript/commonjs/components/TravelBooking/index.d.ts.map +1 -0
  124. package/lib/typescript/commonjs/components/TravelBooking/types.d.ts +26 -0
  125. package/lib/typescript/commonjs/components/TravelBooking/types.d.ts.map +1 -0
  126. package/lib/typescript/commonjs/index.d.ts +0 -1
  127. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  128. package/lib/typescript/module/app.d.ts.map +1 -1
  129. package/lib/typescript/module/components/DateRangePicker/DateRangePicker.d.ts +25 -0
  130. package/lib/typescript/module/components/DateRangePicker/DateRangePicker.d.ts.map +1 -0
  131. package/lib/typescript/module/components/DateRangePicker/index.d.ts +1 -0
  132. package/lib/typescript/module/components/DateRangePicker/index.d.ts.map +1 -0
  133. package/lib/typescript/module/components/NumericStepper/NumericStepper.d.ts +19 -0
  134. package/lib/typescript/module/components/NumericStepper/NumericStepper.d.ts.map +1 -0
  135. package/lib/typescript/module/components/NumericStepper/index.d.ts +3 -0
  136. package/lib/typescript/module/components/NumericStepper/index.d.ts.map +1 -0
  137. package/lib/typescript/module/components/SelectAmount/SelectAmount.d.ts +29 -0
  138. package/lib/typescript/module/components/SelectAmount/SelectAmount.d.ts.map +1 -0
  139. package/lib/typescript/module/components/SelectAmount/index.d.ts +1 -0
  140. package/lib/typescript/module/components/SelectAmount/index.d.ts.map +1 -0
  141. package/lib/typescript/module/components/Suggestions/SuggestionList.d.ts +14 -0
  142. package/lib/typescript/module/components/Suggestions/SuggestionList.d.ts.map +1 -0
  143. package/lib/typescript/module/components/TravelBooking/CarRentalForm.d.ts +58 -0
  144. package/lib/typescript/module/components/TravelBooking/CarRentalForm.d.ts.map +1 -0
  145. package/lib/typescript/module/components/TravelBooking/FlightForm.d.ts +57 -0
  146. package/lib/typescript/module/components/TravelBooking/FlightForm.d.ts.map +1 -0
  147. package/lib/typescript/module/components/TravelBooking/FlightSummary.d.ts +41 -0
  148. package/lib/typescript/module/components/TravelBooking/FlightSummary.d.ts.map +1 -0
  149. package/lib/typescript/module/components/TravelBooking/HotelForm.d.ts +52 -0
  150. package/lib/typescript/module/components/TravelBooking/HotelForm.d.ts.map +1 -0
  151. package/lib/typescript/module/components/TravelBooking/HotelSummary.d.ts +44 -0
  152. package/lib/typescript/module/components/TravelBooking/HotelSummary.d.ts.map +1 -0
  153. package/lib/typescript/module/components/TravelBooking/SummaryBar.d.ts +17 -0
  154. package/lib/typescript/module/components/TravelBooking/SummaryBar.d.ts.map +1 -0
  155. package/lib/typescript/module/components/TravelBooking/TabSelector.d.ts +17 -0
  156. package/lib/typescript/module/components/TravelBooking/TabSelector.d.ts.map +1 -0
  157. package/lib/typescript/module/components/TravelBooking/TravelBooking.d.ts +84 -0
  158. package/lib/typescript/module/components/TravelBooking/TravelBooking.d.ts.map +1 -0
  159. package/lib/typescript/module/components/TravelBooking/index.d.ts +1 -0
  160. package/lib/typescript/module/components/TravelBooking/index.d.ts.map +1 -0
  161. package/lib/typescript/module/components/TravelBooking/types.d.ts +26 -0
  162. package/lib/typescript/module/components/TravelBooking/types.d.ts.map +1 -0
  163. package/lib/typescript/module/index.d.ts +0 -1
  164. package/lib/typescript/module/index.d.ts.map +1 -1
  165. package/package.json +12 -8
  166. package/src/app.tsx +77 -13
  167. package/src/components/DateRangePicker/DateRangePicker.tsx +410 -0
  168. package/src/components/DateRangePicker/index.ts +2 -0
  169. package/src/components/Filters/Filters.tsx +1 -1
  170. package/src/components/Input/Input.tsx +1 -1
  171. package/src/components/NumericStepper/NumericStepper.tsx +117 -0
  172. package/src/components/NumericStepper/index.ts +2 -0
  173. package/src/components/SelectAmount/SelectAmount.tsx +217 -0
  174. package/src/components/SelectAmount/index.ts +2 -0
  175. package/src/components/Suggestions/SuggestionList.tsx +106 -0
  176. package/src/components/TravelBooking/CarRentalForm.tsx +440 -0
  177. package/src/components/TravelBooking/FlightForm.tsx +452 -0
  178. package/src/components/TravelBooking/FlightSummary.tsx +388 -0
  179. package/src/components/TravelBooking/HotelForm.tsx +365 -0
  180. package/src/components/TravelBooking/HotelSummary.tsx +340 -0
  181. package/src/components/TravelBooking/README.md +421 -0
  182. package/src/components/TravelBooking/SummaryBar.tsx +239 -0
  183. package/src/components/TravelBooking/TabSelector.tsx +158 -0
  184. package/src/components/TravelBooking/TravelBooking.tsx +407 -0
  185. package/src/components/TravelBooking/index.ts +20 -0
  186. package/src/components/TravelBooking/types.ts +28 -0
  187. package/src/components/UnlockRewards/UnlockRewards.tsx +2 -2
  188. package/src/index.ts +4 -4
@@ -0,0 +1,388 @@
1
+ import { ThemeType, useTheme } from "@/theme";
2
+ import React, { useCallback, useEffect, useMemo, useState } from "react";
3
+ import {
4
+ StyleProp,
5
+ StyleSheet,
6
+ Text,
7
+ TouchableOpacity,
8
+ View,
9
+ ViewStyle,
10
+ TextStyle, // Import TextStyle
11
+ } from "react-native";
12
+ import { NumericStepper, NumericStepperProps } from "../NumericStepper";
13
+
14
+ export interface PassengerConfig {
15
+ key: string;
16
+ name: string;
17
+ description: string;
18
+ defaultValue: number;
19
+ minValue: number;
20
+ maxValue?: number;
21
+ }
22
+
23
+ export interface FlightSelection {
24
+ flightType: string;
25
+ flightClass: string;
26
+ passengers: Record<string, number>;
27
+ }
28
+
29
+ const DEFAULT_PASSENGERS: PassengerConfig[] = [
30
+ {
31
+ key: "adults",
32
+ name: "Adults",
33
+ description: "12+ years old",
34
+ defaultValue: 1,
35
+ minValue: 1,
36
+ maxValue: 9,
37
+ },
38
+ {
39
+ key: "children",
40
+ name: "Children",
41
+ description: "2 - 11 years old",
42
+ defaultValue: 0,
43
+ minValue: 0,
44
+ maxValue: 9,
45
+ },
46
+ {
47
+ key: "infants",
48
+ name: "Infants",
49
+ description: "0 - 1 years old",
50
+ defaultValue: 0,
51
+ minValue: 0,
52
+ maxValue: 9,
53
+ },
54
+ ];
55
+ const DEFAULT_FLIGHT_TYPES = ["Round trip", "One way"];
56
+ const DEFAULT_FLIGHT_CLASSES = ["Economy", "Business", "First"];
57
+
58
+ const getInitialPassengerCounts = (
59
+ config: PassengerConfig[]
60
+ ): Record<string, number> => {
61
+ return config.reduce((acc, passenger) => {
62
+ acc[passenger.key] = passenger.defaultValue;
63
+ return acc;
64
+ }, {} as Record<string, number>);
65
+ };
66
+
67
+ // --- Component Props ---
68
+ export interface FlightSummaryProps {
69
+ // Data Props
70
+ passengersData?: PassengerConfig[];
71
+ flightTypesData?: string[];
72
+ flightClassesData?: string[];
73
+
74
+ // State & Callbacks
75
+ selection?: FlightSelection; // Renamed from 'selection' for clarity
76
+ onSelectionChange?: (details: FlightSelection) => void;
77
+
78
+ // Style Props
79
+ containerStyle?: StyleProp<ViewStyle>;
80
+ buttonGroupContainerStyle?: StyleProp<ViewStyle>;
81
+ buttonStyle?: StyleProp<ViewStyle>;
82
+ selectedButtonStyle?: StyleProp<ViewStyle>;
83
+ buttonTextStyle?: StyleProp<TextStyle>;
84
+ selectedButtonTextStyle?: StyleProp<TextStyle>;
85
+ passengerSectionStyle?: StyleProp<ViewStyle>;
86
+ passengerRowStyle?: StyleProp<ViewStyle>;
87
+ passengerLabelContainerStyle?: StyleProp<ViewStyle>;
88
+ passengerNameStyle?: StyleProp<TextStyle>;
89
+ passengerDescriptionStyle?: StyleProp<TextStyle>;
90
+ // Pass-through styles for NumericStepper
91
+ stepperContainerStyle?: NumericStepperProps["style"];
92
+ stepperButtonStyle?: NumericStepperProps["buttonStyle"];
93
+ stepperButtonTextStyle?: NumericStepperProps["buttonTextStyle"];
94
+ stepperValueTextStyle?: NumericStepperProps["valueTextStyle"];
95
+ }
96
+
97
+ // --- Component Implementation ---
98
+ const FlightSummary: React.FC<FlightSummaryProps> = ({
99
+ // Data
100
+ passengersData: passengersProp = DEFAULT_PASSENGERS,
101
+ flightTypesData: flightTypesProp = DEFAULT_FLIGHT_TYPES,
102
+ flightClassesData: flightClassesProp = DEFAULT_FLIGHT_CLASSES,
103
+ // State & Callbacks
104
+ selection,
105
+ onSelectionChange,
106
+ // Styles
107
+ containerStyle,
108
+ buttonGroupContainerStyle,
109
+ buttonStyle,
110
+ selectedButtonStyle,
111
+ buttonTextStyle,
112
+ selectedButtonTextStyle,
113
+ passengerSectionStyle,
114
+ passengerRowStyle,
115
+ passengerLabelContainerStyle,
116
+ passengerNameStyle,
117
+ passengerDescriptionStyle,
118
+ stepperContainerStyle,
119
+ stepperButtonStyle,
120
+ stepperButtonTextStyle,
121
+ stepperValueTextStyle,
122
+ }) => {
123
+ const { theme, isRTL } = useTheme();
124
+ const styles = useMemo(() => themedStyles(theme, isRTL), [theme, isRTL]);
125
+
126
+ const passengersConfig = useMemo(() => passengersProp, [passengersProp]);
127
+ const flightTypes = useMemo(() => flightTypesProp, [flightTypesProp]);
128
+ const flightClasses = useMemo(() => flightClassesProp, [flightClassesProp]);
129
+
130
+ const [selectedFlightType, setSelectedFlightType] = useState<string>(
131
+ selection?.flightType ?? flightTypes[0]
132
+ );
133
+ const [selectedFlightClass, setSelectedFlightClass] = useState<string>(
134
+ selection?.flightClass ?? flightClasses[0]
135
+ );
136
+ const [passengerCounts, setPassengerCounts] = useState<Record<string, number>>(
137
+ selection?.passengers ?? getInitialPassengerCounts(passengersConfig)
138
+ );
139
+
140
+ const handleFlightTypeSelect = useCallback(
141
+ (type: string) => {
142
+ setSelectedFlightType(type);
143
+
144
+ const newState: FlightSelection = {
145
+ flightType: type,
146
+ flightClass: selectedFlightClass,
147
+ passengers: passengerCounts,
148
+ };
149
+ onSelectionChange?.(newState);
150
+ },
151
+ [selectedFlightClass, passengerCounts, onSelectionChange]
152
+ );
153
+
154
+ const handlePassengerChange = useCallback(
155
+ (passengerKey: string, action: "increment" | "decrement") => {
156
+ setPassengerCounts((prevCounts) => {
157
+ const passengerInfo = passengersConfig.find(
158
+ (p) => p.key === passengerKey
159
+ );
160
+ if (!passengerInfo) return prevCounts;
161
+
162
+ const currentVal = prevCounts[passengerKey];
163
+ const minValue = passengerInfo.minValue;
164
+
165
+ const maxValue =
166
+ passengerInfo.maxValue ?? 99;
167
+
168
+ let newValue = currentVal;
169
+ if (action === "increment") {
170
+ newValue = Math.min(maxValue, currentVal + 1);
171
+ } else if (action === "decrement") {
172
+ newValue = Math.max(minValue, currentVal - 1);
173
+ }
174
+
175
+ // Only update if value changed
176
+ if (newValue === currentVal) {
177
+ return prevCounts;
178
+ }
179
+
180
+ const newCounts = { ...prevCounts, [passengerKey]: newValue };
181
+ const newState: FlightSelection = {
182
+ flightType: selectedFlightType,
183
+ flightClass: selectedFlightClass,
184
+ passengers: newCounts,
185
+ };
186
+ onSelectionChange?.(newState);
187
+ return newCounts;
188
+ });
189
+ },
190
+ [
191
+ passengersConfig,
192
+ selectedFlightType,
193
+ selectedFlightClass,
194
+ onSelectionChange,
195
+ // No dependency on passengerCounts due to updater function usage
196
+ ]
197
+ );
198
+
199
+ const handleFlightClassSelect = useCallback(
200
+ (fClass: string) => {
201
+ setSelectedFlightClass(fClass);
202
+ const newState: FlightSelection = {
203
+ flightType: selectedFlightType,
204
+ flightClass: fClass,
205
+ passengers: passengerCounts,
206
+ };
207
+ onSelectionChange?.(newState);
208
+ },
209
+ [selectedFlightType, passengerCounts, onSelectionChange]
210
+ );
211
+
212
+ // --- Render Helpers ---
213
+ const renderButtonGroup = (
214
+ items: string[],
215
+ selectedValue: string,
216
+ onSelect: (item: string) => void
217
+ ) => (
218
+ <View style={[styles.buttonGroupContainer, buttonGroupContainerStyle]}>
219
+ {items.map((item) => {
220
+ const isSelected = item === selectedValue;
221
+ return (
222
+ <TouchableOpacity
223
+ key={item}
224
+ style={[
225
+ styles.button,
226
+ buttonStyle,
227
+ isSelected && styles.selectedButton,
228
+ isSelected && selectedButtonStyle,
229
+ ]}
230
+ onPress={() => onSelect(item)}
231
+ activeOpacity={0.7}
232
+ >
233
+ <Text
234
+ style={[
235
+ styles.buttonText,
236
+ buttonTextStyle,
237
+ isSelected && styles.selectedButtonText,
238
+ isSelected && selectedButtonTextStyle,
239
+ ]}
240
+ >
241
+ {item}
242
+ </Text>
243
+ </TouchableOpacity>
244
+ );
245
+ })}
246
+ </View>
247
+ );
248
+
249
+ useEffect(() => {
250
+ onSelectionChange?.({
251
+ flightType: selectedFlightType,
252
+ flightClass: selectedFlightClass,
253
+ passengers: passengerCounts,
254
+ });
255
+ }, []);
256
+
257
+ return (
258
+ <View style={[styles.container, containerStyle]}>
259
+ {/* Flight Type */}
260
+ {renderButtonGroup(
261
+ flightTypes,
262
+ selectedFlightType,
263
+ handleFlightTypeSelect
264
+ )}
265
+
266
+ {/* Passengers */}
267
+ <View style={[styles.passengerSection, passengerSectionStyle]}>
268
+ {passengersConfig.map((passenger) => (
269
+ <View
270
+ key={passenger.key}
271
+ style={[styles.passengerRow, passengerRowStyle]}
272
+ >
273
+ <View
274
+ style={[
275
+ styles.passengerLabelContainer,
276
+ passengerLabelContainerStyle,
277
+ ]}
278
+ >
279
+ <Text style={[styles.passengerName, passengerNameStyle]}>
280
+ {passenger.name}
281
+ </Text>
282
+ <Text
283
+ style={[
284
+ styles.passengerDescription,
285
+ passengerDescriptionStyle,
286
+ ]}
287
+ >
288
+ {passenger.description}
289
+ </Text>
290
+ </View>
291
+ <NumericStepper
292
+ value={passengerCounts[passenger.key]}
293
+ minValue={passenger.minValue}
294
+ maxValue={passenger.maxValue ?? 99}
295
+ onIncrement={() =>
296
+ handlePassengerChange(passenger.key, "increment")
297
+ }
298
+ onDecrement={() =>
299
+ handlePassengerChange(passenger.key, "decrement")
300
+ }
301
+ // Pass through stepper styles
302
+ style={stepperContainerStyle}
303
+ buttonStyle={stepperButtonStyle}
304
+ buttonTextStyle={stepperButtonTextStyle}
305
+ valueTextStyle={stepperValueTextStyle}
306
+ />
307
+ </View>
308
+ ))}
309
+ </View>
310
+
311
+ {/* Flight Class */}
312
+ {renderButtonGroup(
313
+ flightClasses,
314
+ selectedFlightClass,
315
+ handleFlightClassSelect
316
+ )}
317
+ </View>
318
+ );
319
+ };
320
+
321
+ const themedStyles = (theme: ThemeType, isRTL: boolean) =>
322
+ StyleSheet.create({
323
+ container: {
324
+ backgroundColor: theme.surface,
325
+ padding: 16,
326
+ },
327
+ buttonGroupContainer: {
328
+ flexDirection: isRTL ? "row-reverse" : "row",
329
+ // marginBottom: 10,
330
+ marginTop: 5,
331
+ justifyContent: "flex-start",
332
+ flexWrap: "wrap",
333
+ gap: 8,
334
+ },
335
+ button: {
336
+ paddingVertical: 8,
337
+ paddingHorizontal: 16,
338
+ borderRadius: 16,
339
+ borderWidth: 1,
340
+ borderColor: theme.border,
341
+ backgroundColor: theme.surface,
342
+ },
343
+ selectedButton: {
344
+ borderColor: theme.primary,
345
+ backgroundColor: theme.primary,
346
+ },
347
+ buttonText: {
348
+ color: theme.onSurface,
349
+ fontWeight: "500",
350
+ fontSize: 14,
351
+ },
352
+ selectedButtonText: {
353
+ color: theme.onPrimary,
354
+ fontWeight: "bold",
355
+ fontSize: 14,
356
+ },
357
+ passengerSection: {
358
+ marginVertical: 15,
359
+ },
360
+ passengerRow: {
361
+ flexDirection: isRTL ? "row-reverse" : "row",
362
+ justifyContent: "space-between",
363
+ alignItems: "center",
364
+ paddingVertical: 10,
365
+ borderBottomWidth: StyleSheet.hairlineWidth,
366
+ borderBottomColor: theme.divider,
367
+ // Remove width: '100%' unless absolutely necessary
368
+ },
369
+ passengerLabelContainer: {
370
+ flexDirection: "column",
371
+ alignItems: isRTL ? "flex-end" : "flex-start",
372
+ flexShrink: 1,
373
+ marginRight: isRTL ? 0 : 8,
374
+ marginLeft: isRTL ? 8 : 0,
375
+ },
376
+ passengerName: {
377
+ fontSize: 16,
378
+ fontWeight: "bold",
379
+ color: theme.onSurface,
380
+ },
381
+ passengerDescription: {
382
+ fontSize: 12,
383
+ color: theme.secondaryText || theme.onSurface,
384
+ opacity: 0.8,
385
+ },
386
+ });
387
+
388
+ export default FlightSummary;