ordering-ui-react-native 0.9.2 → 0.9.6

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 (37) hide show
  1. package/package.json +1 -1
  2. package/src/DeliveryApp.tsx +2 -1
  3. package/src/components/OrdersOption/test.tsx +410 -0
  4. package/src/components/PreviousOrders/index.tsx +14 -1
  5. package/src/components/ReviewDriver/index.tsx +313 -0
  6. package/src/components/ReviewDriver/styles.tsx +38 -0
  7. package/src/components/ReviewOrder/index.tsx +231 -103
  8. package/src/components/ReviewOrder/styles.tsx +24 -11
  9. package/src/components/ReviewProducts/index.tsx +113 -0
  10. package/src/components/ReviewProducts/styles.tsx +16 -0
  11. package/src/components/SingleProductReview/index.tsx +166 -0
  12. package/src/components/SingleProductReview/styles.tsx +26 -0
  13. package/src/components/shared/OButton.tsx +0 -1
  14. package/src/index.tsx +9 -0
  15. package/src/layouts/FloatingBottomContainer.tsx +26 -0
  16. package/src/navigators/HomeNavigator.tsx +12 -0
  17. package/src/pages/ReviewDriver.tsx +30 -0
  18. package/src/pages/ReviewOrder.tsx +5 -4
  19. package/src/pages/ReviewProducts.tsx +30 -0
  20. package/src/theme.json +2 -1
  21. package/src/types/index.tsx +27 -2
  22. package/themes/business/src/components/Chat/index.tsx +1 -0
  23. package/themes/business/src/components/DriverMap/index.tsx +31 -6
  24. package/themes/business/src/components/OrderDetails/index.tsx +39 -13
  25. package/themes/business/src/components/OrderDetailsDelivery/index.tsx +17 -4
  26. package/themes/business/src/components/OrdersOption/index.tsx +24 -12
  27. package/themes/business/src/components/PreviousOrders/index.tsx +54 -53
  28. package/themes/business/src/components/StoresList/index.tsx +3 -6
  29. package/themes/business/src/components/UserFormDetails/index.tsx +5 -4
  30. package/themes/business/src/components/UserProfileForm/index.tsx +9 -8
  31. package/themes/business/src/hooks/useLocation.tsx +1 -1
  32. package/themes/business/src/types/index.tsx +6 -0
  33. package/themes/doordash/src/components/PreviousOrders/index.tsx +14 -1
  34. package/themes/instacart/src/components/PreviousOrders/index.tsx +14 -1
  35. package/themes/original/src/components/PreviousOrders/index.tsx +4 -0
  36. package/themes/uber-eats/src/components/AddressForm/index.tsx +2 -0
  37. package/themes/uber-eats/src/components/PreviousOrders/index.tsx +14 -1
@@ -27,6 +27,7 @@ import { ProductItemAccordion } from '../ProductItemAccordion';
27
27
  import { USER_TYPE } from '../../config/constants';
28
28
  import { useTheme } from 'styled-components/native';
29
29
  import { verifyDecimals } from '../../utils';
30
+ import { NotFoundSource } from '../NotFoundSource';
30
31
 
31
32
  //Styles
32
33
  import {
@@ -56,13 +57,16 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
56
57
  askLocationPermission,
57
58
  driverLocation,
58
59
  actions,
60
+ updateDriverPosition,
61
+ driverUpdateLocation,
62
+ setDriverUpdateLocation,
59
63
  titleAccept,
60
64
  titleReject,
61
65
  appTitle,
62
66
  } = props;
63
67
 
64
68
  const [, { showToast }] = useToast();
65
- const { order, loading } = props.order;
69
+ const { order, loading, error } = props.order;
66
70
  const theme = useTheme();
67
71
  const [, t] = useLanguage();
68
72
  const [{ parsePrice, parseNumber, parseDate }] = useUtils();
@@ -444,7 +448,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
444
448
 
445
449
  return (
446
450
  <>
447
- {(!order || Object.keys(order).length === 0) && (
451
+ {(!order || Object.keys(order).length === 0) && !error && (
448
452
  <View
449
453
  style={{
450
454
  padding: 20,
@@ -464,7 +468,14 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
464
468
  ))}
465
469
  </View>
466
470
  )}
467
- {order && Object.keys(order).length > 0 && (
471
+ {error?.length > 0 && (
472
+ <NotFoundSource
473
+ btnTitle={t('GO_TO_MY_ORDERS', 'Go to my orders')}
474
+ content={props.order.error[0]}
475
+ onClickButton={() => navigation.navigate('Orders')}
476
+ />
477
+ )}
478
+ {order && Object.keys(order).length > 0 && !error && (
468
479
  <>
469
480
  <Header>
470
481
  <OIconButton
@@ -760,6 +771,9 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
760
771
  orderStatus={getOrderStatus(order?.status)?.value || ''}
761
772
  location={locationMarker}
762
773
  readOnly
774
+ updateDriverPosition={updateDriverPosition}
775
+ driverUpdateLocation={driverUpdateLocation}
776
+ setDriverUpdateLocation={setDriverUpdateLocation}
763
777
  handleViewActionOrder={handleViewActionOrder}
764
778
  isBusinessMarker={isBusinessMarker}
765
779
  isToFollow={isToFollow}
@@ -828,7 +842,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
828
842
  export const OrderDetailsDelivery = (props: OrderDetailsParams) => {
829
843
  const orderDetailsProps = {
830
844
  ...props,
831
- driverAndBusinessId: true,
832
845
  UIComponent: OrderDetailsUI,
833
846
  };
834
847
  return <OrderDetailsConTableoller {...orderDetailsProps} />;
@@ -9,7 +9,7 @@ import {
9
9
  import { OrderList, useLanguage } from 'ordering-components/native';
10
10
  import { useTheme } from 'styled-components/native';
11
11
  import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
12
- import { OText, OIconButton, OButton } from '../shared';
12
+ import { OText, OButton } from '../shared';
13
13
  import { PreviousOrders } from '../PreviousOrders';
14
14
  import { NotFoundSource } from '../NotFoundSource';
15
15
  import { FiltersTab, TabsContainer, Tag } from './styles';
@@ -134,6 +134,9 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
134
134
  const scrollRefTab = useRef() as React.MutableRefObject<ScrollView>;
135
135
 
136
136
  const [ordersFilter, setOrdersFilter] = useState(tabs[0].tags);
137
+ const [ordersFiltered, setOrdersFiltered] = useState(
138
+ orders.filter((order: any) => ordersFilter.includes(order?.status)),
139
+ );
137
140
  const [tabsStatus, setTabStatus] = useState(tabs[0].tags);
138
141
  const [tagsStatus, setTagsStatus] = useState(tabs[0].tags);
139
142
  const [isLoadedOrders, setIsLoadedOrders] = useState<any>({
@@ -153,6 +156,14 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
153
156
  parseInt(parseFloat(String(Dimensions.get('window').width)).toFixed(0)),
154
157
  );
155
158
 
159
+ useEffect(() => {
160
+ setOrdersFiltered(
161
+ orders.filter((order: any) =>
162
+ rememberOrderStatus.includes(order?.status),
163
+ ),
164
+ );
165
+ }, [ordersFilter, orders, rememberOrderStatus]);
166
+
156
167
  const handleChangeTab = (tags: number[], tabTitle: string) => {
157
168
  if (!isLoadedOrders[tabTitle].isFetched) {
158
169
  loadOrders && loadOrders(true, tags);
@@ -184,13 +195,11 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
184
195
 
185
196
  const handleChangeTag = (key: number) => {
186
197
  const updateTags: number[] = [];
187
- if (ordersFilter.includes(key)) {
188
- updateTags.push(...ordersFilter.filter(tag => tag !== key));
198
+ if (rememberOrderStatus.includes(key)) {
199
+ updateTags.push(...rememberOrderStatus.filter((tag: any) => tag !== key));
189
200
  } else {
190
- updateTags.push(...ordersFilter.concat(key));
201
+ updateTags.push(...rememberOrderStatus.concat(key));
191
202
  }
192
-
193
- setOrdersFilter(updateTags);
194
203
  setRememberOrderStatus(updateTags);
195
204
  };
196
205
 
@@ -355,14 +364,14 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
355
364
  key={key}
356
365
  onPress={() => handleChangeTag(key)}
357
366
  isSelected={
358
- ordersFilter.includes(key)
367
+ rememberOrderStatus.includes(key)
359
368
  ? theme.colors.primary
360
369
  : theme.colors.tabBar
361
370
  }>
362
371
  <OText
363
372
  style={styles.tag}
364
373
  color={
365
- ordersFilter.includes(key)
374
+ rememberOrderStatus.includes(key)
366
375
  ? theme.colors.white
367
376
  : theme.colors.black
368
377
  }>
@@ -375,8 +384,10 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
375
384
 
376
385
  {!loading &&
377
386
  (!ordersFilter.length ||
387
+ ordersFiltered?.length < 1 ||
378
388
  orderList.error ||
379
- !orderList.orders.length) && (
389
+ !orderList.orders.length ||
390
+ !rememberOrderStatus.length) && (
380
391
  <NotFoundSource
381
392
  content={
382
393
  !orderList.error
@@ -393,10 +404,10 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
393
404
  <ScrollView showsVerticalScrollIndicator={false} style={{ flex: 1 }}>
394
405
  {!reload && !error && orders.length > 0 && (
395
406
  <PreviousOrders
396
- orders={orders}
407
+ orders={ordersFiltered}
397
408
  onNavigationRedirect={onNavigationRedirect}
398
409
  getOrderStatus={getOrderStatus}
399
- tabsFilter={ordersFilter}
410
+ tabsFilter={rememberOrderStatus}
400
411
  />
401
412
  )}
402
413
 
@@ -438,7 +449,8 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
438
449
  !loading &&
439
450
  !!orders.length &&
440
451
  pagination.currentPage < pagination.totalPages &&
441
- isLoadedOrders[currentTab].hasMorePagination && (
452
+ isLoadedOrders[currentTab].hasMorePagination &&
453
+ rememberOrderStatus.length > 0 && (
442
454
  <OButton
443
455
  onClick={handleLoadMore}
444
456
  text={t('LOAD_MORE_ORDERS', 'Load more orders')}
@@ -7,7 +7,7 @@ import { Card, Logo, Information, MyOrderOptions } from './styles';
7
7
  import { PreviousOrdersParams } from '../../types';
8
8
 
9
9
  export const PreviousOrders = (props: any) => {
10
- const { orders, onNavigationRedirect, getOrderStatus, tabsFilter } = props;
10
+ const { orders, onNavigationRedirect, getOrderStatus } = props;
11
11
  const [, t] = useLanguage();
12
12
  const [{ parseDate, optimizeImage }] = useUtils();
13
13
  const theme = useTheme();
@@ -71,65 +71,66 @@ export const PreviousOrders = (props: any) => {
71
71
  ?.filter((order: any) =>
72
72
  hash[order?.id] ? false : (hash[order?.id] = true),
73
73
  )
74
- .map((order: any) => (
74
+ ?.sort((a: any, b: any) => {
75
+ return b.id - a.id;
76
+ })
77
+ ?.map((order: any) => (
75
78
  <React.Fragment key={order.id}>
76
- {tabsFilter.includes(order.status) && (
77
- <TouchableOpacity
78
- onPress={() => handlePressOrder(order)}
79
- style={styles.cardButton}
80
- activeOpacity={1}>
81
- <Card key={order.id}>
82
- {!!order.business?.logo && (
83
- <Logo style={styles.logo}>
84
- <OIcon
85
- url={optimizeImage(
86
- order.business?.logo,
87
- 'h_300,c_limit',
88
- )}
89
- style={styles.icon}
90
- />
91
- </Logo>
92
- )}
79
+ <TouchableOpacity
80
+ onPress={() => handlePressOrder(order)}
81
+ style={styles.cardButton}
82
+ activeOpacity={1}>
83
+ <Card key={order.id}>
84
+ {!!order.business?.logo && (
85
+ <Logo style={styles.logo}>
86
+ <OIcon
87
+ url={optimizeImage(
88
+ order.business?.logo,
89
+ 'h_300,c_limit',
90
+ )}
91
+ style={styles.icon}
92
+ />
93
+ </Logo>
94
+ )}
93
95
 
94
- <Information>
95
- <OText numberOfLines={1} style={styles.title}>
96
- {order.business?.name}
97
- </OText>
96
+ <Information>
97
+ <OText numberOfLines={1} style={styles.title}>
98
+ {order.business?.name}
99
+ </OText>
100
+
101
+ <OText
102
+ style={styles.date}
103
+ numberOfLines={1}
104
+ adjustsFontSizeToFit
105
+ size={20}>
106
+ {t('INVOICE_ORDER_NO', 'Order No.') + order.id + ' · '}
107
+ {order?.delivery_datetime_utc
108
+ ? parseDate(order?.delivery_datetime_utc)
109
+ : parseDate(order?.delivery_datetime, { utc: false })}
110
+ </OText>
98
111
 
112
+ <MyOrderOptions>
99
113
  <OText
100
- style={styles.date}
114
+ style={styles.orderType}
115
+ mRight={5}
101
116
  numberOfLines={1}
102
117
  adjustsFontSizeToFit
103
- size={20}>
104
- {t('INVOICE_ORDER_NO', 'Order No.') + order.id + ' · '}
105
- {order?.delivery_datetime_utc
106
- ? parseDate(order?.delivery_datetime_utc)
107
- : parseDate(order?.delivery_datetime, { utc: false })}
118
+ size={18}>
119
+ {order.delivery_type === 1
120
+ ? t('DELIVERY', 'Delivery')
121
+ : order.delivery_type === 2
122
+ ? t('PICKUP', 'Pickup')
123
+ : order.delivery_type === 3
124
+ ? t('EAT_IN', 'Eat in')
125
+ : order.delivery_type === 4
126
+ ? t('CURBSIDE', 'Curbside')
127
+ : t('DRIVER_THRU', 'Driver thru')}
128
+ {` · ${getOrderStatus(order.status)}`}
108
129
  </OText>
109
-
110
- <MyOrderOptions>
111
- <OText
112
- style={styles.orderType}
113
- mRight={5}
114
- numberOfLines={1}
115
- adjustsFontSizeToFit
116
- size={18}>
117
- {order.delivery_type === 1
118
- ? t('DELIVERY', 'Delivery')
119
- : order.delivery_type === 2
120
- ? t('PICKUP', 'Pickup')
121
- : order.delivery_type === 3
122
- ? t('EAT_IN', 'Eat in')
123
- : order.delivery_type === 4
124
- ? t('CURBSIDE', 'Curbside')
125
- : t('DRIVER_THRU', 'Driver thru')}
126
- {` · ${getOrderStatus(order.status)}`}
127
- </OText>
128
- </MyOrderOptions>
129
- </Information>
130
- </Card>
131
- </TouchableOpacity>
132
- )}
130
+ </MyOrderOptions>
131
+ </Information>
132
+ </Card>
133
+ </TouchableOpacity>
133
134
  </React.Fragment>
134
135
  ))}
135
136
  </>
@@ -30,12 +30,10 @@ const StoresListUI = (props: BusinessesListingParams) => {
30
30
  } = props;
31
31
 
32
32
  const { loading, error, businesses } = businessesList;
33
- const [loadingConnected, setLoadingConnected] = useState(true);
34
33
  const [isConnected, setIsConnected] = useState<boolean | null>(false);
35
34
 
36
- NetInfo.fetch().then(state => {
35
+ NetInfo.fetch().then((state: any) => {
37
36
  setIsConnected(state.isConnected);
38
- setLoadingConnected(false);
39
37
  });
40
38
 
41
39
  const [, t] = useLanguage();
@@ -144,9 +142,8 @@ const StoresListUI = (props: BusinessesListingParams) => {
144
142
  <ScrollView
145
143
  showsVerticalScrollIndicator={false}
146
144
  style={styles.container}
147
- onScroll={(e: any) => handleScroll(e)}
148
- >
149
- {!loadBusinesses && (businesses?.length === 0 || !isConnected) && (
145
+ onScroll={(e: any) => handleScroll(e)}>
146
+ {!loadBusinesses && businesses?.length === 0 && (
150
147
  <NotFoundSource
151
148
  content={
152
149
  !isConnected
@@ -45,6 +45,7 @@ export const UserFormDetailsUI = (props: any) => {
45
45
 
46
46
  const [{ user }] = useSession();
47
47
  const [passwordSee, setPasswordSee] = useState(false);
48
+ const [confirmSee, setConfirmSee] = useState(false);
48
49
  const [userPhoneNumber, setUserPhoneNumber] = useState<any>(null);
49
50
  const [phoneInputData, setPhoneInputData] = useState({
50
51
  error: '',
@@ -388,7 +389,7 @@ export const UserFormDetailsUI = (props: any) => {
388
389
  control={control}
389
390
  render={({ onChange, value }: any) => (
390
391
  <OInput
391
- isSecured={!passwordSee ? true : false}
392
+ isSecured={!confirmSee ? true : false}
392
393
  placeholder={t(
393
394
  'MOBILE_CONFIRM_PASSWORD',
394
395
  'Confirm Password',
@@ -396,19 +397,19 @@ export const UserFormDetailsUI = (props: any) => {
396
397
  style={styles.inputStyle}
397
398
  placeholderTextColor={theme.colors.arrowColor}
398
399
  iconCustomRight={
399
- passwordSee ? (
400
+ confirmSee ? (
400
401
  <MaterialCommunityIcons
401
402
  name="eye-outline"
402
403
  color={theme.colors.arrowColor}
403
404
  size={24}
404
- onPress={() => setPasswordSee(!passwordSee)}
405
+ onPress={() => setConfirmSee(!confirmSee)}
405
406
  />
406
407
  ) : (
407
408
  <MaterialCommunityIcons
408
409
  name="eye-off-outline"
409
410
  color={theme.colors.arrowColor}
410
411
  size={24}
411
- onPress={() => setPasswordSee(!passwordSee)}
412
+ onPress={() => setConfirmSee(!confirmSee)}
412
413
  />
413
414
  )
414
415
  }
@@ -104,20 +104,21 @@ const ProfileUI = (props: ProfileParams) => {
104
104
  };
105
105
 
106
106
  useEffect(() => {
107
- if (userState.result.result && !isAvailableLoading) {
107
+ const isLoadingDriver = userState?.loadingDriver ?? true;
108
+
109
+ if (userState?.result?.result && !isLoadingDriver) {
108
110
  if (userState?.result?.error) {
109
- showToast(
110
- ToastType.Error,
111
- t(userState.result.error, userState.result.error),
112
- );
111
+ const messageError =
112
+ userState.result.error || userState.result.error[0];
113
+ showToast(ToastType.Error, t(messageError, messageError));
113
114
  } else {
114
115
  showToast(
115
116
  ToastType.Success,
116
- t('UPDATE_SUCCESSFULLY', 'Update successfully'),
117
+ t('AVAILABLE_STATE_IS_UPDATED', 'Available state is updated'),
117
118
  );
118
119
  }
119
120
  }
120
- }, [isAvailableLoading]);
121
+ }, [userState?.loadingDriver]);
121
122
 
122
123
  useEffect(() => {
123
124
  if (formState.result.result && !formState.loading) {
@@ -301,7 +302,7 @@ const ProfileUI = (props: ProfileParams) => {
301
302
  )}
302
303
  </OText>
303
304
 
304
- {isAvailableLoading ? (
305
+ {userState.loadingDriver ? (
305
306
  <ActivityIndicator size="small" color={theme.colors.primary} />
306
307
  ) : (
307
308
  <ToggleSwitch
@@ -67,7 +67,7 @@ export const useLocation = () => {
67
67
  setRoutesLines(routes => [...routes, location]);
68
68
  },
69
69
  err => console.log(err),
70
- { enableHighAccuracy: true, distanceFilter: 1 },
70
+ { enableHighAccuracy: true, distanceFilter: 3 },
71
71
  );
72
72
  };
73
73
 
@@ -349,6 +349,9 @@ export interface OrderDetailsParams {
349
349
  permissions?: any;
350
350
  askLocationPermission?: any;
351
351
  redirectToSettings?: any;
352
+ updateDriverPosition?: any;
353
+ driverUpdateLocation?: any;
354
+ setDriverUpdateLocation?: any;
352
355
  }
353
356
  export interface ProductItemAccordionParams {
354
357
  isCartPending?: boolean;
@@ -488,6 +491,9 @@ export interface GoogleMapsParams {
488
491
  setSaveLocation?: (val: boolean) => void;
489
492
  handleToggleMap?: () => void;
490
493
  navigation: any;
494
+ updateDriverPosition?: any;
495
+ driverUpdateLocation?: any;
496
+ setDriverUpdateLocation: any;
491
497
  }
492
498
 
493
499
  export interface TagsParams {
@@ -60,7 +60,20 @@ export const PreviousOrders = (props: PreviousOrdersParams) => {
60
60
  }
61
61
 
62
62
  const handleClickOrderReview = (order: any) => {
63
- onNavigationRedirect && onNavigationRedirect('ReviewOrder', { order: { id: order?.id, business_id: order?.business_id, logo: order.business?.logo } })
63
+ onNavigationRedirect && onNavigationRedirect(
64
+ 'ReviewOrder',
65
+ {
66
+ order: {
67
+ id: order?.id,
68
+ business_id: order?.business_id,
69
+ logo: order.business?.logo,
70
+ driver: order?.driver,
71
+ products: order?.products,
72
+ review: order?.review,
73
+ user_review: order?.user_review
74
+ }
75
+ }
76
+ )
64
77
  }
65
78
 
66
79
  const handleReorderClick = (id: number) => {
@@ -56,7 +56,20 @@ export const PreviousOrders = (props: PreviousOrdersParams) => {
56
56
  }
57
57
 
58
58
  const handleClickOrderReview = (order: any) => {
59
- onNavigationRedirect && onNavigationRedirect('ReviewOrder', { order: { id: order?.id, business_id: order?.business_id, logo: order.business?.logo } })
59
+ onNavigationRedirect && onNavigationRedirect(
60
+ 'ReviewOrder',
61
+ {
62
+ order: {
63
+ id: order?.id,
64
+ business_id: order?.business_id,
65
+ logo: order.business?.logo,
66
+ driver: order?.driver,
67
+ products: order?.products,
68
+ review: order?.review,
69
+ user_review: order?.user_review
70
+ }
71
+ }
72
+ )
60
73
  }
61
74
 
62
75
  const handleReorderClick = (id: number) => {
@@ -86,6 +86,10 @@ export const PreviousOrders = (props: PreviousOrdersParams) => {
86
86
  id: order?.id,
87
87
  business_id: order?.business_id,
88
88
  logo: order.business?.logo,
89
+ driver: order?.driver,
90
+ products: order?.products,
91
+ review: order?.review,
92
+ user_review: order?.user_review
89
93
  },
90
94
  });
91
95
  };
@@ -87,6 +87,8 @@ const AddressFormUI = (props: AddressFormParams) => {
87
87
  flexDirection: 'row',
88
88
  justifyContent: 'space-between',
89
89
  marginBottom: 20,
90
+ height: 70,
91
+ maxHeight: 70
90
92
  },
91
93
  textAreaStyles: {
92
94
  borderRadius: 0,
@@ -56,7 +56,20 @@ export const PreviousOrders = (props: PreviousOrdersParams) => {
56
56
  }
57
57
 
58
58
  const handleClickOrderReview = (order: any) => {
59
- onNavigationRedirect && onNavigationRedirect('ReviewOrder', { order: { id: order?.id, business_id: order?.business_id, logo: order.business?.logo } })
59
+ onNavigationRedirect && onNavigationRedirect(
60
+ 'ReviewOrder',
61
+ {
62
+ order: {
63
+ id: order?.id,
64
+ business_id: order?.business_id,
65
+ logo: order.business?.logo,
66
+ driver: order?.driver,
67
+ products: order?.products,
68
+ review: order?.review,
69
+ user_review: order?.user_review
70
+ }
71
+ }
72
+ )
60
73
  }
61
74
 
62
75
  const handleReorderClick = (id : number) => {