@riosst100/pwa-marketplace 2.9.5 → 2.9.7
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.
- package/package.json +1 -1
- package/src/componentOverrideMapping.js +5 -1
- package/src/components/LiveChat/chatContent.js +28 -13
- package/src/components/OrderDetail/components/rmaList.js +80 -88
- package/src/components/OrderDetail/orderDetail.js +142 -39
- package/src/components/RMAPage/RMACreate.js +295 -115
- package/src/components/RMAPage/RMADetail.js +243 -154
- package/src/components/RMAPage/RMAList.js +38 -57
- package/src/components/RMAPage/components/productItem.js +76 -26
- package/src/components/RMAPage/orderRow.js +120 -254
- package/src/components/commons/Select/index.js +6 -2
- package/src/overwrites/peregrine/lib/talons/CheckoutPage/PaymentInformation/paymentMethods.gql.js +45 -0
- package/src/overwrites/peregrine/lib/talons/OrderHistoryPage/orderHistoryPage.gql.js +1 -0
- package/src/overwrites/peregrine/lib/talons/OrderHistoryPage/orderRow.gql.js +46 -0
- package/src/overwrites/peregrine/lib/talons/OrderHistoryPage/useOrderRow.js +112 -0
- package/src/overwrites/peregrine/lib/talons/RMAPage/rmaPage.gql.js +202 -0
- package/src/overwrites/venia-ui/lib/components/OrderHistoryPage/orderRow.js +111 -46
- package/src/talons/RMAPage/useRmaPage.js +179 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import { useQuery, useMutation } from '@apollo/client';
|
|
3
|
+
|
|
4
|
+
import { useAppContext } from '@magento/peregrine/lib/context/app';
|
|
5
|
+
import { deriveErrorMessage } from '@magento/peregrine/lib/util/deriveErrorMessage';
|
|
6
|
+
import { usePagination } from '@magento/peregrine/lib/hooks/usePagination';
|
|
7
|
+
|
|
8
|
+
import operations from '@riosst100/pwa-marketplace/src/overwrites/peregrine/lib/talons/RMAPage/rmaPage.gql';
|
|
9
|
+
|
|
10
|
+
const PAGE_SIZE = 5;
|
|
11
|
+
|
|
12
|
+
// Custom RMA Page talon with page-based pagination
|
|
13
|
+
export const useRmaPage = (props = {}) => {
|
|
14
|
+
const { rmaId, orderNumber } = props;
|
|
15
|
+
const { getLofmpRmasQuery, getLofmpRmaDetailQuery, lofmpCreateRmaMutation, lofmpRmaShippingConfirmMutation, lofmpSendRmaMessageMutation } = operations;
|
|
16
|
+
|
|
17
|
+
// Mutation for sending RMA message
|
|
18
|
+
const [sendRmaMessageMutation, { data: sendRmaMessageData, error: sendRmaMessageError, loading: sendRmaMessageLoading }] = useMutation(lofmpSendRmaMessageMutation);
|
|
19
|
+
|
|
20
|
+
// Handler for sending RMA message
|
|
21
|
+
const sendRmaMessage = useCallback(async (input) => {
|
|
22
|
+
try {
|
|
23
|
+
const { data } = await sendRmaMessageMutation({ variables: { input } });
|
|
24
|
+
return { data, error: null };
|
|
25
|
+
} catch (error) {
|
|
26
|
+
return { data: null, error };
|
|
27
|
+
}
|
|
28
|
+
}, [sendRmaMessageMutation]);
|
|
29
|
+
|
|
30
|
+
// Mutation for creating RMA
|
|
31
|
+
const [createRmaMutation, { data: createRmaData, error: createRmaError, loading: createRmaLoading }] = useMutation(lofmpCreateRmaMutation);
|
|
32
|
+
|
|
33
|
+
// Mutation for confirming shipping
|
|
34
|
+
const [confirmShippingMutation, { data: confirmShippingData, error: confirmShippingError, loading: confirmShippingLoading }] = useMutation(lofmpRmaShippingConfirmMutation);
|
|
35
|
+
|
|
36
|
+
// Handler for creating RMA
|
|
37
|
+
const createRma = useCallback(async (input) => {
|
|
38
|
+
try {
|
|
39
|
+
const { data } = await createRmaMutation({ variables: { input } });
|
|
40
|
+
return { data, error: null };
|
|
41
|
+
} catch (error) {
|
|
42
|
+
return { data: null, error };
|
|
43
|
+
}
|
|
44
|
+
}, [createRmaMutation]);
|
|
45
|
+
|
|
46
|
+
// Handler for confirming shipping
|
|
47
|
+
const confirmShipping = useCallback(async (rma_id) => {
|
|
48
|
+
try {
|
|
49
|
+
const { data } = await confirmShippingMutation({ variables: { rma_id } });
|
|
50
|
+
return { data, error: null };
|
|
51
|
+
} catch (error) {
|
|
52
|
+
return { data: null, error };
|
|
53
|
+
}
|
|
54
|
+
}, [confirmShippingMutation]);
|
|
55
|
+
|
|
56
|
+
const [
|
|
57
|
+
,
|
|
58
|
+
{
|
|
59
|
+
actions: { setPageLoading }
|
|
60
|
+
}
|
|
61
|
+
] = useAppContext();
|
|
62
|
+
|
|
63
|
+
const [pageSize] = useState(PAGE_SIZE);
|
|
64
|
+
const [searchText, setSearchText] = useState('');
|
|
65
|
+
|
|
66
|
+
// Pagination state
|
|
67
|
+
const [paginationValues, paginationApi] = usePagination();
|
|
68
|
+
const { currentPage = 1, totalPages } = paginationValues;
|
|
69
|
+
const { setCurrentPage, setTotalPages } = paginationApi;
|
|
70
|
+
|
|
71
|
+
// List query (skipped when viewing detail)
|
|
72
|
+
const { data, error, loading } = useQuery(getLofmpRmasQuery, {
|
|
73
|
+
fetchPolicy: 'cache-and-network',
|
|
74
|
+
variables: {
|
|
75
|
+
filter: orderNumber
|
|
76
|
+
? { order_number: orderNumber }
|
|
77
|
+
: (searchText ? { order_number: searchText } : undefined),
|
|
78
|
+
pageSize,
|
|
79
|
+
currentPage
|
|
80
|
+
},
|
|
81
|
+
skip: !!rmaId
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// Detail query (only when rmaId provided)
|
|
85
|
+
const {
|
|
86
|
+
data: rmaDetailData,
|
|
87
|
+
error: rmaDetailError,
|
|
88
|
+
loading: rmaDetailLoading,
|
|
89
|
+
refetch: refetchRmaDetail
|
|
90
|
+
} = useQuery(getLofmpRmaDetailQuery, {
|
|
91
|
+
fetchPolicy: 'cache-and-network',
|
|
92
|
+
variables: { rmaId },
|
|
93
|
+
skip: !rmaId,
|
|
94
|
+
pollInterval: 3000 // 1 detik auto-refresh
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
const rmasData = data && data.lofmpRmas ? data.lofmpRmas : undefined;
|
|
98
|
+
const rmas = rmasData && rmasData.items ? rmasData.items : [];
|
|
99
|
+
const totalCount = rmasData && typeof rmasData.total_count !== 'undefined' && rmasData.total_count !== null
|
|
100
|
+
? rmasData.total_count
|
|
101
|
+
: 0;
|
|
102
|
+
// Use page_info.total_pages if available, fallback to manual calculation
|
|
103
|
+
const totalPagesFromData = rmasData && rmasData.page_info && typeof rmasData.page_info.total_pages !== 'undefined'
|
|
104
|
+
? rmasData.page_info.total_pages
|
|
105
|
+
: (totalCount ? Math.ceil(totalCount / pageSize) : null);
|
|
106
|
+
|
|
107
|
+
// Keep pagination total pages in sync with query result
|
|
108
|
+
useEffect(() => {
|
|
109
|
+
setTotalPages(totalPagesFromData);
|
|
110
|
+
return () => setTotalPages(null);
|
|
111
|
+
}, [setTotalPages, totalPagesFromData]);
|
|
112
|
+
|
|
113
|
+
const isLoadingWithoutData = rmaId ? (!rmaDetailData && rmaDetailLoading) : (!data && loading);
|
|
114
|
+
const isBackgroundLoading = rmaId ? (!!rmaDetailData && rmaDetailLoading) : (!!data && loading);
|
|
115
|
+
|
|
116
|
+
const pageInfo = useMemo(() => {
|
|
117
|
+
if (!rmaId && data) {
|
|
118
|
+
const currentShown = Math.min(currentPage * pageSize, totalCount);
|
|
119
|
+
return { current: currentShown, total: totalCount };
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}, [rmaId, data, currentPage, pageSize, totalCount]);
|
|
123
|
+
|
|
124
|
+
const derivedErrorMessage = useMemo(
|
|
125
|
+
() => deriveErrorMessage([rmaId ? rmaDetailError : error]),
|
|
126
|
+
[rmaId, rmaDetailError, error]
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
const handleReset = useCallback(() => {
|
|
130
|
+
setSearchText('');
|
|
131
|
+
setCurrentPage(1);
|
|
132
|
+
}, [setCurrentPage]);
|
|
133
|
+
|
|
134
|
+
const handleSubmit = useCallback(
|
|
135
|
+
({ search }) => {
|
|
136
|
+
setSearchText(search);
|
|
137
|
+
setCurrentPage(1);
|
|
138
|
+
},
|
|
139
|
+
[setCurrentPage]
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
// Update the page indicator if the GraphQL query is in flight.
|
|
143
|
+
useEffect(() => {
|
|
144
|
+
setPageLoading(isBackgroundLoading);
|
|
145
|
+
}, [isBackgroundLoading, setPageLoading]);
|
|
146
|
+
|
|
147
|
+
const pageControl = useMemo(
|
|
148
|
+
() => ({ currentPage, setPage: setCurrentPage, totalPages }),
|
|
149
|
+
[currentPage, setCurrentPage, totalPages]
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
return {
|
|
153
|
+
errorMessage: derivedErrorMessage,
|
|
154
|
+
handleReset,
|
|
155
|
+
handleSubmit,
|
|
156
|
+
isBackgroundLoading,
|
|
157
|
+
isLoadingWithoutData,
|
|
158
|
+
loadMoreRmas: null,
|
|
159
|
+
rmas,
|
|
160
|
+
pageInfo,
|
|
161
|
+
searchText,
|
|
162
|
+
pageControl,
|
|
163
|
+
createRma,
|
|
164
|
+
createRmaLoading,
|
|
165
|
+
createRmaError,
|
|
166
|
+
createRmaData,
|
|
167
|
+
confirmShipping,
|
|
168
|
+
confirmShippingLoading,
|
|
169
|
+
confirmShippingError,
|
|
170
|
+
confirmShippingData,
|
|
171
|
+
rmaDetail: rmaDetailData ? rmaDetailData.lofmpRmaDetail : undefined,
|
|
172
|
+
rmaDetailLoading,
|
|
173
|
+
rmaDetailError,
|
|
174
|
+
refetchRmaDetail
|
|
175
|
+
,sendRmaMessage, sendRmaMessageData, sendRmaMessageError, sendRmaMessageLoading
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
export default useRmaPage;
|