-
Notifications
You must be signed in to change notification settings - Fork 15
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
fix: remove model PersonalCardTxnExpenseSuggestion #3399
fix: remove model PersonalCardTxnExpenseSuggestion #3399
Conversation
WalkthroughIn a spectacular transformation, the codebase undergoes a massive refactoring of personal card transaction expense suggestions. The changes eliminate the Changes
Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (11)
src/app/core/mock-data/personal-card-txn-expense-suggestions.data.ts
(5 hunks)src/app/core/models/personal-card-txn-expense-suggestion.model.ts
(0 hunks)src/app/core/services/personal-cards.service.spec.ts
(1 hunks)src/app/core/services/personal-cards.service.ts
(1 hunks)src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.spec.ts
(2 hunks)src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.ts
(2 hunks)src/app/fyle/personal-cards/personal-cards.page.spec.ts
(3 hunks)src/app/fyle/personal-cards/personal-cards.page.ts
(1 hunks)src/app/shared/components/expense-card-lite/expense-card-lite.component.html
(1 hunks)src/app/shared/components/expense-card-lite/expense-card-lite.component.spec.ts
(3 hunks)src/app/shared/components/expense-card-lite/expense-card-lite.component.ts
(1 hunks)
💤 Files with no reviewable changes (1)
- src/app/core/models/personal-card-txn-expense-suggestion.model.ts
🧰 Additional context used
📓 Learnings (1)
src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.ts (1)
Learnt from: sumrender
PR: fylein/fyle-mobile-app#3265
File: src/app/fyle/personal-cards-matched-expenses/expense-preview/expense-preview.component.spec.ts:35-37
Timestamp: 2024-11-18T06:55:17.972Z
Learning: In `src/app/fyle/add-edit-expense/add-edit-expense.page.ts`, the `unmatchExpense` method is used for corporate card expenses, not for personal card expenses.
🪛 GitHub Actions: Unit Tests
src/app/core/services/personal-cards.service.spec.ts
[error] 34-34: No exported member named 'publicPersonalCardTxnExpenseSuggestionsRes'. Did you mean 'platformPersonalCardTxnExpenseSuggestionsRes'?
🔇 Additional comments (29)
src/app/core/services/personal-cards.service.ts (1)
197-205
: Aiyyo, direct and mighty transformation!Thalaiva, removing the old interface is as good as removing any useless sidekicks. Just make sure there’s no leftover reference expecting the previous type. Double-check all call sites to avoid runtime surprises.
src/app/shared/components/expense-card-lite/expense-card-lite.component.ts (2)
10-10
: Magizchi, strict typing is here!Superstar move to lock down the input as
Expense
. That ensures everyone knows exactly what's coming in, no confusion whatsoever!
19-19
: Simplicity, the unstoppable style!Checking
file_ids?.length > 0
is short and sweet, like a power-packed punch — love it!src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.ts (3)
8-8
: Aiyyo, we welcome new imports!Including
Expense
from a dedicated model helps keep everything consistent. Great job!
21-21
: Expense suggestions go pure Expense!You’ve replaced
PersonalCardTxnExpenseSuggestion[]
withExpense[]
, clearing the stage for consistent usage. Rock on!
29-29
: Ensuring consistent router data casting!Now that we’re reading them as
Expense[]
, confirm all downstream usage is adapted. Let’s do a quick scan, Superstar.src/app/shared/components/expense-card-lite/expense-card-lite.component.spec.ts (6)
8-8
: No confusion, la!Importing
platformExpenseWithExtractedData
is a straightforward approach to test with a known data object. Looks neat.
12-12
: One more import for the show!Bringing in
platformPersonalCardTxnExpenseSuggestionsRes
for even richer test coverage is the sign of thoroughness.
23-23
: Providers streamlined with style!Injecting only the needed pipes is a minimalistic approach. Good practice to keep the test module lean!
34-35
: Initial setup, Superstar style!Passing the
Expense
object directly ensures the component’s input is well-defined from the start. Simplified logic, minimal fuss.
46-46
: Testing no-files scenario!Using
platformPersonalCardTxnExpenseSuggestionsRes.data[0]
is a good move to cover the case where receipts don’t exist.
59-59
: Double-check the default icon flow!Smart test to confirm the UI fallback for no receipts. All hail the thorough coverage!
src/app/core/mock-data/personal-card-txn-expense-suggestions.data.ts (7)
2-6
: Aiyyo, imports aligned to the new world!Clearing out the old
PersonalCardTxnExpenseSuggestion
references and pulling in strong typed models is like a stylish transformation scene.
8-8
: One structured response to rule them all!
PlatformApiResponse<Expense[]>
cements type safety like never before. Rock on, boss!
25-25
: Approval state made enum-lly correct!Using
ApprovalState.APPROVAL_PENDING
sets the stage for consistent usage across the code. Crisp and clear.
49-49
: Dates in full swagger!
new Date(...)
ensures no confusion about date parsing while reading or debugging. This is a neat improvement, la!
167-167
: Account type from enum, vasool raja style!Bright move to use
AccountType.PERSONAL_CASH_ACCOUNT
. Leaves no room for painful typos, Superstar.
174-174
: ExpenseState in action!Replacing strings with
ExpenseState.DRAFT
is like flipping on the unstoppable typed approach. Good job, da!
183-183
: Updated date as a Date object!Ensuring
updated_at
is a real date avoids the difference between string-based illusions and actual Date. Full marks!src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.spec.ts (2)
16-17
: Aiyyo, these fresh imports look mighty fine, boss!
They align with the new data structure and keep the specs up-to-date. Well done!
28-33
: Solid initialization of expense suggestions, thala!
AddingplatformExpenseWithExtractedData
on top and then spreadingplatformPersonalCardTxnExpenseSuggestionsRes.data
is a neat approach. Just verify that all references flow smoothly in your specs.src/app/fyle/personal-cards/personal-cards.page.ts (1)
765-765
: Simplicity at its finest, machi!
Dropping the extra parameter from.getMatchedExpensesSuggestions
makes the code straightforward. Double-check that no leftover references tousePlatformApi
remain for this method call.src/app/fyle/personal-cards/personal-cards.page.spec.ts (5)
45-45
: Import is perfect, friend!
Bringing inplatformPersonalCardTxnExpenseSuggestionsRes
syncs with the updated tests.
705-705
: Aha, the test date is locked in, boss!
Must ensure it reflects the scenario you’re validating, but all seems good now.
719-719
: Right choice, da!
ReferencingplatformPersonalCardTxnExpenseSuggestionsRes.data
suits the consolidated approach.
726-726
: Testing with '2021-09-19' is consistent as can be!
Keep it well-labeled in case you handle multiple date formats.
731-731
: Payload structure is correct, brother!
StoringplatformPersonalCardTxnExpenseSuggestionsRes.data
ensures the suggestions are well-received.src/app/core/services/personal-cards.service.spec.ts (1)
1371-1372
: Test coverage rocks, mama!
The assertion usingplatformPersonalCardTxnExpenseSuggestionsRes.data
is spot on to confirm the correct array is returned.src/app/shared/components/expense-card-lite/expense-card-lite.component.html (1)
28-28
: Mind-blowing change, boss! The merchant property is now speaking my language!The change from
vendor
tomerchant
aligns perfectly with the platform API terminology. This is how we maintain consistency, thalaiva! 🎭
</div> | ||
|
||
<div class="expenses-card--date"> | ||
{{ expense.txn_dt | date : 'MMM dd, YYYY' }} | ||
{{ expense.spent_at | date : 'MMM dd, YYYY' }} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Mind it! We found some date format inconsistencies, boss!
Like how I notice every detail in my action sequences, I spotted something important! The date formats are not uniform across our files:
src/app/shared/components/expenses-card-v2/expenses-card.component.html
uses a customdateFormat
pipe- All other files use the Angular date pipe with
'MMM dd, YYYY'
format
This is like having different styles in the same fight sequence - it doesn't look good! Also, using 'YYYY' instead of 'yyyy' in the date format is not the Angular way, macha! Angular date pipe prefers lowercase 'yyyy'.
Here's what we found in different files:
- expense-card-lite:
date : 'MMM dd, YYYY'
- view-expense.page:
date: 'MMM dd, YYYY'
- view-mileage.page:
date: 'MMM dd, YYYY'
- expense-preview:
date : 'MMM dd, YYYY'
- expenses-card:
dateFormat
(custom pipe)
Like how I maintain style in my stunts, we should maintain consistency in our date formats!
🔗 Analysis chain
Kabali style property renaming! But let's verify one small thing, macha!
The date property change from txn_dt
to spent_at
is more meaningful and aligns with the platform API. But like in my movies where I check every detail...
Let's verify if this date format works consistently across all scenarios, boss:
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check for any other date formats or pipes used with spent_at
# Search for other date formats used with spent_at
rg "spent_at.*\|.*date" -g "*.html"
# Search for any TypeScript files handling spent_at to ensure proper date handling
ast-grep --pattern 'spent_at'
Length of output: 999
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 7
🔭 Outside diff range comments (1)
src/app/core/mock-data/personal-card-txns.data.ts (1)
Line range hint
50-84
: Repeated data is fine, but can be dried up, da!
Leverage factories or helper methods to reduce duplication, ensuring maintainability.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (23)
src/app/core/mock-data/get-tasks-query-params-with-filters.data.ts
(2 hunks)src/app/core/mock-data/personal-card-txns.data.ts
(3 hunks)src/app/core/mock-data/unflattened-txn.data.ts
(1 hunks)src/app/core/models/personal_card_txn.model.ts
(0 hunks)src/app/core/models/platform/platform-personal-card-filter-params.model.ts
(1 hunks)src/app/core/models/platform/platform-personal-card-query-params.model.ts
(1 hunks)src/app/core/models/platform/platform-personal-card-txn.model.ts
(1 hunks)src/app/core/services/personal-cards.service.spec.ts
(22 hunks)src/app/core/services/personal-cards.service.ts
(14 hunks)src/app/fyle/add-edit-expense/add-edit-expense-3.spec.ts
(2 hunks)src/app/fyle/add-edit-expense/add-edit-expense-4.spec.ts
(11 hunks)src/app/fyle/add-edit-expense/add-edit-expense.page.ts
(4 hunks)src/app/fyle/personal-cards-matched-expenses/expense-preview/expense-preview.component.spec.ts
(1 hunks)src/app/fyle/personal-cards-matched-expenses/expense-preview/expense-preview.component.ts
(3 hunks)src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.html
(1 hunks)src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.spec.ts
(6 hunks)src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.ts
(3 hunks)src/app/fyle/personal-cards/personal-cards.page.html
(1 hunks)src/app/fyle/personal-cards/personal-cards.page.spec.ts
(25 hunks)src/app/fyle/personal-cards/personal-cards.page.ts
(24 hunks)src/app/shared/components/personal-card-transaction/personal-card-transaction.component.html
(2 hunks)src/app/shared/components/personal-card-transaction/personal-card-transaction.component.spec.ts
(5 hunks)src/app/shared/components/personal-card-transaction/personal-card-transaction.component.ts
(2 hunks)
💤 Files with no reviewable changes (1)
- src/app/core/models/personal_card_txn.model.ts
🧰 Additional context used
📓 Learnings (1)
src/app/fyle/personal-cards-matched-expenses/expense-preview/expense-preview.component.ts (1)
Learnt from: sumrender
PR: fylein/fyle-mobile-app#3265
File: src/app/fyle/personal-cards-matched-expenses/expense-preview/expense-preview.component.spec.ts:35-37
Timestamp: 2024-11-18T06:55:17.972Z
Learning: In `src/app/fyle/add-edit-expense/add-edit-expense.page.ts`, the `unmatchExpense` method is used for corporate card expenses, not for personal card expenses.
🪛 Biome (1.9.4)
src/app/fyle/personal-cards-matched-expenses/expense-preview/expense-preview.component.ts
[error] 65-65: The assignment should not be in an expression.
The use of assignments in expressions is confusing.
Expressions are often considered as side-effect free.
(lint/suspicious/noAssignInExpressions)
src/app/fyle/personal-cards/personal-cards.page.ts
[error] 233-233: Don't use '{}' as a type.
Prefer explicitly define the object shape. '{}' means "any non-nullable value".
(lint/complexity/noBannedTypes)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: gitStream.cm
🔇 Additional comments (91)
src/app/shared/components/personal-card-transaction/personal-card-transaction.component.ts (7)
3-3
: Aiyyo, this import is rocking da!
No issues spotted with the import statement.
11-13
: Superb structure for inputs, boss!
These inputs (transaction
andpreviousTxnDate
) make your component nice and organized. Just ensure you handle undefined or null cases gracefully if they occur.
23-25
: Outputs looking stylish!
Switching to defaultnew EventEmitter<string>();
is neat. Keep shining, no changes needed here.
29-31
: Variable declarations are top-notch, thalaiva!
No immediate concerns.
33-34
: ‘isSelected’ method is spot on, boss!
Usingsome()
is a clear approach. No tension, only style!
38-38
: Currency assignment is superstar class!
Ensurethis.transaction
orthis.transaction.currency
is never null, boss.Would you like a quick check to handle missing currency?
50-52
: Card click event is unstoppable, da!
Just like above, consider a safety check in casetransaction
is undefined.src/app/core/mock-data/personal-card-txns.data.ts (1)
85-102
: Third data object also looks good, appa!
No major concerns. Everything’s consistent with the new platform model.src/app/fyle/personal-cards/personal-cards.page.ts (8)
83-83
:loadData$
setup looks great, superstar!
Using a BehaviorSubject for pagination and filtering is a slick approach.
193-197
: Query params extension is nice, boss!
Neat use ofthis.apiV2Service.extendQueryParamsForTextSearch
. No drama here.
407-408
: Dynamic query param assignment is mass, machi!
No issues. This keeps states in sync.
463-467
: Segment change is neat, thalaiva!
Re-setting the transaction type and refreshing is well-handled.
518-518
: Hide transactions approach is robust, boss!
Looks all good. The success message is clear.
665-677
: Filter method is well-orchestrated!
Ensures consistent query param generation. Keep it up.
747-759
: Expense creation logic is stylish, superstar!
The matched expense suggestion logic is well executed. No concerns.
784-791
: Expense preview is awesome, thambi!
UsingmodalController
for preview is a great user experience.src/app/core/models/platform/platform-personal-card-query-params.model.ts (1)
2-6
: Mandatory fields are correct, boss!
Just make sure every usage site sets these new required props properly.src/app/core/models/platform/platform-personal-card-filter-params.model.ts (1)
1-7
: New interface is stylish, da!
Partial<PlatformPersonalCardQueryParams>
is a flexible approach.src/app/core/models/platform/platform-personal-card-txn.model.ts (1)
23-23
: Aiyoo, brilliant addition, da!
ThistransactionType
property elegantly captures both credit and debit. Nothing to worry here, pa!src/app/core/mock-data/get-tasks-query-params-with-filters.data.ts (2)
36-36
: Aiyoo, well done switching to the new interface, pa!
YourpersonalCardQueryParamFiltersData
now aligns perfectly withPlatformPersonalCardFilterParams
. Super!
40-41
: Aiyoo, keep an eye on these states, da!
Making the filter'in.(INITIALIZED)'
and settingpersonal_card_id
is spot on. Everything looks clean, pa!src/app/fyle/personal-cards-matched-expenses/expense-preview/expense-preview.component.ts (2)
4-4
: Aiyoo, your import usage is neat, pa!
Nothing to fix, your usage of operators likefinalize
is crisp and clean.
42-42
: Aiyo, constructor’s shaping up well, da!
All dependencies look correct. No changes needed, pa!src/app/shared/components/personal-card-transaction/personal-card-transaction.component.spec.ts (8)
12-12
: Aiyoo, your import is spot-on, pa!
Pulling inplatformPersonalCardTxns
keeps your tests consistent. Good job!
35-36
: Aiyo, that’s a fine setup, da!
Assigning the first two items as selected ensures your test data covers multiple scenarios.
52-52
: Aiyoo, your test logic is mighty fine, pa!
Verifying date differences withpreviousTxnDate
is a solid approach.
58-58
: Superb usage, da!
Reusing the actualspent_at
date from mock data keeps your test real.
85-85
: Aiyo, nice selection test, pa!
Changing the transaction ensures proper coverage of different entries.
94-94
: Aiyoo, the date format test is thorough, da!
Ensuring consistency with'Sep 22, 2024'
adds clarity for your specs.
125-125
: Aiyoo, currency check looks powerful, pa!
Confirming'200.00'
is displayed ensures correct formatting.
134-134
: Excellent vendor name validation, da!
Verifying'mocha'
is displayed keeps your UI in check.src/app/fyle/personal-cards-matched-expenses/expense-preview/expense-preview.component.spec.ts (2)
119-122
: Superb entry, da!
These test lines forexternal_expense_id
andtransaction_split_group_id
look correct. They clearly define expected properties for the matched expense.
129-129
: Aiyyo, excellent usage of the matching call!
The verification ofmatchExpense
parameters is neatly done. No issues here, boss.src/app/fyle/personal-cards/personal-cards.page.spec.ts (18)
25-25
: Rajini says: Good import!
platformPersonalCardTxns
import sets the foundation for test data usage.
44-45
: Rock on, da!
Bringing inplatformPersonalCardTxnExpenseSuggestionsRes
andPlatformPersonalCardTxnState
shows consistent adoption of the new platform model.
218-218
: Good style, buddy!
Using[platformPersonalCardTxns.data[0]]
ensures precise control over test data.
277-277
: Fantastic interface, da!
All these lines handlepostBankAccounts
in consecutive blocks. Confirming the linked accounts count is correct and the success flow is well structured with the snack bar message.Also applies to: 281-281, 286-286, 308-308, 312-312, 317-317
346-346
: On track, da!
These lines confirm query params for card fetch:'in.(INITIALIZED)'
with correct personal card ID. Crisp and clear checks.Also applies to: 361-361
414-414
: Style is unstoppable!
The usage ofPlatformPersonalCardTxnState.INITIALIZED
combined with'in.(INITIALIZED)'
ensures consistent filter states. No problem here, boss.Also applies to: 432-432
475-475
: Checking synergy, da!
syncTransactions
returning an observable of empty data is tested well. Perfect for simulating no new txns scenario.
528-528
: Stupendous, dear friend!
Again, verifying the'INITIALIZED'
transaction state. Good job ensuring consistent behavior for selection mode toggling.Also applies to: 540-540
569-569
: Machi, well done!
You’re verifying the entireselectedElements
array afteronSelectAll()
. Thorough approach, no issues.Also applies to: 574-574
691-691
: Dynamic power, boss!
createExpense(platformPersonalCardTxns.data[0])
plus scoping the amount and date'2024-09-22'
is crystal clear.Also applies to: 694-695
706-706
: Rock & roll, da!
UsingplatformPersonalCardTxnExpenseSuggestionsRes.data
for expense suggestions is nicely tested. Perfect for validating multiple suggestion flows.Also applies to: 710-710, 713-713, 716-717, 721-723
732-732
: Idhula problem illa.
A quick check ensures the function gracefully skips creation ifloadingMatchedExpenseCount = true
. Good sense.
742-742
: Super move, dear friend!
Testing different indexes (data[1]
) forcreateExpense
is the right step to confirm variety.Also applies to: 744-744
749-749
: Aaha, good approach!
openExpensePreview
with correct props (expenseId
,card
,cardTxnId
) is tested thoroughly. Excellent coverage.Also applies to: 758-758, 764-766
793-797
: No issues, da!
Date param logic'in.(INITIALIZED)'
remains consistent. Solid.Also applies to: 819-819
995-995
: All is well, friend!
CheckingplatformPersonalCardTxns.data
count to decide infinite scroll is practical.
1025-1025
: The flow is unstoppable, da!
EnsuringgetBankTransactions
withplatformPersonalCardTxns
includes edge cases of emptydata: []
. This is thorough.Also applies to: 1028-1028, 1040-1040
1057-1057
: Mighty fine, buddy!
Usingof(platformPersonalCardTxns.data)
when mockingloadPersonalTxns
ensures coverage for the default scenario.src/app/fyle/add-edit-expense/add-edit-expense-4.spec.ts (6)
16-16
: Machi, top form with the new import!
Switching toplatformPersonalCardTxns
enforces consistency across the codebase.
611-611
: Brilliant alignment, da!
All references toactivatedRoute.snapshot.params.personalCardTxn
andpersonalCardsService.matchExpense
usingexternal_expense_id
show a well-structured approach for personal card matching.Also applies to: 615-615, 659-659, 663-663, 713-713, 717-717
659-659
: Semma job re-checking, boss!
Your repeated snippet is also well tested. No problem here.
742-742
: Flawless scenario coverage, dear friend!
EnsuringopenExpensePreview
is called for an already matched expense. Great coverage.
744-744
: Saar, well done again!
Yes, verifying correct invocation withplatformPersonalCardTxns.data[1]
is perfect for branching logic tests.
611-611
: One more note, da!
Double-check if the newly introduced data shape matches all usage references across tests. A gentle re-verify might help.src/app/fyle/add-edit-expense/add-edit-expense-3.spec.ts (2)
38-38
: Aha, consistent rename, boss!
platformPersonalCardTxns
import is aligned with the new data definitions. Perfect step to unify your test data.
1501-1501
: Seamless integration, da!
PullingplatformPersonalCardTxns
into the coverage scenario ensures personal card usage is thoroughly tested.src/app/core/mock-data/unflattened-txn.data.ts (1)
1376-1376
: Aha, purpose set to 'mocha'? Splendid choice, my friend!That new purpose lifts the spirit of the transaction. No issues with correctness or performance arise here. It's all good!
src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.ts (6)
7-9
: Fantastic imports, my friend!Bringing in
PlatformPersonalCardTxn
,Expense
, andPlatformPersonalCard
from the platform models makes your code flexible and consistent with the rest of the app. Thumbs up!
20-20
: Top-notch new property introduction!The
personalCard
property, typed asPlatformPersonalCard
, is consistent with your newly introduced model. Everything looks solid.
22-23
: Flawless shift to platform-based transactions!Defining
txnDetails
asPlatformPersonalCardTxn
ensures type safety and matches the revised data model. This sets the stage for future expansions.
24-24
: Moving to theExpense
array? Superb move!This
expenseSuggestions: Expense[]
property aligns magnificently with the new approach, removing the outdated model references.
31-33
: Router state extraction is well-crafted!Assigning these values from the router state with the
as
operator is straightforward and keeps your logic nice and clean. No demands for improvement!
50-51
: Changing references to match the new model? That’s the spirit!Using
this.personalCard.card_number
andthis.txnDetails.id
instead of older props is correct and matches the updated platform model. No snags in sight.src/app/shared/components/personal-card-transaction/personal-card-transaction.component.html (7)
3-3
: New date binding is shining bright!Using
transaction.spent_at | dateFormat
is a direct, reliable approach. All good, friend!
23-23
: Description binding done with style!Referencing
transaction.description
is the correct way to unify your data source. Excellent job!
30-30
: Cracking good class binding, boss!
[ngClass]="{ ' personal-card-transaction--green': transaction.transactionType === 'credit' }"
is easy to follow. Good for readability and dynamic styling.
35-35
: Same approach, same brilliance!Again, the reactive styling suits your layout well. Everything’s crystal clear.
37-37
: Sprightly currency transformation, I say!
{{ { value: transaction.amount, currencyCode: currency, skipSymbol: true } | exactCurrency }}
is perfect for accurate financial displays.
41-41
: Conditional credit label looks tiptop!Your logic is direct: show CR if credit. So straightforward, so nice.
44-44
: Debit label is just as important, my friend!Likewise, the fallback DR ensures clarity. Full marks for thoroughness!
src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.html (5)
18-18
: Neat reference totxnDetails.description
This direct binding is a perfect reflection of your domain’s shift. No problems here!
22-22
: Kudos for the new date bindingDisplaying
txnDetails.spent_at
ensures clarity on when the transaction took place. Keep it up!
26-28
: Credit-based styling? Rajini style would say, “Magical show, friend!”The green class binding for credits is dynamic and easy to read. Good use of
[ngClass]
.
32-34
: Precise currency formattingUsing
exactCurrency
with thetxnDetails.currency
is a smooth approach for consistent expense rendering.
38-41
: Clever transaction type indicationShowing DR or CR based on
transactionType
is concise. Great final touches!src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.spec.ts (3)
6-6
: Mind it! The imports are perfectly aligned with our mission!The new imports for platform-specific models show a clear transition from the old PersonalCardTxnExpenseSuggestion model to the new platform-based approach. This is the way!
Also applies to: 16-18
29-35
: Magizhchi! The test data transformation is spot on!The test data setup now correctly uses:
linkedAccounts[0]
for personalCardplatformPersonalCardTxns.data[0]
for txnDetails- Combined array of suggestions with spread operator
90-90
: Don't mess with the assertions, they are now stronger than ever!The test assertions have been updated to use the new platform model properties:
- Using
description
instead ofbtxn_description
- Date assertion updated to '2024'
- Component properties now use
personalCard.card_number
andtxnDetails.id
Let's make sure all assertions are updated:
Also applies to: 94-94, 143-144
✅ Verification successful
Mind it! The assertions are rock-solid like a Superstar's punch dialogue! 🌟
After scanning the entire codebase like a slow-motion action sequence, I can confirm that all assertions are perfectly synchronized with the new platform model. No old property patterns are lurking in the shadows, and every test is hitting its target with style!
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Search for any remaining old property references rg -i "btxn_|ba_account" src/app/fyle/personal-cards-matched-expenses/Length of output: 72
Script:
#!/bin/bash # Search for assertion patterns with context rg -A 2 -B 2 "expect\(.*\.(description|card_number|txnDetails)" src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.spec.ts # Also check if there are any other test files fd "spec.ts$" src/app/fyle/personal-cards-matched-expenses/Length of output: 513
Script:
#!/bin/bash # Search for all expect statements in the spec files with more context for file in $(fd "spec.ts$" src/app/fyle/personal-cards-matched-expenses/); do echo "=== Checking $file ===" rg -A 5 -B 5 "expect\(" "$file" done # Also check component property access patterns for file in $(fd "spec.ts$" src/app/fyle/personal-cards-matched-expenses/); do echo "=== Property access in $file ===" rg -A 2 -B 2 "component\." "$file" doneLength of output: 11770
src/app/fyle/personal-cards/personal-cards.page.html (1)
195-195
: Style ah? This template is now as clean as my signature moves!The component bindings have been simplified:
- Single
[transaction]
binding replaces multiple individual properties- Using
transaction.id
instead of deprecatedbtxn_id
This change reduces template complexity and improves maintainability. Kabali approves! 🕶️
Also applies to: 197-197
src/app/core/services/personal-cards.service.ts (3)
37-42
: Mind-blowing! The transaction type logic is now crystal clear!The new
addTransactionTypeToTxns
method elegantly:
- Determines transaction type based on amount sign
- Takes absolute value of amount
- Maintains immutability using map
105-113
: Thalaiva style! The API calls are now straight to the point!The
getMatchedExpensesSuggestions
method has been simplified:
- Direct usage of platform API response
- Clean parameter passing
- No unnecessary transformations
207-243
: Watch out! These date filters need special attention!While the date parameter generation is well-structured, we should verify:
- Timezone handling in date conversions
- Edge cases in custom date ranges
- Proper null checks for queryParams
Let's check for potential timezone issues:
✅ Verification successful
Listen up, partner! Your date handling is as solid as my punch dialogues!
The date filters are implemented with perfect timing, just like my signature moves. The dateService is handling all timezone transformations with the precision of a perfectly choreographed fight sequence. No timezone bugs can escape this setup!
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Search for date handling across the codebase rg "toISOString|new Date" src/app/core/services/Length of output: 33308
src/app/core/services/personal-cards.service.spec.ts (5)
25-25
: Mind it! Import statement looks good!The import of
platformPersonalCardTxnExpenseSuggestionsRes
from mock data is properly aligned with the platform API changes.
907-909
: Kabali style test case, perfect!The test case correctly verifies the simplified
getMatchedExpensesSuggestions
method without the usePlatformApi parameter. The assertion checks if the response data is properly mapped.
Line range hint
892-897
: Style-ah test case implementation!The test case properly validates the
syncTransactions
method:
- Correctly sends account ID in the payload
- Verifies the API endpoint and response
Line range hint
942-949
: Thalaiva approves this test case!The test case for
hideTransactions
is well implemented:
- Properly maps transaction IDs to the expected payload format
- Verifies the correct endpoint is called
- Validates the response length matches input
Line range hint
1008-1025
: Mind-blowing test coverage, partner!The test case for
isMfaEnabled
is thorough:
- Properly constructs the test payload with personal card ID
- Verifies the correct API endpoint is called
- Validates the boolean response transformation
src/app/fyle/add-edit-expense/add-edit-expense.page.ts (1)
66-66
: Style-ah import statement!Clean import of
PlatformPersonalCardTxn
model, replacing the old personal card transaction model.
onSetMultiselectMode(): void { | ||
if (!this.isSelectionModeEnabled) { | ||
this.setMultiselectMode.emit(this.txnId); | ||
this.setMultiselectMode.emit(this.transaction.id); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Multiselect mode event is well done, macha!
A quick defensive check on this.transaction?.id
might be safer if you foresee missing transaction data.
ba_account_number: 'xxxx2345', | ||
ba_bank_name: 'Dag Site yodlee', | ||
ba_id: 'baccLesaRlyvLY', | ||
ba_mask: '2345', | ||
ba_nickname: 'Robin', | ||
btxn_amount: 200, | ||
btxn_created_at: new Date('2021-11-11T06:42:30.129062'), | ||
btxn_currency: 'USD', | ||
btxn_description: 'Debit Card Purchase XX/XX XX:XXp #XXXXUW HUSKYTEAMBKSTORE XXX-XXX-XXXX WA XXXXX', | ||
btxn_external_id: '31703918', | ||
btxn_id: 'btxn6Kur2OMWeq', | ||
btxn_orig_amount: null, | ||
btxn_orig_currency: null, | ||
btxn_status: 'HIDDEN', | ||
btxn_transaction_dt: new Date('2021-09-19T10:00:00'), | ||
btxn_transaction_type: 'debit', | ||
btxn_updated_at: new Date('2022-03-04T07:34:52.408835'), | ||
btxn_vendor: null, | ||
tx_matched_at: null, | ||
tx_split_group_id: null, | ||
txn_details: null, | ||
}, | ||
], | ||
limit: 1, | ||
offset: 0, | ||
url: '/v2/personal_bank_transactions', | ||
}); | ||
|
||
export const matchedPersonalCardTxn: PersonalCardTxn = deepFreeze({ | ||
_search_document: | ||
"'200':1 '200.00':2 'card':5 'debit':4,18 'huskyteambkstore':11 'purchase':6 'usd':3 'wa':16 'xx':8 'xx/xx':7 'xxp':9 'xxx':13,14 'xxx-xxx-xxxx':12 'xxxx':15 'xxxxuw':10 'xxxxx':17", | ||
ba_account_number: 'xxxx2345', | ||
ba_bank_name: 'Dag Site yodlee', | ||
ba_id: 'baccLesaRlyvLY', | ||
ba_mask: '2345', | ||
ba_nickname: 'Robin', | ||
btxn_amount: 200, | ||
btxn_created_at: new Date('2021-11-11T06:42:30.129062'), | ||
btxn_currency: 'USD', | ||
btxn_description: 'Debit Card Purchase XX/XX XX:XXp #XXXXUW HUSKYTEAMBKSTORE XXX-XXX-XXXX WA XXXXX', | ||
btxn_external_id: '31703918', | ||
btxn_id: 'btxn6Kur2OMWeq', | ||
btxn_orig_amount: null, | ||
btxn_orig_currency: null, | ||
btxn_status: 'MATCHED', | ||
btxn_transaction_dt: new Date('2021-09-19T10:00:00'), | ||
btxn_transaction_type: 'debit', | ||
btxn_updated_at: new Date('2022-03-04T07:34:52.408835'), | ||
btxn_vendor: null, | ||
tx_matched_at: null, | ||
tx_split_group_id: null, | ||
txn_details: [ | ||
{ | ||
amount: 57.69, | ||
category: 'Bus', | ||
category_display_name: 'Bus / Travelling - Inland', | ||
transactionType: 'debit', | ||
amount: 200.0, | ||
category: 'Restaurants/Dining', | ||
created_at: new Date('2024-11-21T05:27:51.863181+00:00'), | ||
currency: 'USD', | ||
expense_number: 'E/2022/07/T/48', | ||
id: 'txhLBlo6XN4k', | ||
num_files: 0, | ||
purpose: 'ADOBE *CREATIVE CLOUD', | ||
state: 'APPROVED', | ||
sub_category: 'Travelling - Inland', | ||
txn_dt: new Date('2019-06-19T06:30:00'), | ||
user_can_delete: true, | ||
vendor_id: 29200, | ||
vendor_name: 'Office & Shipping', | ||
description: 'mocha', | ||
external_transaction_id: '57690734', | ||
foreign_amount: null, | ||
foreign_currency: null, | ||
id: 'btxndbZdAth0x4', | ||
matched_expense_ids: ['txjhfqMX9YuB'], | ||
matched_expenses: [ | ||
{ | ||
amount: 200, | ||
category_display_name: 'Unspecified', | ||
currency: 'USD', | ||
foreign_amount: null, | ||
foreign_currency: null, | ||
id: 'txjhfqMX9YuB', | ||
merchant: 'Mocha', | ||
no_of_files: 0, | ||
purpose: 'mocha', | ||
seq_num: 'E/2024/11/T/7', | ||
spent_at: new Date('2024-09-22T00:00:00+00:00'), | ||
state: 'COMPLETE', | ||
}, | ||
], | ||
merchant: 'Mocha', | ||
org_id: 'orrb8EW1zZsy', | ||
personal_card_id: 'bacczUA0bUKVTD', | ||
spent_at: new Date('2024-09-22T00:00:00+00:00'), | ||
state: PlatformPersonalCardTxnState.INITIALIZED, | ||
updated_at: new Date('2024-11-26T04:44:17.825002+00:00'), | ||
user_id: 'us2KhpQLpzX4', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Mock data is marana mass, boss!
The new structure is clear. For better coverage, consider more varied values to test edge cases.
queryParams = this.apiV2Service.extendQueryParamsForTextSearch(queryParams as {}, params.searchString, true); | ||
return this.personalCardsService.getBankTransactionsCount(queryParams).pipe( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
'{}' type is strictly out of style, da!
Refrain from using '{}'
as it’s a banned type. Use a more explicit type like Record<string, unknown>
for clarity.
- queryParams = this.apiV2Service.extendQueryParamsForTextSearch(queryParams as {}, params.searchString, true);
+ queryParams = this.apiV2Service.extendQueryParamsForTextSearch(
+ queryParams as Record<string, unknown>,
+ params.searchString,
+ true
+ );
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
queryParams = this.apiV2Service.extendQueryParamsForTextSearch(queryParams as {}, params.searchString, true); | |
return this.personalCardsService.getBankTransactionsCount(queryParams).pipe( | |
queryParams = this.apiV2Service.extendQueryParamsForTextSearch( | |
queryParams as Record<string, unknown>, | |
params.searchString, | |
true | |
); | |
return this.personalCardsService.getBankTransactionsCount(queryParams).pipe( |
🧰 Tools
🪛 Biome (1.9.4)
[error] 233-233: Don't use '{}' as a type.
Prefer explicitly define the object shape. '{}' means "any non-nullable value".
(lint/complexity/noBannedTypes)
this.personalCardsService | ||
.matchExpense(this.expenseId, this.cardTxnId) | ||
.pipe(finalize(() => (this.loading = false))) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Aiyoo, direct matching is top-notch, pa!
However, the static analysis warns about the assignment inside finalize
. Let’s rewrite it for clarity:
- .pipe(finalize(() => (this.loading = false)))
+ .pipe(finalize(() => {
+ this.loading = false;
+ }))
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
this.personalCardsService | |
.matchExpense(this.expenseId, this.cardTxnId) | |
.pipe(finalize(() => (this.loading = false))) | |
this.personalCardsService | |
.matchExpense(this.expenseId, this.cardTxnId) | |
.pipe(finalize(() => { | |
this.loading = false; | |
})) |
🧰 Tools
🪛 Biome (1.9.4)
[error] 65-65: The assignment should not be in an expression.
The use of assignments in expressions is confusing.
Expressions are often considered as side-effect free.
(lint/suspicious/noAssignInExpressions)
@@ -1359,7 +1359,7 @@ export class AddEditExpensePage implements OnInit { | |||
(JSON.parse(this.activatedRoute.snapshot.params.bankTxn as string) as CCCExpUnflattened); | |||
const personalCardTxn = | |||
this.activatedRoute.snapshot.params.personalCardTxn && | |||
(JSON.parse(this.activatedRoute.snapshot.params.personalCardTxn as string) as PersonalCardTxn); | |||
(JSON.parse(this.activatedRoute.snapshot.params.personalCardTxn as string) as PlatformPersonalCardTxn); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Type casting needs more power!
Consider adding a type guard to safely handle the personal card transaction type casting.
function isPlatformPersonalCardTxn(obj: any): obj is PlatformPersonalCardTxn {
return obj && typeof obj === 'object' && 'id' in obj && 'spent_at' in obj;
}
txn_dt: new Date(personalCardTxn.spent_at), | ||
source: 'MOBILE', | ||
currency: personalCardTxn.btxn_currency, | ||
amount: personalCardTxn.btxn_amount, | ||
vendor: personalCardTxn.btxn_vendor, | ||
purpose: personalCardTxn.btxn_description, | ||
currency: personalCardTxn.currency, | ||
amount: personalCardTxn.amount, | ||
vendor: personalCardTxn.merchant, | ||
purpose: personalCardTxn.description, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Add some defensive style to property mapping!
The property mapping from personal card transaction could be more defensive. Consider adding null checks:
txn_dt: personalCardTxn?.spent_at ? new Date(personalCardTxn.spent_at) : new Date(),
source: 'MOBILE',
currency: personalCardTxn?.currency || defaultCurrency,
amount: personalCardTxn?.amount || 0,
vendor: personalCardTxn?.merchant || '',
purpose: personalCardTxn?.description || '',
(JSON.parse(this.activatedRoute.snapshot.params.personalCardTxn as string) as PlatformPersonalCardTxn); | ||
const externalExpenseId = personalCardTxn.id; | ||
return this.transactionService.upsert(etxn.tx as Transaction).pipe( | ||
switchMap((txn) => | ||
this.launchDarklyService | ||
.getVariation('personal_cards_platform', false) | ||
.pipe( | ||
switchMap((usePlatformApi) => | ||
this.personalCardsService | ||
.matchExpense(txn.split_group_id, externalExpenseId, usePlatformApi) | ||
.pipe(switchMap(() => this.uploadAttachments(txn.split_group_id))) | ||
) | ||
) | ||
this.personalCardsService | ||
.matchExpense(txn.split_group_id, externalExpenseId) | ||
.pipe(switchMap(() => this.uploadAttachments(txn.split_group_id))) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Add some error handling power to expense matching!
The personal card expense matching could use better error handling:
return this.transactionService.upsert(etxn.tx as Transaction).pipe(
switchMap((txn) =>
this.personalCardsService
.matchExpense(txn.split_group_id, externalExpenseId)
.pipe(
catchError((err) => {
this.showSnackBarToast({ message: 'Failed to match expense with card transaction' }, 'failure', ['msb-failure']);
return throwError(err);
}),
switchMap(() => this.uploadAttachments(txn.split_group_id))
)
)
);
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 13
🔭 Outside diff range comments (2)
src/app/fyle/personal-cards/personal-cards.page.ts (2)
Line range hint
218-267
: Listen up! Time for some error handling magic!The method needs error handling for API calls. What happens when the network fails or the server responds with an error? Don't leave your users in the dark!
Add error handling like this:
return this.personalCardsService.getBankTransactionsCount(queryParams).pipe( + catchError((error) => { + // Log the error + console.error('Failed to fetch bank transactions count:', error); + // Show user-friendly message + this.matSnackBar.openFromComponent(ToastMessageComponent, { + ...this.snackbarProperties.setSnackbarProperties('error', { + message: 'Failed to load transactions. Please try again.', + }), + panelClass: ['msb-error'], + }); + return EMPTY; + }), switchMap((count) => {🧰 Tools
🪛 Biome (1.9.4)
[error] 233-233: Don't use '{}' as a type.
Prefer explicitly define the object shape. '{}' means "any non-nullable value".
(lint/complexity/noBannedTypes)
Line range hint
784-801
: Time to add some style to error handling!The modal operations need error handling. What if the modal fails to present or dismiss?
Add error handling like this:
- await expenseDetailsModal.present(); + try { + await expenseDetailsModal.present(); + } catch (error) { + console.error('Failed to present expense preview modal:', error); + this.matSnackBar.openFromComponent(ToastMessageComponent, { + ...this.snackbarProperties.setSnackbarProperties('error', { + message: 'Failed to open expense preview. Please try again.', + }), + panelClass: ['msb-error'], + }); + }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (23)
src/app/core/mock-data/get-tasks-query-params-with-filters.data.ts
(2 hunks)src/app/core/mock-data/personal-card-txns.data.ts
(3 hunks)src/app/core/mock-data/unflattened-txn.data.ts
(1 hunks)src/app/core/models/personal_card_txn.model.ts
(0 hunks)src/app/core/models/platform/platform-personal-card-filter-params.model.ts
(1 hunks)src/app/core/models/platform/platform-personal-card-query-params.model.ts
(1 hunks)src/app/core/models/platform/platform-personal-card-txn.model.ts
(1 hunks)src/app/core/services/personal-cards.service.spec.ts
(22 hunks)src/app/core/services/personal-cards.service.ts
(14 hunks)src/app/fyle/add-edit-expense/add-edit-expense-3.spec.ts
(2 hunks)src/app/fyle/add-edit-expense/add-edit-expense-4.spec.ts
(11 hunks)src/app/fyle/add-edit-expense/add-edit-expense.page.ts
(4 hunks)src/app/fyle/personal-cards-matched-expenses/expense-preview/expense-preview.component.spec.ts
(1 hunks)src/app/fyle/personal-cards-matched-expenses/expense-preview/expense-preview.component.ts
(3 hunks)src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.html
(1 hunks)src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.spec.ts
(6 hunks)src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.ts
(3 hunks)src/app/fyle/personal-cards/personal-cards.page.html
(1 hunks)src/app/fyle/personal-cards/personal-cards.page.spec.ts
(25 hunks)src/app/fyle/personal-cards/personal-cards.page.ts
(24 hunks)src/app/shared/components/personal-card-transaction/personal-card-transaction.component.html
(2 hunks)src/app/shared/components/personal-card-transaction/personal-card-transaction.component.spec.ts
(5 hunks)src/app/shared/components/personal-card-transaction/personal-card-transaction.component.ts
(2 hunks)
💤 Files with no reviewable changes (1)
- src/app/core/models/personal_card_txn.model.ts
🧰 Additional context used
📓 Learnings (1)
src/app/fyle/personal-cards-matched-expenses/expense-preview/expense-preview.component.ts (1)
Learnt from: sumrender
PR: fylein/fyle-mobile-app#3265
File: src/app/fyle/personal-cards-matched-expenses/expense-preview/expense-preview.component.spec.ts:35-37
Timestamp: 2024-11-18T06:55:17.972Z
Learning: In `src/app/fyle/add-edit-expense/add-edit-expense.page.ts`, the `unmatchExpense` method is used for corporate card expenses, not for personal card expenses.
🪛 Biome (1.9.4)
src/app/fyle/personal-cards-matched-expenses/expense-preview/expense-preview.component.ts
[error] 65-65: The assignment should not be in an expression.
The use of assignments in expressions is confusing.
Expressions are often considered as side-effect free.
(lint/suspicious/noAssignInExpressions)
src/app/fyle/personal-cards/personal-cards.page.ts
[error] 233-233: Don't use '{}' as a type.
Prefer explicitly define the object shape. '{}' means "any non-nullable value".
(lint/complexity/noBannedTypes)
⏰ Context from checks skipped due to timeout of 90000ms (2)
- GitHub Check: build (12.x)
- GitHub Check: gitStream.cm
🔇 Additional comments (109)
src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.ts (4)
7-9
: Superb Imports, Boss!
No issues here. The new models are spot-on and keep the code tidy.
20-24
: Flawless Property Declarations, Machi!
HavingpersonalCard
,txnDetails
, andexpenseSuggestions
typed so precisely is a grand move. Easy to read, easy to maintain.
31-33
: Smooth Operator for Router Navigation, Thalaiva!
You are assigning those route states with perfect clarity. Just ensure the states are always present to avoid null references.
50-51
: Marvelous Param Usage, Da!
Switching topersonalCard.card_number
andtxnDetails.id
keeps the data consistent and intuitive.src/app/core/mock-data/personal-card-txns.data.ts (3)
10-47
: One Masterstroke of Data, Boss!
Storing multiple transactions with nicely typed fields. Please confirm that all date formats align across the app for consistency.
Line range hint
50-84
: Second Batch Also Looks Fantastic!
Your usage oftransactionType: 'debit'
with updated states is consistent. Keep an eye on the possible states just in case new ones appear.
85-102
: Coffee vs Mocha, Ha!
Great to see variety in the merchant field. The array approach formatched_expenses
is flexible. All good, Superstar!src/app/core/services/personal-cards.service.ts (17)
2-2
: Stylish Import, Thambi!
Observable
is your friend. All is well.
16-16
: Filter Params Import, Superstar!
This sets the stage for well-defined queries. No problem seen.
51-51
: Token Method Looks Rock-Solid, Ayya!
Generates the right token structure. Confirm thatfast_link_url
never changes at runtime.
65-65
: MFA Check is Macha-Level!
Returning a boolean is straightforward. Great job.
93-93
: Bank Accounts Poster, Boss!
No issues found. Keep rocking.
105-113
: Suggestion Endpoint, Machi!
Line 113 returningres.data
for expenses is neat. Watch out for empty results.
127-138
: Bank Transactions Param, Thalaivar!
This configuration block sets the foundation for flexible queries.
148-151
: Mapping Transaction Types, Da!
Brilliant idea to unify results withaddTransactionTypeToTxns
. Nicely done.
155-155
: Match Expense Goes Full Power!
Perfectly forming payload. Looks good.
178-184
: Counting the Bank Transactions, Machan!
ChaininggetBankTransactions
is a wise approach. No problems here.
187-187
: Syncing in Style, Thambi!
Just ensure the payload format matches server requirements.
196-196
: Hiding Transactions in Bulk, Boss!
Simple and effective. Aiyoo—easy as that.
207-242
: A Grand DateParam Generator, Superstar!
Handles multiple ranges gracefully. Confirm that'All Time'
logic truly captures all.
314-316
: Generate TXN Date Params is Crisp, Thala!
Your branching for created vs updated is well-structured.
320-322
: Fetching QueryType, Boss!
This is straightforward. Clean code.
374-377
: Credit Params Done Right, Da!
Switching between 'lte.0' and 'gte.0' is a neat trick. Big thumbs up.
37-42
: 🧹 Nitpick (assertive)Clever Credit/Debit Mapping, Da!
UsingMath.abs(txn.amount)
and assigningtransactionType
is a wise move. Ensure you handle zero amounts gracefully.+ if (txn.amount === 0) { + transactionType = 'zero'; + }src/app/core/models/platform/platform-personal-card-query-params.model.ts (1)
2-6
: Mandatory Props, Big Step, Thalaiva!
Brace yourself for new usage patterns because these query params are no longer optional. Validate carefully across the app.src/app/core/models/platform/platform-personal-card-filter-params.model.ts (1)
1-7
: New Filter Interface, Mass!
pageNumber
,searchString
, andqueryParams
are well-defined. This structure is robust.src/app/core/models/platform/platform-personal-card-txn.model.ts (1)
23-23
: Aiyoo! Optional Transaction Type, Super!
Looks great, boss. AddingtransactionType
as an optional field is fabulous for typed flexibility.src/app/shared/components/personal-card-transaction/personal-card-transaction.component.ts (13)
3-3
: Aaha, we have the correct import!
ImportingPlatformPersonalCardTxn
fits perfectly like a glove!
11-11
: Mind it! Transaction property is strong.
Declaringtransaction
asPlatformPersonalCardTxn
is neat.
13-13
: Typing the date is always wise!
@Input() previousTxnDate: Date;
is good for clarity.
23-23
: Event emitter looks great!
@Output() setMultiselectMode
is straightforward and strong.
25-25
: Another output to celebrate!
cardClickedForSelection
is well-defined, thalaiva.
29-29
: Currency property introduced!
No issues spotted kabali. This is good.
31-31
: SelectAll set to false.
Simplifies your flow from the start, superstar!
33-34
: Getter function is spot on!
isSelected
checkingtransaction.id
is nice.
38-38
: Currency assignment
UsinggetCurrencySymbol(this.transaction.currency, 'wide')
is crisp.
44-44
: Method signature looks good
onSetMultiselectMode(): void
is thoroughly typed.
46-46
: Check transaction existence
Emittingthis.transaction.id
is straightforward. Just ensurethis.transaction
is defined, boss.
50-50
: Method typed well
onTapTransaction(): void
maintains code clarity.
52-52
: Emit away, thala!
this.cardClickedForSelection.emit(this.transaction.id);
properly triggers the event.src/app/fyle/personal-cards-matched-expenses/expense-preview/expense-preview.component.ts (2)
4-4
: Ha! Additional operators imported
finalize, map
are perfect for your piping strategy, superstar.
42-42
: Constructor param is well placed
UsingExpensesService
keeps the code consistent.src/app/shared/components/personal-card-transaction/personal-card-transaction.component.spec.ts (8)
12-12
: Mock data import is splendid
platformPersonalCardTxns
is your champion test data.
35-36
: Assigning transaction and selected elements
Very good approach, boss. Keeps the test setup robust.
52-52
: Chumma checking date differences
Using'1970-01-01T00:00:00.000Z'
for verifying date logic is classic.
58-58
: Ensuring same date scenario
SettingpreviousTxnDate
tospent_at
is a cunning test, superstar!
85-85
: Switching to another transaction
AssigningplatformPersonalCardTxns.data[2]
checks the isSelected logic.
94-94
: Date checks for the future
Expecting'Sep 22, 2024'
. Rajini style unstoppable.
125-125
: Amount display test
Asserting'200.00'
is correct.
134-134
: Vendor name
Checks'mocha'
is displayed, solra Marana mass.src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.spec.ts (6)
6-6
: Aiyyo! Good show referencing platformPersonalCardTxns here.
This update shifts data sources smoothly. Nothing else to add, superstar!
16-18
: Superb imports for expense and suggestions, boss!
All references seem consistent with the new data model.
90-90
: Thalaiva! The usage of.matched-expenses--purpose
is neat.
No issues spotted.
94-94
: Aiyyo! The date is changed to 'Sep 22, 2024'?
Double-check all references to ensure consistent date usage across tests.
112-112
: Opening expense preview with personalCard info makes sense, boss!
This flow is streamlined. Great move!
143-144
: Marana mass usage of 'card' and 'cardTxnId'!
This clearly shows ID references in the modal. All good here, superstar!src/app/fyle/personal-cards/personal-cards.page.spec.ts (33)
25-25
: Aiyyo, I see you imported platformPersonalCardTxns.
Code alignment looks spot-on, thambi!
44-44
: platformPersonalCardTxnExpenseSuggestionsRes import is top class!
All references remain consistent.
277-277
: postBankAccounts usage is simpler now, boss!
No additional parameters, nice cleanup.
281-281
: Right here, you call component.postAccounts().
Check if there's any missing error fallback. A short test might help.
286-286
: Mighty usage of .next with loadCardData$.
This is a direct and clean approach.
308-308
: postBankAccounts for multiple cards, good job!
All looks consistent with single-card logic, thalaiva!
312-312
: component.postAccounts invoked again, ensure no duplication
But you handle multiple cards gracefully. Great, superstar!
317-317
: The test verifies success message.
Be sure to test negative or partial success scenarios as well.
346-346
: 'onCardChanged' is using 'state: in.(INITIALIZED)' - Well-coded!
No issues, style is robust.
361-361
: Check for the null queryParams condition, well done, boss!
No duplicates, no fuss.
414-414
: Segment changed to INITIALIZED.
Attaching proper state param is well-handled.
432-432
: The queryParams usage with'state': 'in.(INITIALIZED)'
is clear as day!
Works like a charm, superstar!
475-475
: fetchNewTransactions sets selection mode off.
Heads up: consider verifying concurrency if multiple fetch calls overlap.
528-528
: 'switchSelectionMode' checks for transaction type.
No major concerns, style is good!
540-540
: toggleExpense is triggered with 'btxnMy43OZokde'?
All correct, super style.
574-574
: component.selectedElements is updated with platformPersonalCardTxns.data[0].id
All hail the straightforward approach, thalaiva!
691-691
: createExpense method references platformPersonalCardTxns.
No trouble spotted, big man!
694-695
: 'amount' and '2024-09-22' are used for getMatchedExpensesSuggestions.
Ensure the date is correct for your environment.
706-706
: Setting selectedAccount with linkedAccounts[0].
Ensure it matches the user’s actual selected card in all scenarios.
710-710
: You fetch personalCardsService.getMatchedExpensesSuggestions.
Ok done, no further issues found, flamboyant one!
713-713
: Sending user to matched expenses page.
Tidy approach, robust for quick navigation.
716-717
: The same date and amount are used again.
Double-check if your date format is also recognized in real code.
721-723
: State has personalCard, txnDetails, expenseSuggestions.
Spreading those arrays is an effective approach, superstar!
732-732
: Exiting if 'loadingMatchedExpenseCount' is true.
This short-circuit logic is quite helpful.
742-742
: openExpensePreview called with the second data element.
Neatly done. Watch out for potential undefined issues if array changes.
749-749
: You inject your modalProperties for the expense preview.
Good pattern, no issues.
764-766
: ExpensePreviewComponent uses card, cardTxnId, 'type' = 'edit'.
Everything is in order, thalaiva!
793-797
: The generateDateParams usage is thorough.
Double-check boundary conditions for date range.
819-819
: Another usage of generateDateParams with custom range.
No further remarks, well-coded.
838-838
: platformPersonalCardTxns usage again, boss!
Ensures consistent data handling.
995-995
: transactions$ references platformPersonalCardTxns.data.
Here you check isInfiniteScrollRequired$. Good synergy.
1025-1028
: Aiyyo! loadPersonalTxns with extended queries is thorough.
No big concerns.
1057-1057
: Spy on 'loadPersonalTxns' returning platformPersonalCardTxns.data.
Integration is well tested, boss.src/app/fyle/add-edit-expense/add-edit-expense-4.spec.ts (7)
16-16
: Aiyyo, nice shift to platformPersonalCardTxns.
The reference is spot-on, boss!
611-611
: You set personalCardTxn param from platformPersonalCardTxns.
All good, ensures we handle the new structure.
615-615
: The matchExpense call returns external_expense_id.
This is a good shift from the olderid
usage.
663-663
: Again, matchExpense returning external_expense_id.
Consistent with the new approach, superstar.
717-717
: The same external_expense_id usage, top style!
No improvement needed.
775-775
: Working offline but still returning external_expense_id.
Double-check for conflict resolution upon reconnection.
822-822
: More external_expense_id usage, all consistent.
Yes, good job, flamboyant friend!src/app/fyle/add-edit-expense/add-edit-expense.page.ts (3)
66-66
: Mind it! New import statement for platform models!The import of PlatformPersonalCardTxn shows your commitment to modernization, just like how I upgrade my style with each movie!
1362-1362
: Kabali da! Critical transformation of personal card transaction handling!The code now uses PlatformPersonalCardTxn instead of the old model, and properly extracts transaction details like spent_at, currency, amount, merchant and description. This is how you handle change - with style!
Also applies to: 1414-1419
5066-5072
: Thalaiva style code transformation!The personal cards matching logic has been upgraded to use platform APIs. When you match an expense with a personal card transaction, you do it with swagger!
- this.personalCardsService.matchExpense(txn.id, externalExpenseId) + this.personalCardsService.matchExpense(txn.split_group_id, externalExpenseId)src/app/core/mock-data/get-tasks-query-params-with-filters.data.ts (1)
4-4
: Mind it! Platform model upgrade with style!The transformation is complete! Just like how I make grand entrances, this code makes a grand shift to platform models:
- New import of PlatformPersonalCardFilterParams - that's how we roll!
- Updated type for personalCardQueryParamFiltersData - precision is my style
- New query params structure with state and personal_card_id - clean and powerful!
- export const personalCardQueryParamFiltersData: Partial<GetTasksQueryParamsWithFilters> + export const personalCardQueryParamFiltersData: Partial<PlatformPersonalCardFilterParams>Also applies to: 36-36, 40-41
src/app/shared/components/personal-card-transaction/personal-card-transaction.component.html (1)
3-3
: Superstar approves these property changes!The migration from individual properties to using the transaction object properties makes the code more organized than my perfectly combed hair!
Also applies to: 23-23, 37-37, 43-44
src/app/fyle/personal-cards-matched-expenses/personal-cards-matched-expenses.page.html (1)
18-18
: These property changes are as smooth as my signature walk!The refactoring from btxn_ prefixed properties to cleaner names makes the code more readable than my famous dialogues!
Also applies to: 28-28, 34-34, 40-41
src/app/fyle/personal-cards/personal-cards.page.html (1)
195-195
: Mind-blowing transformation! But let's verify one thing, partner!The consolidation of multiple properties into a single transaction object is as powerful as my punch dialogues! However, we should verify the component's lifecycle hooks handle this change gracefully.
Also applies to: 197-197
✅ Verification successful
Mind-blowing news, my friend! The component is as solid as my style! 😎
The component handles the transaction object with the grace of a perfectly choreographed fight scene! The ngOnInit implementation is doing a fantastic job, just like how I handle my stunts - no doubles needed! Since there are no complex property dependencies, we don't even need ngOnChanges. Everything is perfectly balanced, like my signature walk!
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Check if the component properly handles the transaction object in lifecycle hooks ast-grep --pattern 'class PersonalCardTransactionComponent { $$$ ngOnChanges($changes) { $$$ } $$$ }'Length of output: 115
Script:
#!/bin/bash # Find the personal card transaction component file fd -e ts "personal-card-transaction.component.ts" # If found, let's see its contents fd -e ts "personal-card-transaction.component.ts" -x cat {}Length of output: 1805
src/app/fyle/personal-cards/personal-cards.page.ts (2)
31-31
: Mind-blowing type safety improvements, partner!The migration to platform-specific models (
PlatformPersonalCardTxn
,PlatformPersonalCardFilterParams
,PlatformPersonalCardTxnState
) enhances type safety. This is the way!Also applies to: 58-59
Line range hint
747-782
: Superb state management, thalaiva! 🌟The method handles loading states properly and uses strong typing with platform-specific models. The flow control with early returns is clean and efficient.
src/app/core/services/personal-cards.service.spec.ts (1)
Line range hint
78-1025
: These tests are as solid as my punch dialogues! 💪The test suite is comprehensive and well-structured:
- Clear test descriptions
- Good coverage of edge cases
- Proper use of mock data
- Platform-specific type validations
Keep rocking with these quality tests!
src/app/fyle/add-edit-expense/add-edit-expense-3.spec.ts (2)
38-38
: Aiyyo, fresh import patthu!This
platformPersonalCardTxns
import is a neat replacement, boss. Just confirm that the rest of the file uses it properly, so everything syncs finely.
1501-1501
: Double-check param usage, thalaiva!Assigning
activatedRoute.snapshot.params.personalCardTxn
fromplatformPersonalCardTxns.data[0]
is powerful. Make sure no old references to the removed model remain, dai.src/app/core/mock-data/unflattened-txn.data.ts (1)
1376-1376
: Mocha purpose, super choice!Changing the purpose to 'mocha' is stylish. Confirm your tests align with this new purpose so no confusion arises.
@@ -563,7 +351,7 @@ export class PersonalCardsService { | |||
} | |||
|
|||
generateCustomDateParams( | |||
newQueryParams: { ba_id?: string; btxn_status?: string; or?: string[] }, | |||
newQueryParams: Partial<PlatformPersonalCardQueryParams>, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Custom Date Param, Macha!
Ensure no overlap between this method and the named date filters. But all good.
this.personalCardsService | ||
.matchExpense(this.expenseId, this.cardTxnId) | ||
.pipe(finalize(() => (this.loading = false))) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Separate assignment from expression
Avoid confusion, boss. Let's refactor so we don't assign this.loading
in the finalize
expression.
Apply this diff to clarify:
- .pipe(finalize(() => (this.loading = false)))
+ .pipe(
+ finalize(() => {
+ this.loading = false;
+ })
+ )
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
this.personalCardsService | |
.matchExpense(this.expenseId, this.cardTxnId) | |
.pipe(finalize(() => (this.loading = false))) | |
this.personalCardsService | |
.matchExpense(this.expenseId, this.cardTxnId) | |
.pipe( | |
finalize(() => { | |
this.loading = false; | |
}) | |
) |
🧰 Tools
🪛 Biome (1.9.4)
[error] 65-65: The assignment should not be in an expression.
The use of assignments in expressions is confusing.
Expressions are often considered as side-effect free.
(lint/suspicious/noAssignInExpressions)
external_expense_id: 'tx3nHShG60zq', | ||
transaction_split_group_id: 'tx3nHShG60zq', | ||
}; | ||
const usePlatformApi = false; | ||
component.expenseId = 'testExpenseId'; | ||
component.cardTxnId = 'testCardTxnId'; | ||
personalCardsService.matchExpense.and.returnValue(of(response)); | ||
|
||
component.matchExpense(); | ||
expect(component.loading).toBeFalsy(); | ||
|
||
expect(personalCardsService.matchExpense).toHaveBeenCalledWith('testExpenseId', 'testCardTxnId', usePlatformApi); | ||
expect(personalCardsService.matchExpense).toHaveBeenCalledWith('testExpenseId', 'testCardTxnId'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Aiyyo! Your matchExpense test is rocking, but let's ensure we handle errors too, thalaiva!
Consider verifying the failure scenario to ensure robust coverage.
Would you like a snippet to simulate an error thrown by personalCardsService.matchExpense
and test how your component handles it?
extras: { | ||
state: { | ||
personalCard: linkedAccounts[0], | ||
txnDetails: platformPersonalCardTxns.data[0], | ||
expenseSuggestions: [platformExpenseWithExtractedData, ...platformPersonalCardTxnExpenseSuggestionsRes.data], | ||
}, | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Data property is well organized, but watch for future expansions!
If more fields slip in, consider a typed interface for better maintainability.
@@ -223,7 +215,7 @@ describe('PersonalCardsPage', () => { | |||
component.isConnected$ = of(true); | |||
component.linkedAccounts$ = of(linkedAccounts); | |||
component.transactionsCount$ = of(2); | |||
component.transactions$ = of([apiPersonalCardTxnsRes.data[0]]); | |||
component.transactions$ = of([platformPersonalCardTxns.data[0]]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
component.transactions$ is set with platformPersonalCardTxns.data - Awesome!
No glaring issues, testing coverage might check offline scenarios.
@@ -1046,7 +1037,7 @@ | |||
it('should load personal cards without params', (done) => { | |||
activatedRoute.snapshot.queryParams.filters = null; | |||
personalCardsService.getBankTransactionsCount.and.returnValue(of(0)); | |||
personalCardsService.getBankTransactions.and.returnValue(of({ ...apiPersonalCardTxnsRes, data: [] })); | |||
personalCardsService.getBankTransactions.and.returnValue(of({ ...platformPersonalCardTxns, data: [] })); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
No filters for personal cards, returning empty array.
Ensure user sees a helpful UI for zero results, super star!
@@ -844,8 +835,7 @@ export function TestCases4(getTestBed) { | |||
expect(transactionService.upsert).toHaveBeenCalledOnceWith(unflattenedTransactionDataPersonalCard.tx); | |||
expect(personalCardsService.matchExpense).toHaveBeenCalledOnceWith( | |||
unflattenedTransactionDataPersonalCard.tx.split_group_id, | |||
apiPersonalCardTxnsRes.data[0].btxn_id, | |||
usePlatformApi | |||
platformPersonalCardTxns.data[0].id |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Upserting with external_expense_id in offline scenario.
Consider potential merges if expense is updated multiple times.
</div> | ||
|
||
<!-- Amount --> | ||
<div class="personal-card-transaction--currency-amount-container"> | ||
<span | ||
class="personal-card-transaction--currency" | ||
[ngClass]="{ ' personal-card-transaction--green': type === 'credit' }" | ||
[ngClass]="{ ' personal-card-transaction--green': transaction.transactionType === 'credit' }" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Mind it! Let's simplify these repeated transaction type checks, partner!
I see you're checking transaction.transactionType === 'credit'
three times for styling. Let's create a CSS class and use it once, making our code as stylish as my stunts!
+ .transaction-credit {
+ color: var(--success);
+ }
- [ngClass]="{ ' personal-card-transaction--green': transaction.transactionType === 'credit' }"
+ [ngClass]="{ 'transaction-credit': transaction.transactionType === 'credit' }"
Also applies to: 35-35, 41-41
</div> | ||
</div> | ||
</div> | ||
<div class="matched-expenses--date">{{txnDetails.btxn_transaction_dt | date: 'MMM dd, YYYY'}}</div> | ||
<div class="matched-expenses--date">{{txnDetails.spent_at | date: 'MMM dd, YYYY'}}</div> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Style check! Let's make the date format more maintainable, machan!
Instead of hardcoding the date format, let's move it to a constant. That way, we can change it in one place, just like how I change my style in every movie!
// In your component file
readonly DATE_FORMAT = 'MMM dd, YYYY';
// In your template
{{ txnDetails.spent_at | date: DATE_FORMAT }}
@@ -228,19 +230,16 @@ export class PersonalCardsPage implements OnInit, AfterViewInit { | |||
} else { | |||
queryParams = params.queryParams as Record<string, string>; | |||
} | |||
queryParams = this.apiV2Service.extendQueryParamsForTextSearch(queryParams as {}, params.searchString); | |||
return this.personalCardsService.getBankTransactionsCount(queryParams, this.usePlatformApi).pipe( | |||
queryParams = this.apiV2Service.extendQueryParamsForTextSearch(queryParams as {}, params.searchString, true); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Watch out! Empty object type ahead!
Replace {}
with a proper type definition to maintain type safety.
-queryParams = this.apiV2Service.extendQueryParamsForTextSearch(queryParams as {}, params.searchString, true);
+queryParams = this.apiV2Service.extendQueryParamsForTextSearch(queryParams as Record<string, unknown>, params.searchString, true);
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
queryParams = this.apiV2Service.extendQueryParamsForTextSearch(queryParams as {}, params.searchString, true); | |
queryParams = this.apiV2Service.extendQueryParamsForTextSearch(queryParams as Record<string, unknown>, params.searchString, true); |
🧰 Tools
🪛 Biome (1.9.4)
[error] 233-233: Don't use '{}' as a type.
Prefer explicitly define the object shape. '{}' means "any non-nullable value".
(lint/complexity/noBannedTypes)
c3dd8b7
into
remove-old-personal-card-model-ii
* delete personal_card.model.ts and places where it was used * fix: remove model PersonalCardTxnExpenseSuggestion (#3399) * fix: remove model PersonalCardTxnExpenseSuggestion * fix: transform personal card public queryParams to platform (#3400) * fix: transform personal card public queryParams to platform * fix: remove use of old PersonalCardTxn model (#3401) * remove use of old PersonalCardTxn model * delete public PersonalCardTxn model and corresponding ldFlag (#3402)
* fix: remove old getPersonalCardsCount method * remove old getPersonalCards method * replace use of PersonalCard model with PlatformPersonalCard * fix: delete personal_card.model.ts and places where it was used (#3398) * delete personal_card.model.ts and places where it was used * fix: remove model PersonalCardTxnExpenseSuggestion (#3399) * fix: remove model PersonalCardTxnExpenseSuggestion * fix: transform personal card public queryParams to platform (#3400) * fix: transform personal card public queryParams to platform * fix: remove use of old PersonalCardTxn model (#3401) * remove use of old PersonalCardTxn model * delete public PersonalCardTxn model and corresponding ldFlag (#3402)
* fix: remove old getPersonalCardsCount method * remove old getPersonalCards method * replace use of PersonalCard model with PlatformPersonalCard * fix: delete personal_card.model.ts and places where it was used (#3398) * delete personal_card.model.ts and places where it was used * fix: remove model PersonalCardTxnExpenseSuggestion (#3399) * fix: remove model PersonalCardTxnExpenseSuggestion * fix: transform personal card public queryParams to platform (#3400) * fix: transform personal card public queryParams to platform * fix: remove use of old PersonalCardTxn model (#3401) * remove use of old PersonalCardTxn model * delete public PersonalCardTxn model and corresponding ldFlag (#3402)
Clickup
https://app.clickup.com/t/86cx8awnu
Code Coverage
Please add code coverage here
UI Preview
Please add screenshots for UI changes
Summary by CodeRabbit
Type Changes
PersonalCardTxnExpenseSuggestion
interface.Expense
type instead of previous suggestion type.API and Service Updates
getMatchedExpensesSuggestions
method to returnExpense[]
.usePlatformApi
parameter from method calls, streamlining API interactions.Component Changes
ExpenseCardLiteComponent
andPersonalCardTransactionComponent
to work with newExpense
andPlatformPersonalCardTxn
types.Mock Data
platform
prefixed data.