@lipagas/storefront-engine
Version:
Headless Commerce & Marketplace Extension for Fleetbase
79 lines (66 loc) • 2.31 kB
JavaScript
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { inject as controller } from '@ember/controller';
import { action, computed, get } from '@ember/object';
import { task } from 'ember-concurrency-decorators';
export default class CustomerPanelOrdersComponent extends Component {
store;
storefront;
fetch;
intl;
appCache;
modalsManager;
contextPanel;
isLoading = true;
orders = [];
customer;
orderDetailsController;
get title() {
return this.args.title ?? this.intl.t('storefront.component.widget.orders.widget-title');
}
constructor() {
super(...arguments);
this.customer = this.args.customer;
this.reloadOrders.perform();
}
*reloadOrders(params = {}) {
this.orders = yield this.fetchOrders(params);
}
fetchOrders(params = {}) {
this.isLoading = true;
return new Promise((resolve) => {
const storefront = get(this.storefront, 'activeStore.public_id');
if (!storefront || !this.customer?.id) {
this.isLoading = false;
return resolve([]);
}
const queryParams = {
storefront,
limit: 25,
sort: '-created_at',
customer_uuid: this.customer?.id,
...params,
};
this.fetch
.get('orders', queryParams, {
namespace: 'storefront/int/v1',
normalizeToEmberData: true,
})
.then((orders) => {
this.isLoading = false;
resolve(orders);
})
.catch(() => {
this.isLoading = false;
resolve(this.orders);
});
});
}
search(event) {
this.reloadOrders.perform({ query: event.target.value ?? '' });
}
async viewOrder(order) {
this.contextPanel.focus(order, 'viewing');
}
}