-
Notifications
You must be signed in to change notification settings - Fork 40
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
Improved: Order detail page on the open tab (#283) #302
Merged
Merged
Changes from 21 commits
Commits
Show all changes
27 commits
Select commit
Hold shift + click to select a range
428740b
Implemented: Mobile-Responsive Order Detail Page UI with Order Items …
sanskar345 eb2a5fd
Implemented: Order Detail Page UI, inspired by Job Manager app (#283)
sanskar345 dda48c5
Implemented: alphabatical ordering of export components and imports a…
sanskar345 ba26058
Implemented: option in setting to allow partial order rejection and c…
sanskar345 8b79775
Implemented: order item rejection history modal and report an issue m…
sanskar345 21869d8
Fixed: error while refreshing order detail page (#283)
sanskar345 2c85db2
Implemented: comment the code to display text below the reject order …
sanskar345 68dfd0a
Implemented: logic for showing user the status of the current order i…
sanskar345 2d531d3
Implemented logic to reject single item in an order (#283)
sanskar345 72c3cf7
Improved: logic to reject single item in an order (#283)
sanskar345 df0ae34
Implemented: entries in locale files (#283)
sanskar345 4f59112
Improved: code by removing the unwanted lines (#283)
sanskar345 e997b7c
Implemented: logic to fetch orderItemHistory and reject reasons and c…
sanskar345 53d6883
Improved: order detail page UI using css grid, removed the the usage …
sanskar345 b5b2ca3
Implemented: entries in locale files for partial order rejection card…
sanskar345 4c3b8d1
Implemented: display order item rejection history (#283)
sanskar345 11273ca
Improved: order detail page css - placing the grid item (#283)
sanskar345 9826ba9
Implemented: logic to fetch products that exist in order item rejecti…
sanskar345 228e81e
Improved: reject order alert heading and button label (#283)
sanskar345 a19a276
Implemented: show alert before rejecting a single item (#283)
sanskar345 4b3e6e0
Improved: code and indentation (#283)
sanskar345 b81152c
Implemented: service to reject a single order item (#283)
sanskar345 3368b32
Improved: code and removed conditions that are unnecessary (#283)
sanskar345 4817eef
Improved: the placement of empty states css code in variables.css (#283)
sanskar345 2d32058
Merge branch 'main' of https://github.com/hotwax/bopis into bopis/#283
sanskar345 2f7a6cb
Implemented: do not dispatch stock/addProducts action while dispatchi…
sanskar345 a3f2c89
Implemented: modal to select reject reason before rejecting an order …
sanskar345 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
<template> | ||
<ion-header> | ||
<ion-toolbar> | ||
<ion-buttons slot="start"> | ||
<ion-button @click="closeModal"> | ||
<ion-icon slot="icon-only" :icon="closeOutline" /> | ||
</ion-button> | ||
</ion-buttons> | ||
<ion-title>{{ $t("Order item rejection history") }}</ion-title> | ||
</ion-toolbar> | ||
</ion-header> | ||
<ion-content> | ||
<ion-list v-for="(history, index) in rejectionHistory" :key="index"> | ||
<ion-item> | ||
<ion-thumbnail slot="start"> | ||
<ShopifyImg :src="getProduct(history.productId).mainImageUrl" size="small" /> | ||
</ion-thumbnail> | ||
<ion-label> | ||
<h5>{{ getProduct(history.productId).brandName }}</h5> | ||
<h2>{{ getProduct(history.productId).productName }}</h2> | ||
<p v-if="$filters.getFeature(getProduct(history.productId).featureHierarchy, '1/COLOR/')">{{ $t("Color") }}: {{ $filters.getFeature(getProduct(history.productId).featureHierarchy, '1/COLOR/') }}</p> | ||
<p v-if="$filters.getFeature(getProduct(history.productId).featureHierarchy, '1/SIZE/')">{{ $t("Size") }}: {{ $filters.getFeature(getProduct(history.productId).featureHierarchy, '1/SIZE/') }}</p> | ||
</ion-label> | ||
<ion-label slot="end" class="ion-text-right"> | ||
<h2>{{ getRejectReasonDescription(history?.changeReasonEnumId) }}</h2> | ||
<p>{{ history?.changeUserLogin }}</p> | ||
<p>{{ getTime(history.changeDatetime) }}</p> | ||
</ion-label> | ||
</ion-item> | ||
</ion-list> | ||
|
||
<!-- Empty state --> | ||
<div v-if="!rejectionHistory.length && !isLoading" class="empty-state"> | ||
<p>{{ $t('No records found.') }}</p> | ||
</div> | ||
</ion-content> | ||
</template> | ||
|
||
<script lang="ts"> | ||
import { | ||
IonButton, | ||
IonButtons, | ||
IonContent, | ||
IonHeader, | ||
IonIcon, | ||
IonItem, | ||
IonThumbnail, | ||
IonLabel, | ||
IonList, | ||
IonTitle, | ||
IonToolbar, | ||
modalController | ||
} from '@ionic/vue'; | ||
import { defineComponent } from 'vue'; | ||
import { closeOutline } from 'ionicons/icons'; | ||
import { mapGetters, useStore } from "vuex"; | ||
import { DateTime } from 'luxon'; | ||
|
||
export default defineComponent({ | ||
name: "OrderItemRejHistoryModal", | ||
components: { | ||
IonButton, | ||
IonButtons, | ||
IonContent, | ||
IonHeader, | ||
IonIcon, | ||
IonItem, | ||
IonThumbnail, | ||
IonLabel, | ||
IonList, | ||
IonTitle, | ||
IonToolbar, | ||
}, | ||
data () { | ||
return { | ||
isLoading: true | ||
} | ||
}, | ||
computed: { | ||
...mapGetters({ | ||
getProduct: 'product/getProduct', | ||
order: "order/getCurrent", | ||
rejectReasons: 'util/getRejectReasons', | ||
rejectionHistory: 'order/getOrderItemRejectionHistory' | ||
}) | ||
}, | ||
async mounted() { | ||
await this.store.dispatch('order/getOrderItemRejHistory', { orderId: this.order.orderId, rejectReasonEnumIds: this.rejectReasons.reduce((enumIds: [], reason: any) => [...enumIds, reason.enumId], []) }); | ||
this.isLoading = false; | ||
}, | ||
methods: { | ||
closeModal() { | ||
modalController.dismiss({ dismissed: true }); | ||
}, | ||
getRejectReasonDescription(rejectReasonEnumId: string) { | ||
return this.rejectReasons.find((reason: any) => reason.enumId === rejectReasonEnumId)?.description; | ||
}, | ||
getTime(time: number) { | ||
return DateTime.fromMillis(time).toLocaleString(DateTime.DATETIME_MED) | ||
} | ||
}, | ||
setup() { | ||
const store = useStore(); | ||
|
||
return { | ||
closeOutline, | ||
store | ||
}; | ||
}, | ||
}); | ||
</script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,133 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<template> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-header> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-toolbar> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-buttons slot="start"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-button @click="closeModal"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-icon slot="icon-only" :icon="closeOutline" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</ion-button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</ion-buttons> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-title>{{ $t("Report an issue") }}</ion-title> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</ion-toolbar> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</ion-header> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-content> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-item lines="none"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<p>{{ $t('On rejecting this item, will be sent an email with alternate fulfillment options and this order item will be removed from your dashboard.', { customerName: order?.customer?.name }) }}</p> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</ion-item> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-list> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-list-header>{{ $t("Select reason") }}</ion-list-header> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-radio-group v-model="rejectReasonId"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-item v-for="reason in unfillableReasons" :key="reason.id"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-radio slot="start" :value="reason.id"/> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-label>{{ $t(reason.label) }}</ion-label> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</ion-item> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</ion-radio-group> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</ion-list> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-fab vertical="bottom" horizontal="end" slot="fixed"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-fab-button :disabled="!rejectReasonId" @click="confirmSave()"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ion-icon :icon="saveOutline" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</ion-fab-button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</ion-fab> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</ion-content> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</template> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<script lang="ts"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
alertController, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonButton, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonButtons, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonContent, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonFab, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonFabButton, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonHeader, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonIcon, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonItem, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonLabel, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonList, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonListHeader, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonTitle, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonToolbar, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
modalController, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonRadio, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonRadioGroup | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} from '@ionic/vue'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { defineComponent } from 'vue'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { closeOutline, saveOutline } from 'ionicons/icons'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { mapGetters, useStore } from 'vuex' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
export default defineComponent({ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: "ReportAnIssueModal", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
components: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonButton, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonButtons, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonContent, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonFab, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonFabButton, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonHeader, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonIcon, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonItem, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonLabel, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonList, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonListHeader, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonTitle, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonToolbar, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonRadio, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IonRadioGroup | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
props: ['item'], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
data () { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
unfillableReasons: JSON.parse(process.env.VUE_APP_UNFILLABLE_REASONS), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rejectReasonId: '' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
computed: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
...mapGetters({ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
order: "order/getCurrent", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
getProduct: 'product/getProduct', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
methods: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
closeModal() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
modalController.dismiss({ dismissed: true }); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
async confirmSave () { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const alert = await alertController | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.create({ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
header: this.$t('Reject Order Item'), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// TODO: Show primary identifier in message instead of productName when product identifier functionality implemented in the app. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
message: this.$t('will be removed from your dashboard. This action cannot be undone.', { productName: this.getProduct(this.item.productId)?.productName, space: '<br /><br />' }), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
buttons: [{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
text: this.$t('Cancel'), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
role: 'cancel' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
text: this.$t('Reject'), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
handler: () => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
this.store.dispatch('order/setUnfillableOrderOrItem', { orderId: this.order.orderId, part: { ...this.order.part, items: [{ ...this.item, reason: this.rejectReasonId }] } }).then((resp) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (resp) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// creating an current order copy by removing the selected item from the order.part | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const order = { ...this.order, part: { ...this.order.part, items: this.order.part.items.filter((item: any) => !(item.orderItemSeqId === this.item.orderItemSeqId && item.productId === this.item.productId)) } }; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// If this is the last item of the order then the order is fully rejected | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (this.order.part.items.length === 1) order.rejected = true; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
this.store.dispatch('order/updateCurrent', { order }); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
this.closeModal(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return alert.present(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setup() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const store = useStore(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
closeOutline, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
saveOutline, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
store | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
We need to define for loop on the ion-item instead of defining it on ion-list