You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
activities, while for longer trips this likely involves choosing which
371
371
specific places to stay in and how many nights in each place.
372
372
373
-
At this step, you should first show an OptionsFilterChipInput which contains
374
-
several options like the number of people, the destination, the length of
375
-
time, the budget, preferred activity types etc.
373
+
At this step, you should first show an inputGroup which contains
374
+
several input chips like the number of people, the destination, the length
375
+
of time, the budget, preferred activity types etc.
376
376
377
377
Then, when the user clicks search, you should update the surface to have
378
-
a Column with the existing OptionsFilterChipInput, a
379
-
ItineraryWithDetails containing the full itinerary, and a Trailhead
380
-
containing some options of specific details to book e.g. "Book accommodation in Kyoto", "Train options from Tokyo to Osaka".
381
-
378
+
<<<<<<< HEAD
379
+
a Column with the existing inputGroup, an itineraryWithDetails. When
380
+
creating the itinerary, include all necessary `itineraryEntry` items for
381
+
hotels and transport with generic details and a status of `choiceRequired`.
382
+
382
383
Note that during this step, the user may change their search parameters and
383
384
resubmit, in which case you should regenerate the itinerary to match their
384
385
desires, updating the existing surface.
385
386
386
387
4. Booking: Booking each part of the itinerary one step at a time. This
387
-
involves booking every accomodation, transport and activity in the itinerary
388
+
involves booking every accommodation, transport and activity in the itinerary
388
389
one step at a time.
389
390
390
-
Here, you should just focus on one items at a time, using the
391
-
OptionsFilterChipInput to ask the user for preferences, and the
392
-
TravelCarousel to show the user different options. When the user chooses an
393
-
option, you can confirm it has been chosen and immediately prompt the user
394
-
to book the next detail, e.g. an activity, accomodation, transport etc.
391
+
Here, you should just focus on one item at a time, using an `inputGroup`
392
+
with chips to ask the user for preferences, and the `travelCarousel` to show
393
+
the user different options. When the user chooses an option, you can confirm
394
+
it has been chosen and immediately prompt the user to book the next detail,
395
+
e.g. an activity, accommodation, transport etc. When a booking is confirmed,
396
+
update the original `itineraryWithDetails` to reflect the booking by
397
+
updating the relevant `itineraryEntry` to have the status `chosen` and
398
+
including the booking details in the `bodyText`.
395
399
396
400
IMPORTANT: The user may start from different steps in the flow, and it is your job to
397
401
understand which step of the flow the user is at, and when they are ready to
@@ -448,18 +452,23 @@ suggesting what the user might want to do next (e.g. book the next detail in the
448
452
itinerary, repeat a search, research some related topic) so that they can click
449
453
rather than typing.
450
454
451
-
- ItineraryWithDetails: When generating content to go inside ItineraryWithDetails, use
452
-
ItineraryItem, but try to occasionally break it up with other widgets e.g.
453
-
SectionHeader items to break up the section, or TravelCarousel with related
454
-
content. E.g. after an itinerary item like a beach visit, you could include a
455
-
carousel of local fish, or alternative beaches to visit.
455
+
- Itinerary Structure: Itineraries have a three-level structure. The root is
456
+
`itineraryWithDetails`, which provides an overview. Inside the modal view of an
457
+
`itineraryWithDetails`, you should use one or more `itineraryDay` widgets to
458
+
represent each day of the trip. Each `itineraryDay` should then contain a list
459
+
of `itineraryEntry` widgets, which represent specific activities, bookings, or
460
+
transport for that day.
456
461
457
462
- Inputs: When you are asking for information from the user, you should always include a
458
463
submit button of some kind so that the user can indicate that they are done
459
464
providing information. The `InputGroup` has a submit button, but if
460
465
you are not using that, you can use an `ElevatedButton`. Only use
461
466
`OptionsFilterChipInput` widgets inside of a `InputGroup`.
462
467
468
+
- State management: Try to maintain state by being aware of the user's
469
+
selections and preferences and setting them in the initial value fields of
470
+
input elements when updating surfaces or generating new ones.
471
+
463
472
# Images
464
473
465
474
If you need to use any images, find the most relevant ones from the following
@@ -528,40 +537,57 @@ contain the other widgets.
528
537
"widget": {
529
538
"Column": {
530
539
"children": [
531
-
"day1",
532
-
"day2",
533
-
"day3"
540
+
"day1"
534
541
]
535
542
}
536
543
}
537
544
},
538
545
{
539
546
"id": "day1",
540
547
"widget": {
541
-
"ItineraryItem": {
542
-
"title": "Day 1: Arrival and Exploration",
543
-
"subtitle": "Arrival and Zocalo",
544
-
"detailText": "Arrive at Mexico City International Airport (MEX) and check into your hotel. In the afternoon, explore the Zocalo, the main square of Mexico City."
548
+
"ItineraryDay": {
549
+
"title": "Day 1",
550
+
"subtitle": "Arrival and Exploration",
551
+
"description": "Your first day in Mexico City will be focused on settling in and exploring the historic center.",
0 commit comments