Skip to content

Commit

Permalink
feat(com/order-list): new state config
Browse files Browse the repository at this point in the history
  • Loading branch information
AliMD committed Mar 17, 2023
1 parent f7db30b commit c7c5423
Showing 1 changed file with 55 additions and 44 deletions.
99 changes: 55 additions & 44 deletions uniquely/com-pwa/src/ui/page/order-list.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ import {
} from '@alwatr/element';
import {message} from '@alwatr/i18n';
import {redirect} from '@alwatr/router';
import {requestableContextConsumer} from '@alwatr/signal';
import {Order} from '@alwatr/type/customer-order-management.js';
import '@alwatr/ui-kit/button/button.js';
import {IconBoxContent} from '@alwatr/ui-kit/card/icon-box.js';

import {fetchOrderStorage} from '../../manager/context-provider/order-storage.js';
import {orderStorageContextConsumer, topAppBarContextProvider} from '../../manager/context.js';
import {topAppBarContextProvider} from '../../manager/context.js';
import '../stuff/order-list.js';

import type {AlwatrDocumentStorage, ClickSignalType} from '@alwatr/type';
Expand All @@ -27,7 +27,11 @@ declare global {
}
}

export const buttons = {
const orderStorageContextConsumer = requestableContextConsumer.bind<AlwatrDocumentStorage<Order>>(
'order-storage-context',
);

const buttons = {
backToHome: {
icon: 'arrow-back-outline',
flipRtl: true,
Expand Down Expand Up @@ -64,7 +68,7 @@ export class AlwatrPageOrderList extends UnresolvedMixin(LocalizeMixin(SignalMix
transform: opacity var(--sys-motion-duration-small);
}
:host([state=reloading]) alwatr-order-list {
:host([state='reloading']) alwatr-order-list {
opacity: var(--sys-surface-disabled-opacity);
}
`;
Expand All @@ -80,48 +84,61 @@ export class AlwatrPageOrderList extends UnresolvedMixin(LocalizeMixin(SignalMix
entry: (): void => {
this.gotState = this._stateMachine.state.target;
},
on: {
},
on: {},
},
pending: {
entry: (): void => {
this._logger.logMethod('state.pending.entry');
if (orderStorageContextConsumer.getValue() == null) {
fetchOrderStorage();
}
if (this._stateMachine.context.orderStorage != null) {
this._stateMachine.transition('LOADED_SUCCESS');
const orderContext = orderStorageContextConsumer.getValue();
if (orderContext.state === 'initial') {
orderStorageContextConsumer.request(null);
}
},
on: {
LOADED_SUCCESS: {
context_request_initial: {},
context_request_pending: {},
context_request_error: {
target: 'contextError',
},
context_request_complete: {
target: 'list',
},
context_request_reloading: {
target: 'reloading',
},
},
},
contextError: {
on: {
request_context: {
target: 'pending',
actions: (): void => orderStorageContextConsumer.request(null),
},
},
},
list: {
on: {
REQUEST_UPDATE: {
request_context: {
target: 'reloading',
actions: this._requestUpdateAction,
actions: (): void => orderStorageContextConsumer.request(null),
},
},
},
reloading: {
on: {
LOADED_SUCCESS: {
context_request_error: {
target: 'list',
actions: (): void => alert('context_request_error'),
},
context_request_complete: {
target: 'list',
},
// LOAD_FAILED: {
// target: 'list',
// },
},
},
},
signalList: [
{
signalId: buttons.reload.clickSignalId,
transition: 'REQUEST_UPDATE',
transition: 'request_context',
},
{
signalId: buttons.newOrder.clickSignalId,
Expand All @@ -135,15 +152,10 @@ export class AlwatrPageOrderList extends UnresolvedMixin(LocalizeMixin(SignalMix
signalId: buttons.orderDetail.clickSignalId,
actions: (event: ClickSignalType<Order>): void => {
redirect({
sectionList: ['order-detail', (event as ClickSignalType<Order>).detail.id],
sectionList: ['order-detail', event.detail.id],
});
},
},
{
signalId: orderStorageContextConsumer.id,
transition: 'LOADED_SUCCESS',
contextName: 'orderStorage',
},
],
});

Expand All @@ -153,6 +165,15 @@ export class AlwatrPageOrderList extends UnresolvedMixin(LocalizeMixin(SignalMix
override connectedCallback(): void {
super.connectedCallback();

this._signalListenerList.push(
orderStorageContextConsumer.subscribe(
(context) => {
this._stateMachine.transition(`context_request_${context.state}`, {orderStorage: context.content});
},
{receivePrevious: 'NextCycle'},
),
);

topAppBarContextProvider.setValue({
headlineKey: 'page_order_list_headline',
startIcon: buttons.backToHome,
Expand All @@ -163,7 +184,7 @@ export class AlwatrPageOrderList extends UnresolvedMixin(LocalizeMixin(SignalMix
override render(): unknown {
this._logger.logMethod('render');
return this._stateMachine.render({
'pending': () => {
pending: () => {
const content: IconBoxContent = {
tinted: 1,
icon: 'cloud-download-outline',
Expand All @@ -172,29 +193,19 @@ export class AlwatrPageOrderList extends UnresolvedMixin(LocalizeMixin(SignalMix
return html`<alwatr-icon-box .content=${content}></alwatr-icon-box>`;
},

'reloading': 'list',
contextError: () => {
// TODO: update me with alwatr-icon-box and retry button
return 'error!';
},

reloading: 'list',

'list': () => {
list: () => {
return html`<alwatr-order-list
.content=${this._stateMachine.context.orderStorage}
.orderClickSignalId=${buttons.orderDetail.clickSignalId}
></alwatr-order-list>`;
},
});
}

private async _requestUpdateAction(): Promise<void> {
topAppBarContextProvider.setValue({
headlineKey: 'loading',
startIcon: buttons.backToHome,
endIconList: [buttons.newOrder, buttons.reload],
});
await fetchOrderStorage();
topAppBarContextProvider.setValue({
headlineKey: 'page_order_list_headline',
startIcon: buttons.backToHome,
endIconList: [buttons.newOrder, buttons.reload],
});
this._stateMachine.transition('LOADED_SUCCESS');
}
}

0 comments on commit c7c5423

Please sign in to comment.