Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/ Dupe detection review page #41093

Merged
merged 69 commits into from
Jun 21, 2024
Merged
Changes from 1 commit
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
f16c1e8
wip
kubabutkiewicz Apr 19, 2024
7e90c81
feat: added new routes
kubabutkiewicz Apr 19, 2024
75bdf99
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Apr 19, 2024
4826ba4
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Apr 22, 2024
7a8e5f3
feat: added navigation config for review dupe detection, created init…
kubabutkiewicz Apr 22, 2024
2badafd
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Apr 24, 2024
93c8864
feat: added new pages for duplicate transaction flow, added new endpo…
kubabutkiewicz Apr 25, 2024
48ddf2a
feat: add new entry in onyxkeys and create review duplicates form
kubabutkiewicz Apr 26, 2024
88bd59c
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Apr 26, 2024
4a7bd5b
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz May 6, 2024
cd92dea
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz May 6, 2024
6ca2855
feat: added failure data to DissmisViolation endpoint, save progress …
kubabutkiewicz May 7, 2024
635108b
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz May 9, 2024
6a71395
fix: did some refactor
kubabutkiewicz May 9, 2024
6a9df94
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz May 14, 2024
9a16926
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz May 15, 2024
a5c0d6c
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz May 16, 2024
9173bf2
fix: dismissViolation optimistic data
kubabutkiewicz May 17, 2024
10c1dd0
fix: some fixes
kubabutkiewicz May 17, 2024
eb78187
fix: remove transaction id from money request view
kubabutkiewicz May 17, 2024
e8afcb5
fix
kubabutkiewicz May 17, 2024
04079ae
fix
kubabutkiewicz May 17, 2024
94d82ce
fix: types
kubabutkiewicz May 17, 2024
fe3fca7
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz May 17, 2024
6b0ff1d
fix: lint
kubabutkiewicz May 17, 2024
a16260e
fix: form type
kubabutkiewicz May 17, 2024
d68b2a2
fixes
kubabutkiewicz May 17, 2024
7549ba9
fixes
kubabutkiewicz May 17, 2024
0f7703e
fix: added some small fixes
kubabutkiewicz May 20, 2024
14076e4
fix: resolve review comments
kubabutkiewicz May 20, 2024
88c013e
fix: resolve review comment
kubabutkiewicz May 20, 2024
bbcadfe
fix: resolve review comments
kubabutkiewicz May 21, 2024
9159418
resolve lint problem
kubabutkiewicz May 22, 2024
9a08953
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz May 24, 2024
19ba200
fix: types
kubabutkiewicz May 24, 2024
fb7abdc
feat: add optimistic report action
kubabutkiewicz May 24, 2024
cd366a3
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz May 27, 2024
7d46080
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 3, 2024
146708c
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 5, 2024
b679794
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 7, 2024
5840c37
fix: lint and typecheck
kubabutkiewicz Jun 7, 2024
7ff4c33
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 10, 2024
a9a34ce
fix: resolve comments
kubabutkiewicz Jun 10, 2024
7d80cf5
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 11, 2024
03a5d42
fix: lint
kubabutkiewicz Jun 11, 2024
1d6c762
fix: resolve comments
kubabutkiewicz Jun 11, 2024
4abd84a
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 12, 2024
a4574d0
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 13, 2024
097b51a
fix: resolve comment
kubabutkiewicz Jun 13, 2024
d7022a3
fix: typecheck
kubabutkiewicz Jun 13, 2024
8785917
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 14, 2024
51a2675
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 17, 2024
c989464
fix: disable context menu on long press, changed a message text, add …
kubabutkiewicz Jun 17, 2024
008f67c
fix: create optimistic report action for each of transactions
kubabutkiewicz Jun 18, 2024
f7dc696
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 18, 2024
b68f75f
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 19, 2024
38450ce
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 20, 2024
e2c54bd
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 20, 2024
9233eed
fix: ts issue
kubabutkiewicz Jun 20, 2024
19bd7b0
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 20, 2024
9ba3a88
fix: typecheck
kubabutkiewicz Jun 20, 2024
8a40eae
fix: lint error
kubabutkiewicz Jun 20, 2024
1c829a3
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 21, 2024
b7dd5b9
Merge branch 'main' of github.com:kubabutkiewicz/expensify-app into f…
kubabutkiewicz Jun 21, 2024
596c39a
fix: typecheck
kubabutkiewicz Jun 21, 2024
01c37c1
fix: lint
kubabutkiewicz Jun 21, 2024
47f1375
fix: resolve comment
kubabutkiewicz Jun 21, 2024
8b1550b
fix: lint
kubabutkiewicz Jun 21, 2024
bae8223
fix: resolve comment
kubabutkiewicz Jun 21, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix: resolve comments
  • Loading branch information
kubabutkiewicz committed Jun 10, 2024
commit a9a34ce9e821c4087f4f248c2423def8df06dcf8
Original file line number Diff line number Diff line change
@@ -109,7 +109,7 @@ function MoneyRequestPreviewContent({
const isCardTransaction = TransactionUtils.isCardTransaction(transaction);
const isSettled = ReportUtils.isSettled(iouReport?.reportID);
const isDeleted = action?.pendingAction === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE;
const isReviewDuplicateTransaction = route.name === SCREENS.TRANSACTION_DUPLICATE.REVIEW;
const isReviewDuplicateTransactionPage = route.name === SCREENS.TRANSACTION_DUPLICATE.REVIEW;

const isFullySettled = isSettled && !isSettlementOrApprovalPartial;
const isFullyApproved = ReportUtils.isReportApproved(iouReport) && !isSettlementOrApprovalPartial;
@@ -394,7 +394,7 @@ function MoneyRequestPreviewContent({
]}
>
{childContainer}
{isReviewDuplicateTransaction && (
{isReviewDuplicateTransactionPage && (
<Button
text={translate('violations.keepThisOne')}
success
5 changes: 3 additions & 2 deletions src/pages/TransactionDuplicate/DuplicateTransactionItem.tsx
Original file line number Diff line number Diff line change
@@ -14,7 +14,6 @@ type DuplicateTransactionItemProps = {
function DuplicateTransactionItem(props: DuplicateTransactionItemProps) {
const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${props.transaction?.reportID}`);
const [reportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${report?.reportID}`);
const parentReportAction = ReportActionsUtils.getReportAction(report?.parentReportID ?? '', report?.parentReportActionID ?? '');
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/non-nullable-type-assertion-style
const action = Object.values(reportActions ?? {})?.find(
(reportAction) => reportAction.actionName === 'IOU' && reportAction.originalMessage.IOUTransactionID === props.transaction?.transactionID,
@@ -28,15 +27,17 @@ function DuplicateTransactionItem(props: DuplicateTransactionItemProps) {
<ReportActionItem
action={action}
report={report}
parentReportAction={parentReportAction}
parentReportAction={ReportActionsUtils.getReportAction(report?.parentReportID ?? '', report?.parentReportActionID ?? '')}
index={props.index}
reportActions={Object.values(reportActions ?? {})}
displayAsGroup={false}
shouldDisplayNewMarker={false}
isMostRecentIOUReportAction={false}
isFirstVisibleReportAction={false}
shouldDisplayContextMenu={false}
/>
);
}

DuplicateTransactionItem.displayName = 'DuplicateTransactionItem';
export default DuplicateTransactionItem;
Original file line number Diff line number Diff line change
@@ -33,4 +33,5 @@ function DuplicateTransactionsList({transactions}: DuplicateTransactionsListProp
);
}

DuplicateTransactionsList.displayName = 'DuplicateTransactionsList';
export default DuplicateTransactionsList;
13 changes: 6 additions & 7 deletions src/pages/TransactionDuplicate/Review.tsx
Original file line number Diff line number Diff line change
@@ -25,27 +25,26 @@ function TransactionDuplicateReview() {
const route = useRoute<RouteProp<TransactionDuplicateNavigatorParamList, typeof SCREENS.TRANSACTION_DUPLICATE.REVIEW>>();
const currentPersonalDetails = useCurrentUserPersonalDetails();
const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${route.params.threadReportID}`);
const parentReportAction = ReportActionsUtils.getReportAction(report?.parentReportID ?? '', report?.parentReportActionID ?? '');
const transactionID = parentReportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.IOU ? parentReportAction?.originalMessage.IOUTransactionID ?? '0' : '0';
const reportAction = ReportActionsUtils.getReportAction(report?.parentReportID ?? '-1', report?.parentReportActionID ?? '-1');
const transactionID = ReportActionsUtils.getLinkedTransactionID(reportAction, report?.reportID ?? '-1') ?? '-1';
const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`);
const duplicateTransactionIDs = useMemo(
() => transactionViolations?.find((violation) => violation.name === CONST.VIOLATIONS.DUPLICATED_TRANSACTION)?.data?.duplicates ?? [],
[transactionViolations],
);
const transactionIDs = [transactionID, ...duplicateTransactionIDs];

const transactions = [transactionID, ...duplicateTransactionIDs]
.map((item) => TransactionUtils.getTransaction(item))
.sort((a, b) => new Date(a?.created ?? '').getTime() - new Date(b?.created ?? '').getTime());
const transactions = transactionIDs.map((item) => TransactionUtils.getTransaction(item)).sort((a, b) => new Date(a?.created ?? '').getTime() - new Date(b?.created ?? '').getTime());

const keepAll = () => {
Transaction.dismissDuplicateTransactionViolation([transactionID, ...duplicateTransactionIDs], currentPersonalDetails, route.params.threadReportID);
Transaction.dismissDuplicateTransactionViolation(transactionIDs, currentPersonalDetails, route.params.threadReportID);
Navigation.goBack();
};

return (
<ScreenWrapper testID={TransactionDuplicateReview.displayName}>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should have added a NotFound wrapper as well if the transaction was not found. This later caused #44213

<HeaderWithBackButton title={translate('iou.reviewDuplicates')} />
<View style={[styles.justifyContentCenter, styles.pt3, styles.pl2, styles.pb4, styles.pr2, styles.borderBottom]}>
<View style={[styles.justifyContentCenter, styles.pl4, styles.pb4, styles.pr4, styles.borderBottom]}>
<Button
text={translate('iou.keepAll')}
onPress={keepAll}
34 changes: 20 additions & 14 deletions src/pages/home/report/ReportActionItem.tsx
Original file line number Diff line number Diff line change
@@ -164,6 +164,9 @@ type ReportActionItemProps = {

/** IF the thread divider line will be used */
shouldUseThreadDividerLine?: boolean;

/** Whether context menu should be displayed */
shouldDisplayContextMenu?: boolean;
} & ReportActionItemOnyxProps;

const isIOUReport = (actionObj: OnyxEntry<OnyxTypes.ReportAction>): actionObj is OnyxTypes.ReportActionBase & OnyxTypes.OriginalMessageIOU =>
@@ -191,6 +194,7 @@ function ReportActionItem({
isFirstVisibleReportAction = false,
shouldUseThreadDividerLine = false,
linkedTransactionRouteError,
shouldDisplayContextMenu = true,
}: ReportActionItemProps) {
const {translate} = useLocalize();
const {isSmallScreenWidth} = useWindowDimensions();
@@ -974,20 +978,22 @@ function ReportActionItem({
{(hovered) => (
<View style={highlightedBackgroundColorIfNeeded}>
{shouldDisplayNewMarker && (!shouldUseThreadDividerLine || !isFirstVisibleReportAction) && <UnreadActionIndicator reportActionID={action.reportActionID} />}
<MiniReportActionContextMenu
reportID={report.reportID}
reportActionID={action.reportActionID}
anchor={popoverAnchorRef}
originalReportID={originalReportID ?? ''}
isArchivedRoom={ReportUtils.isArchivedRoom(report)}
displayAsGroup={displayAsGroup}
disabledActions={!ReportUtils.canWriteInReport(report) ? RestrictedReadOnlyContextMenuActions : []}
isVisible={hovered && draftMessage === undefined && !hasErrors}
draftMessage={draftMessage}
isChronosReport={ReportUtils.chatIncludesChronos(originalReport)}
checkIfContextMenuActive={toggleContextMenuFromActiveReportAction}
setIsEmojiPickerActive={setIsEmojiPickerActive}
/>
{shouldDisplayContextMenu && (
<MiniReportActionContextMenu
reportID={report.reportID}
reportActionID={action.reportActionID}
anchor={popoverAnchorRef}
originalReportID={originalReportID ?? ''}
isArchivedRoom={ReportUtils.isArchivedRoom(report)}
displayAsGroup={displayAsGroup}
disabledActions={!ReportUtils.canWriteInReport(report) ? RestrictedReadOnlyContextMenuActions : []}
isVisible={hovered && draftMessage === undefined && !hasErrors}
draftMessage={draftMessage}
isChronosReport={ReportUtils.chatIncludesChronos(originalReport)}
checkIfContextMenuActive={toggleContextMenuFromActiveReportAction}
setIsEmojiPickerActive={setIsEmojiPickerActive}
/>
)}
<View
style={StyleUtils.getReportActionItemStyle(
hovered || isWhisper || isContextMenuActive || !!isEmojiPickerActive || draftMessage !== undefined,
Loading