@social-mail/social-mail-client 1.2.210 → 1.2.211
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/AdminAppIndex.pack.js +935 -30
- package/dist/admin/AdminAppIndex.pack.js.map +1 -1
- package/dist/admin/AdminAppIndex.pack.min.js +16 -12
- package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
- package/dist/admin/commands/AdminCommands.d.ts +1 -0
- package/dist/admin/commands/AdminCommands.d.ts.map +1 -1
- package/dist/admin/commands/AdminCommands.js +4 -0
- package/dist/admin/commands/AdminCommands.js.map +1 -1
- package/dist/admin/drawer/AdminDrawer.d.ts.map +1 -1
- package/dist/admin/drawer/AdminDrawer.js +4 -0
- package/dist/admin/drawer/AdminDrawer.js.map +1 -1
- package/dist/admin/pages/stores/AdminStoreDetailPage.d.ts +10 -0
- package/dist/admin/pages/stores/AdminStoreDetailPage.d.ts.map +1 -0
- package/dist/admin/pages/stores/AdminStoreDetailPage.js +92 -0
- package/dist/admin/pages/stores/AdminStoreDetailPage.js.map +1 -0
- package/dist/admin/pages/stores/AdminStoreList.d.ts +13 -0
- package/dist/admin/pages/stores/AdminStoreList.d.ts.map +1 -0
- package/dist/admin/pages/stores/AdminStoreList.js +131 -0
- package/dist/admin/pages/stores/AdminStoreList.js.map +1 -0
- package/dist/admin/pages/users/UserDetailsPage.js +3 -3
- package/dist/admin/pages/users/UserDetailsPage.js.map +1 -1
- package/dist/admin/pages/users/files/EditFileAccessPage.d.ts +1 -1
- package/dist/admin/pages/users/files/EditFileAccessPage.d.ts.map +1 -1
- package/dist/admin/pages/users/files/EditFileAccessPage.js +3 -3
- package/dist/admin/pages/users/files/EditFileAccessPage.js.map +1 -1
- package/dist/common/commands/CommonCommands.d.ts +9 -0
- package/dist/common/commands/CommonCommands.d.ts.map +1 -1
- package/dist/common/commands/CommonCommands.js +15 -0
- package/dist/common/commands/CommonCommands.js.map +1 -1
- package/dist/common/controls/countries/CountrySelect.d.ts +1 -0
- package/dist/common/controls/countries/CountrySelect.d.ts.map +1 -1
- package/dist/common/controls/countries/CountrySelect.js +6 -1
- package/dist/common/controls/countries/CountrySelect.js.map +1 -1
- package/dist/common/pages/folders/ChooserFolderPage.d.ts +1 -0
- package/dist/common/pages/folders/ChooserFolderPage.d.ts.map +1 -1
- package/dist/common/pages/folders/ChooserFolderPage.js +2 -1
- package/dist/common/pages/folders/ChooserFolderPage.js.map +1 -1
- package/dist/common/pages/stores/StoreDetailPage.d.ts +17 -0
- package/dist/common/pages/stores/StoreDetailPage.d.ts.map +1 -0
- package/dist/common/pages/stores/StoreDetailPage.js +96 -0
- package/dist/common/pages/stores/StoreDetailPage.js.map +1 -0
- package/dist/common/pages/stores/orders/EditOrderPage.d.ts +9 -0
- package/dist/common/pages/stores/orders/EditOrderPage.d.ts.map +1 -0
- package/dist/common/pages/stores/orders/EditOrderPage.js +37 -0
- package/dist/common/pages/stores/orders/EditOrderPage.js.map +1 -0
- package/dist/common/pages/stores/products/EditProductDetailPage.d.ts +11 -0
- package/dist/common/pages/stores/products/EditProductDetailPage.d.ts.map +1 -0
- package/dist/common/pages/stores/products/EditProductDetailPage.js +80 -0
- package/dist/common/pages/stores/products/EditProductDetailPage.js.map +1 -0
- package/dist/common/pages/stores/products/EditProductListPage.d.ts +16 -0
- package/dist/common/pages/stores/products/EditProductListPage.d.ts.map +1 -0
- package/dist/common/pages/stores/products/EditProductListPage.js +118 -0
- package/dist/common/pages/stores/products/EditProductListPage.js.map +1 -0
- package/dist/common/pages/stores/products/prices/EditItemPricePage.d.ts +8 -0
- package/dist/common/pages/stores/products/prices/EditItemPricePage.d.ts.map +1 -0
- package/dist/common/pages/stores/products/prices/EditItemPricePage.js +72 -0
- package/dist/common/pages/stores/products/prices/EditItemPricePage.js.map +1 -0
- package/dist/model/model.d.ts +127 -12
- package/dist/model/model.d.ts.map +1 -1
- package/dist/model/model.js +60 -8
- package/dist/model/model.js.map +1 -1
- package/dist/public/channel/ChannelView.pack.js +64 -10
- package/dist/public/channel/ChannelView.pack.js.map +1 -1
- package/dist/public/channel/ChannelView.pack.min.js +3 -3
- package/dist/public/channel/ChannelView.pack.min.js.map +1 -1
- package/dist/services/files/LocalFileService.d.ts.map +1 -1
- package/dist/services/files/LocalFileService.js +4 -1
- package/dist/services/files/LocalFileService.js.map +1 -1
- package/dist/services/store/StoreItemService.d.ts +15 -0
- package/dist/services/store/StoreItemService.d.ts.map +1 -0
- package/dist/services/store/StoreItemService.js +65 -0
- package/dist/services/store/StoreItemService.js.map +1 -0
- package/dist/services/store/StoreOrderService.d.ts +15 -0
- package/dist/services/store/StoreOrderService.d.ts.map +1 -0
- package/dist/services/store/StoreOrderService.js +65 -0
- package/dist/services/store/StoreOrderService.js.map +1 -0
- package/dist/services/store/StoreService.d.ts +14 -0
- package/dist/services/store/StoreService.d.ts.map +1 -0
- package/dist/services/store/StoreService.js +74 -0
- package/dist/services/store/StoreService.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/web/AppIndex.pack.js +764 -81
- package/dist/web/AppIndex.pack.js.map +1 -1
- package/dist/web/AppIndex.pack.min.js +12 -12
- package/dist/web/AppIndex.pack.min.js.map +1 -1
- package/dist/web/drawer/AppDrawer.d.ts +1 -0
- package/dist/web/drawer/AppDrawer.d.ts.map +1 -1
- package/dist/web/drawer/AppDrawer.js +23 -7
- package/dist/web/drawer/AppDrawer.js.map +1 -1
- package/dist/web/page/channels/detail/ChannelDetailPage.js +1 -1
- package/dist/web/page/channels/detail/ChannelDetailPage.js.map +1 -1
- package/dist/web/page/files/service/CloudFileService.d.ts +2 -1
- package/dist/web/page/files/service/CloudFileService.d.ts.map +1 -1
- package/dist/web/page/files/service/CloudFileService.js +6 -0
- package/dist/web/page/files/service/CloudFileService.js.map +1 -1
- package/dist/web/page/mails/service/ConversationService.js +1 -1
- package/dist/web/page/mails/service/ConversationService.js.map +1 -1
- package/dist/web/page/mails/service/MailService.d.ts.map +1 -1
- package/dist/web/page/mails/service/MailService.js +2 -9
- package/dist/web/page/mails/service/MailService.js.map +1 -1
- package/node_modules/@web-atoms/web-controls/dist/basic/InlinePopup.js +3 -1
- package/node_modules/@web-atoms/web-controls/dist/basic/InlinePopup.js.map +1 -1
- package/node_modules/@web-atoms/web-controls/dist/basic/TypeWriter.d.ts +5 -0
- package/node_modules/@web-atoms/web-controls/dist/basic/TypeWriter.d.ts.map +1 -0
- package/node_modules/@web-atoms/web-controls/dist/basic/TypeWriter.js +84 -0
- package/node_modules/@web-atoms/web-controls/dist/basic/TypeWriter.js.map +1 -0
- package/node_modules/@web-atoms/web-controls/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@web-atoms/web-controls/package.json +1 -1
- package/node_modules/@web-atoms/web-controls/src/basic/InlinePopup.tsx +2 -2
- package/node_modules/@web-atoms/web-controls/src/basic/TypeWriter.tsx +85 -0
- package/package.json +2 -2
- package/src/admin/commands/AdminCommands.ts +5 -0
- package/src/admin/drawer/AdminDrawer.tsx +5 -0
- package/src/admin/pages/stores/AdminStoreDetailPage.tsx +74 -0
- package/src/admin/pages/stores/AdminStoreList.tsx +109 -0
- package/src/admin/pages/users/UserDetailsPage.tsx +2 -2
- package/src/admin/pages/users/files/EditFileAccessPage.tsx +1 -1
- package/src/common/commands/CommonCommands.ts +19 -0
- package/src/common/controls/countries/CountrySelect.tsx +7 -1
- package/src/common/pages/folders/ChooserFolderPage.tsx +7 -2
- package/src/common/pages/stores/StoreDetailPage.tsx +84 -0
- package/src/common/pages/stores/orders/EditOrderPage.tsx +30 -0
- package/src/common/pages/stores/products/EditProductDetailPage.tsx +59 -0
- package/src/common/pages/stores/products/EditProductListPage.tsx +106 -0
- package/src/common/pages/stores/products/prices/EditItemPricePage.tsx +53 -0
- package/src/model/model.ts +151 -20
- package/src/services/files/LocalFileService.tsx +4 -1
- package/src/services/store/StoreItemService.ts +49 -0
- package/src/services/store/StoreOrderService.ts +57 -0
- package/src/services/store/StoreService.ts +49 -0
- package/src/web/drawer/AppDrawer.tsx +18 -4
- package/src/web/page/channels/detail/ChannelDetailPage.tsx +1 -1
- package/src/web/page/files/service/CloudFileService.ts +4 -0
- package/src/web/page/mails/service/ConversationService.tsx +1 -1
- package/src/web/page/mails/service/MailService.ts +2 -8
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import XNode from "@web-atoms/core/dist/core/XNode";
|
|
2
|
+
import AtomRepeater from "@web-atoms/web-controls/dist/basic/AtomRepeater";
|
|
3
|
+
import { ContentPage } from "@web-atoms/web-controls/dist/mobile-app/MobileApp";
|
|
4
|
+
import { IStore, Store } from "../../../model/model";
|
|
5
|
+
import InfiniteRepeater from "../../../common/controls/repeater/InfiniteRepeater";
|
|
6
|
+
import InjectProperty from "@web-atoms/core/dist/core/InjectProperty";
|
|
7
|
+
import StoreService from "../../../services/store/StoreService";
|
|
8
|
+
import MasterDetailPage from "@web-atoms/web-controls/dist/mobile-app/MasterDetailPage";
|
|
9
|
+
import Bind from "@web-atoms/core/dist/core/Bind";
|
|
10
|
+
import { AddIconTextButton } from "../../../common/controls/buttons/IconButton";
|
|
11
|
+
import styled from "@web-atoms/core/dist/style/styled";
|
|
12
|
+
import Action from "@web-atoms/core/dist/view-model/Action";
|
|
13
|
+
import AdminStoreDetailPage from "./AdminStoreDetailPage";
|
|
14
|
+
|
|
15
|
+
const css = styled.css `
|
|
16
|
+
&[data-page-type=master-detail] > [data-page-element=content][data-mode=desktop] {
|
|
17
|
+
grid-template-columns: 150px 1fr auto;
|
|
18
|
+
}
|
|
19
|
+
`.installLocal();
|
|
20
|
+
|
|
21
|
+
export default class AdminStoreListPage extends MasterDetailPage {
|
|
22
|
+
|
|
23
|
+
items: IStore[] = [];
|
|
24
|
+
|
|
25
|
+
selectedItem = null as IStore;
|
|
26
|
+
|
|
27
|
+
search = "";
|
|
28
|
+
|
|
29
|
+
@InjectProperty
|
|
30
|
+
private storeService: StoreService;
|
|
31
|
+
|
|
32
|
+
async init() {
|
|
33
|
+
|
|
34
|
+
this.element.className = css;
|
|
35
|
+
|
|
36
|
+
this.titleRenderer = () => <div data-layout="row">
|
|
37
|
+
<input
|
|
38
|
+
placeholder="Search"
|
|
39
|
+
type="search"
|
|
40
|
+
value={Bind.twoWaysImmediate(() => this.search)}/>
|
|
41
|
+
</div>;
|
|
42
|
+
|
|
43
|
+
this.footerRenderer = () => <div data-layout="row">
|
|
44
|
+
<AddIconTextButton
|
|
45
|
+
data-click-event="add-item"
|
|
46
|
+
/>
|
|
47
|
+
</div>;
|
|
48
|
+
|
|
49
|
+
this.renderer = <div>
|
|
50
|
+
<div>
|
|
51
|
+
<AtomRepeater
|
|
52
|
+
data-layout="data-grid"
|
|
53
|
+
selectOnClick={true}
|
|
54
|
+
data-list-selection="default"
|
|
55
|
+
data-selection-updated-event="item-selected"
|
|
56
|
+
data-event-items-updated="items-loaded"
|
|
57
|
+
selectedItem={Bind.twoWaysImmediate(() => this.selectedItem)}
|
|
58
|
+
items={this.items}
|
|
59
|
+
{ ... InfiniteRepeater.pagedItems((start) =>
|
|
60
|
+
(c, e, cancelToken) =>
|
|
61
|
+
this.storeService.stores({
|
|
62
|
+
start,
|
|
63
|
+
cancelToken
|
|
64
|
+
})
|
|
65
|
+
)}
|
|
66
|
+
itemRenderer={(store: IStore) => <div>
|
|
67
|
+
<label text={store.storeID}/>
|
|
68
|
+
<label text={store.name}/>
|
|
69
|
+
</div>}
|
|
70
|
+
/>
|
|
71
|
+
</div>
|
|
72
|
+
</div>;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@Action({ onEvent: "items-loaded", defer: 100 })
|
|
76
|
+
itemsLoaded() {
|
|
77
|
+
if(this.selectedItem) {
|
|
78
|
+
if(this.items.includes(this.selectedItem)) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
this.selectedItem = this.items.find((x) => x.storeID === this.selectedItem.storeID);
|
|
82
|
+
if (this.selectedItem) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
this.selectedItem = this.items[0];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@Action({ onEvent: "item-selected"})
|
|
90
|
+
itemSelected() {
|
|
91
|
+
if(!this.selectedItem) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
this.openDetail(AdminStoreDetailPage, this.selectedItem);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
@Action({ onEvent: "add-item"})
|
|
98
|
+
async newItem() {
|
|
99
|
+
const name = prompt("Name of the store");
|
|
100
|
+
if (!name) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const store = Store.create({ name });
|
|
104
|
+
await this.storeService.save(store);
|
|
105
|
+
this.items.add(store);
|
|
106
|
+
this.selectedItem = store;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
}
|
|
@@ -8,7 +8,7 @@ import { toFileSize } from "../../../common/NumberFormats";
|
|
|
8
8
|
import CollectionEditor from "../../../common/controls/collection-editor/CollectionEditor";
|
|
9
9
|
import EditDomainUserPage from "./domains/EditDomainUserPage";
|
|
10
10
|
import EditUserMailboxPage from "./mailboxes/EditUserMailboxPage";
|
|
11
|
-
import
|
|
11
|
+
import EditFileAccessPage from "./files/EditFileAccessPage";
|
|
12
12
|
import { DeleteIconTextButton, SaveIconButton, SaveIconTextButton } from "../../../common/controls/buttons/IconButton";
|
|
13
13
|
import Action from "@web-atoms/core/dist/view-model/Action";
|
|
14
14
|
import FormField from "@web-atoms/web-controls/dist/basic/FormField";
|
|
@@ -94,7 +94,7 @@ export default class UserDetailsPage extends ContentPage {
|
|
|
94
94
|
<CollectionEditor
|
|
95
95
|
label="Drives/Files"
|
|
96
96
|
model={this.model}
|
|
97
|
-
addPage={
|
|
97
|
+
addPage={EditFileAccessPage}
|
|
98
98
|
collection="fileAccessList"
|
|
99
99
|
itemRenderer={(item: IAppFileAccess) => <tr>
|
|
100
100
|
<td text={item.file.name }/>
|
|
@@ -11,7 +11,7 @@ import Bind from "@web-atoms/core/dist/core/Bind";
|
|
|
11
11
|
import { SaveIconTextButton } from "../../../../common/controls/buttons/IconButton";
|
|
12
12
|
import Action from "@web-atoms/core/dist/view-model/Action";
|
|
13
13
|
|
|
14
|
-
export default class
|
|
14
|
+
export default class EditFileAccessPage extends PopupWindowPage {
|
|
15
15
|
|
|
16
16
|
public parameters: IAppFileAccess;
|
|
17
17
|
|
|
@@ -57,4 +57,23 @@ export default class CommonCommands extends Commands {
|
|
|
57
57
|
routeOrder: 2000,
|
|
58
58
|
openPage: () => import("../pages/websites/list/WebSiteListPage")
|
|
59
59
|
});
|
|
60
|
+
|
|
61
|
+
static editStore = Command.create({
|
|
62
|
+
route: "/stores/detail/{id}",
|
|
63
|
+
routeOrder: 100,
|
|
64
|
+
openPage: () => import("../pages/stores/StoreDetailPage")
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
static editProductList = Command.create({
|
|
68
|
+
route: "/stores/{storeID}",
|
|
69
|
+
routeOrder: 500,
|
|
70
|
+
openPage: () => import("../pages/stores/products/EditProductListPage")
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
static editProduct = Command.create({
|
|
75
|
+
route: "/stores/product/{id}",
|
|
76
|
+
routeOrder: 200,
|
|
77
|
+
openPage: () => import("../pages/stores/products/EditProductDetailPage")
|
|
78
|
+
});
|
|
60
79
|
}
|
|
@@ -21,7 +21,13 @@ export const CountrySelect = (a) => <DropDown
|
|
|
21
21
|
labelPath={(item) => item.isdCode?.startsWith("+") ? item.isdCode : `+${item.isdCode} ${item.value}`}
|
|
22
22
|
valuePath={(item) => item.value}
|
|
23
23
|
items={Bind.oneTimeAsync(() => loadCountries())}
|
|
24
|
-
{ ... a}
|
|
24
|
+
{ ... a}/>;
|
|
25
|
+
|
|
26
|
+
export const CurrencySelect = (a) => <DropDown
|
|
27
|
+
labelPath={(item:ICountry) => item.currency + "(" + item.label + ")"}
|
|
28
|
+
valuePath={(item:ICountry) => item.currency}
|
|
29
|
+
items={Bind.oneTimeAsync(() => loadCountries())}
|
|
30
|
+
{ ... a}/>;
|
|
25
31
|
|
|
26
32
|
export const isdForCountry = async (countryCode: string) =>
|
|
27
33
|
(await loadCountries()).find((x) => x.value === countryCode).isdCode;
|
|
@@ -23,7 +23,7 @@ const css = styled.css `
|
|
|
23
23
|
|
|
24
24
|
export default class ChooserFolderPage extends PopupWindowPage<any, IAppFile> {
|
|
25
25
|
|
|
26
|
-
public parameters: { chooseFile?: boolean };
|
|
26
|
+
public parameters: { chooseFile?: boolean, contentType?: string };
|
|
27
27
|
|
|
28
28
|
private root: IAppFile;
|
|
29
29
|
|
|
@@ -47,7 +47,12 @@ export default class ChooserFolderPage extends PopupWindowPage<any, IAppFile> {
|
|
|
47
47
|
name: "Drives"
|
|
48
48
|
});
|
|
49
49
|
|
|
50
|
-
const drives = await this.cloudFileService.drives({
|
|
50
|
+
const drives = await this.cloudFileService.drives({
|
|
51
|
+
start: 0,
|
|
52
|
+
size: -1,
|
|
53
|
+
cancelToken: null,
|
|
54
|
+
contentType: this.parameters.contentType
|
|
55
|
+
});
|
|
51
56
|
|
|
52
57
|
this.root.children = drives.items;
|
|
53
58
|
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import XNode from "@web-atoms/core/dist/core/XNode";
|
|
2
|
+
import { Inject } from "@web-atoms/core/dist/di/Inject";
|
|
3
|
+
import AtomRepeater from "@web-atoms/web-controls/dist/basic/AtomRepeater";
|
|
4
|
+
import { ContentPage } from "@web-atoms/web-controls/dist/mobile-app/MobileApp";
|
|
5
|
+
import StoreService from "../../../services/store/StoreService";
|
|
6
|
+
import InjectProperty from "@web-atoms/core/dist/core/InjectProperty";
|
|
7
|
+
import { IStore, IStoreOrder } from "../../../model/model";
|
|
8
|
+
import Bind from "@web-atoms/core/dist/core/Bind";
|
|
9
|
+
import AppCommands from "../../../web/commands/AppCommands";
|
|
10
|
+
import CommonCommands from "../../commands/CommonCommands";
|
|
11
|
+
import InfiniteRepeater from "../../controls/repeater/InfiniteRepeater";
|
|
12
|
+
import StoreOrderService from "../../../services/store/StoreOrderService";
|
|
13
|
+
import { AddIconTextButton } from "../../controls/buttons/IconButton";
|
|
14
|
+
import Action from "@web-atoms/core/dist/view-model/Action";
|
|
15
|
+
|
|
16
|
+
export default class StoreDetailPage extends ContentPage<{ id: any }> {
|
|
17
|
+
|
|
18
|
+
@InjectProperty
|
|
19
|
+
storeService: StoreService;
|
|
20
|
+
|
|
21
|
+
@InjectProperty
|
|
22
|
+
storeOrderService: StoreOrderService;
|
|
23
|
+
|
|
24
|
+
model: IStore;
|
|
25
|
+
|
|
26
|
+
items: IStoreOrder[] = [];
|
|
27
|
+
selectedItem: IStoreOrder = null;
|
|
28
|
+
|
|
29
|
+
search = "";
|
|
30
|
+
|
|
31
|
+
async init() {
|
|
32
|
+
|
|
33
|
+
this.model = await this.storeService.get(this.parameters.id);
|
|
34
|
+
|
|
35
|
+
this.title = `${this.model.name} Orders`;
|
|
36
|
+
|
|
37
|
+
this.headerRenderer = () => <div data-layout="flex-wrap-padding">
|
|
38
|
+
<input type="search" value={Bind.twoWaysImmediate(() => this.search)}/>
|
|
39
|
+
<a
|
|
40
|
+
data-click-event="route"
|
|
41
|
+
href={CommonCommands.editProductList.displayRoute({ storeID: this.parameters.id })}
|
|
42
|
+
text="Products"
|
|
43
|
+
/>
|
|
44
|
+
</div>;
|
|
45
|
+
|
|
46
|
+
this.renderer = <div>
|
|
47
|
+
<div>
|
|
48
|
+
<AtomRepeater
|
|
49
|
+
data-layout="data-grid"
|
|
50
|
+
items={this.items}
|
|
51
|
+
{ ... InfiniteRepeater.pagedItems((start) =>
|
|
52
|
+
(c, e, cancelToken) =>
|
|
53
|
+
this.storeOrderService.list({
|
|
54
|
+
storeID: this.parameters.id,
|
|
55
|
+
start,
|
|
56
|
+
search: this.search,
|
|
57
|
+
cancelToken
|
|
58
|
+
})
|
|
59
|
+
)}
|
|
60
|
+
itemRenderer={(item: IStoreOrder) => <div>
|
|
61
|
+
<label text={item.orderID}/>
|
|
62
|
+
<label text={item.orderNumber}/>
|
|
63
|
+
<a text={item.customer.displayName}
|
|
64
|
+
data-click-event="route"
|
|
65
|
+
/>
|
|
66
|
+
</div>}
|
|
67
|
+
/>
|
|
68
|
+
</div>
|
|
69
|
+
</div>;
|
|
70
|
+
|
|
71
|
+
this.footerRenderer = () => <div data-layout="row">
|
|
72
|
+
<AddIconTextButton
|
|
73
|
+
data-click-event="create-order"
|
|
74
|
+
text="Create Order"
|
|
75
|
+
/>
|
|
76
|
+
</div>;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@Action({ onEvent: "create-order"})
|
|
80
|
+
async createOrder() {
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ContentPage } from "@web-atoms/web-controls/dist/mobile-app/MobileApp";
|
|
2
|
+
import { IStoreOrder, StoreOrder } from "../../../../model/model";
|
|
3
|
+
import InjectProperty from "@web-atoms/core/dist/core/InjectProperty";
|
|
4
|
+
import StoreOrderService from "../../../../services/store/StoreOrderService";
|
|
5
|
+
import XNode from "@web-atoms/core/dist/core/XNode";
|
|
6
|
+
import Form from "@web-atoms/web-controls/dist/basic/Form";
|
|
7
|
+
|
|
8
|
+
export default class EditOrderPage extends ContentPage<IStoreOrder> {
|
|
9
|
+
|
|
10
|
+
model: IStoreOrder;
|
|
11
|
+
|
|
12
|
+
@InjectProperty
|
|
13
|
+
storeOrderService: StoreOrderService;
|
|
14
|
+
|
|
15
|
+
async init() {
|
|
16
|
+
|
|
17
|
+
this.model = this.parameters.orderID
|
|
18
|
+
? await this.storeOrderService.get(this.parameters.orderID)
|
|
19
|
+
: StoreOrder.create({
|
|
20
|
+
... this.parameters
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
this.renderer = <div>
|
|
24
|
+
<Form>
|
|
25
|
+
|
|
26
|
+
</Form>
|
|
27
|
+
</div>;
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import XNode from "@web-atoms/core/dist/core/XNode";
|
|
2
|
+
import Form from "@web-atoms/web-controls/dist/basic/Form";
|
|
3
|
+
import { ContentPage } from "@web-atoms/web-controls/dist/mobile-app/MobileApp";
|
|
4
|
+
import CollectionEditor from "../../../controls/collection-editor/CollectionEditor";
|
|
5
|
+
import { IStoreItem, IStoreItemPrice, IStoreItemTag } from "../../../../model/model";
|
|
6
|
+
import StoreItemService from "../../../../services/store/StoreItemService";
|
|
7
|
+
import InjectProperty from "@web-atoms/core/dist/core/InjectProperty";
|
|
8
|
+
import FormField from "@web-atoms/web-controls/dist/basic/FormField";
|
|
9
|
+
import Bind from "@web-atoms/core/dist/core/Bind";
|
|
10
|
+
import EditItemPricePage from "./prices/EditItemPricePage";
|
|
11
|
+
|
|
12
|
+
export default class EditProductDetailPage extends ContentPage<{ id }> {
|
|
13
|
+
|
|
14
|
+
model: IStoreItem = null;
|
|
15
|
+
|
|
16
|
+
@InjectProperty
|
|
17
|
+
storeItemService: StoreItemService;
|
|
18
|
+
|
|
19
|
+
async init() {
|
|
20
|
+
|
|
21
|
+
this.model = await this.storeItemService.get(this.parameters.id);
|
|
22
|
+
|
|
23
|
+
this.renderer = <div>
|
|
24
|
+
<Form>
|
|
25
|
+
<FormField label="Name">
|
|
26
|
+
<input value={Bind.twoWaysImmediate(() => this.model.name)}/>
|
|
27
|
+
</FormField>
|
|
28
|
+
<FormField label="Description">
|
|
29
|
+
<textarea
|
|
30
|
+
rows="5"
|
|
31
|
+
cols="80"
|
|
32
|
+
value={Bind.twoWaysImmediate(() => this.model.name)}/>
|
|
33
|
+
</FormField>
|
|
34
|
+
<CollectionEditor
|
|
35
|
+
label="Prices"
|
|
36
|
+
model={this.model}
|
|
37
|
+
collection="storeItemPrices"
|
|
38
|
+
addPage={EditItemPricePage}
|
|
39
|
+
itemRenderer={(item: IStoreItemPrice) => <tr>
|
|
40
|
+
<td text={item.currency}/>
|
|
41
|
+
<td text={item.amount }/>
|
|
42
|
+
<td text={item.startDate}/>
|
|
43
|
+
<td text={item.endDate}/>
|
|
44
|
+
</tr>}
|
|
45
|
+
/>
|
|
46
|
+
<CollectionEditor
|
|
47
|
+
label="Tags"
|
|
48
|
+
model={this.model}
|
|
49
|
+
collection="storeItemTags"
|
|
50
|
+
itemRenderer={(item: IStoreItemTag) => <tr>
|
|
51
|
+
<td text={item.tag.name}/>
|
|
52
|
+
<td text={item.tagValue}/>
|
|
53
|
+
</tr>}
|
|
54
|
+
/>
|
|
55
|
+
</Form>
|
|
56
|
+
</div>;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { ContentPage } from "@web-atoms/web-controls/dist/mobile-app/MobileApp";
|
|
2
|
+
import { IStoreItem, StoreItem } from "../../../../model/model";
|
|
3
|
+
import XNode from "@web-atoms/core/dist/core/XNode";
|
|
4
|
+
import AtomRepeater from "@web-atoms/web-controls/dist/basic/AtomRepeater";
|
|
5
|
+
import InfiniteRepeater from "../../../controls/repeater/InfiniteRepeater";
|
|
6
|
+
import InjectProperty from "@web-atoms/core/dist/core/InjectProperty";
|
|
7
|
+
import StoreItemService from "../../../../services/store/StoreItemService";
|
|
8
|
+
import CommonCommands from "../../../commands/CommonCommands";
|
|
9
|
+
import Action from "@web-atoms/core/dist/view-model/Action";
|
|
10
|
+
import Bind from "@web-atoms/core/dist/core/Bind";
|
|
11
|
+
import { AddIconTextButton } from "../../../controls/buttons/IconButton";
|
|
12
|
+
import MasterDetailPage from "@web-atoms/web-controls/dist/mobile-app/MasterDetailPage";
|
|
13
|
+
import EditProductDetailPage from "./EditProductDetailPage";
|
|
14
|
+
import { InlinePopupButton } from "@web-atoms/web-controls/dist/basic/InlinePopup";
|
|
15
|
+
import { MenuItem } from "@web-atoms/web-controls/dist/basic/PopupButton";
|
|
16
|
+
|
|
17
|
+
export default class EditProductListPage extends ContentPage<{ storeID }> {
|
|
18
|
+
|
|
19
|
+
search = "";
|
|
20
|
+
|
|
21
|
+
items: IStoreItem[] = [];
|
|
22
|
+
|
|
23
|
+
selectedItem = null;
|
|
24
|
+
|
|
25
|
+
@InjectProperty
|
|
26
|
+
storeItemService: StoreItemService;
|
|
27
|
+
|
|
28
|
+
async init() {
|
|
29
|
+
|
|
30
|
+
this.headerRenderer = () => <div data-layout="header-row">
|
|
31
|
+
<input type="search" value={Bind.twoWaysImmediate(() => this.search)}/>
|
|
32
|
+
{/* <AddIconTextButton
|
|
33
|
+
data-click-event="add-item"
|
|
34
|
+
text="Add Product"
|
|
35
|
+
/> */}
|
|
36
|
+
<InlinePopupButton
|
|
37
|
+
icon="fas fa-plus"
|
|
38
|
+
text="Add"
|
|
39
|
+
popup={() => <div>
|
|
40
|
+
<MenuItem
|
|
41
|
+
data-click-event="add-item"
|
|
42
|
+
data-item-type="product"
|
|
43
|
+
label="Product"/>
|
|
44
|
+
<MenuItem
|
|
45
|
+
data-click-event="add-item"
|
|
46
|
+
data-item-type="service"
|
|
47
|
+
label="Service"/>
|
|
48
|
+
<MenuItem
|
|
49
|
+
data-click-event="add-item"
|
|
50
|
+
data-item-type="tax"
|
|
51
|
+
label="Tax"/>
|
|
52
|
+
{/* <MenuItem
|
|
53
|
+
data-click-event="add-item"
|
|
54
|
+
data-item-type="coupon"
|
|
55
|
+
label="Coupon"/> */}
|
|
56
|
+
</div>}
|
|
57
|
+
></InlinePopupButton>
|
|
58
|
+
</div>;
|
|
59
|
+
|
|
60
|
+
this.renderer = <div>
|
|
61
|
+
<div>
|
|
62
|
+
<AtomRepeater
|
|
63
|
+
data-layout="data-grid"
|
|
64
|
+
items={this.items}
|
|
65
|
+
{ ... InfiniteRepeater.pagedItems((start) =>
|
|
66
|
+
(c, e, cancelToken) =>
|
|
67
|
+
this.storeItemService.list({
|
|
68
|
+
storeID: this.parameters.storeID,
|
|
69
|
+
start,
|
|
70
|
+
search: this.search,
|
|
71
|
+
cancelToken
|
|
72
|
+
})
|
|
73
|
+
)}
|
|
74
|
+
itemRenderer={(item: IStoreItem) => <div>
|
|
75
|
+
<label text={item.storeItemID}/>
|
|
76
|
+
<label text={item.itemType}/>
|
|
77
|
+
<a text={item.name}
|
|
78
|
+
data-click-event="route"
|
|
79
|
+
href={CommonCommands.editProduct.displayRoute({ id: item.storeItemID })}
|
|
80
|
+
/>
|
|
81
|
+
</div>}
|
|
82
|
+
/>
|
|
83
|
+
</div>
|
|
84
|
+
</div>;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
@Action({ onEvent: "add-item"})
|
|
88
|
+
async addNew({ itemType }) {
|
|
89
|
+
const name = prompt("Name of the product");
|
|
90
|
+
if (!name) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const storeID = this.parameters.storeID;
|
|
95
|
+
|
|
96
|
+
const product = StoreItem.create({
|
|
97
|
+
name,
|
|
98
|
+
itemType,
|
|
99
|
+
storeID
|
|
100
|
+
});
|
|
101
|
+
await this.storeItemService.save(product);
|
|
102
|
+
this.items.add(product);
|
|
103
|
+
this.selectedItem = product;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { PopupWindowPage } from "@web-atoms/web-controls/dist/mobile-app/MobileApp";
|
|
2
|
+
import { IStoreItemPrice } from "../../../../../model/model";
|
|
3
|
+
import XNode from "@web-atoms/core/dist/core/XNode";
|
|
4
|
+
import Form from "@web-atoms/web-controls/dist/basic/Form";
|
|
5
|
+
import FormField from "@web-atoms/web-controls/dist/basic/FormField";
|
|
6
|
+
import { CurrencySelect } from "../../../../controls/countries/CountrySelect";
|
|
7
|
+
import Bind from "@web-atoms/core/dist/core/Bind";
|
|
8
|
+
import DateField from "@web-atoms/web-controls/dist/basic/DateField";
|
|
9
|
+
import { SaveIconTextButton } from "../../../../controls/buttons/IconButton";
|
|
10
|
+
import Action from "@web-atoms/core/dist/view-model/Action";
|
|
11
|
+
|
|
12
|
+
export default class EditItemPricePage extends PopupWindowPage<IStoreItemPrice> {
|
|
13
|
+
|
|
14
|
+
model: IStoreItemPrice;
|
|
15
|
+
|
|
16
|
+
async init() {
|
|
17
|
+
this.model = this.parameters;
|
|
18
|
+
this.renderer = <div>
|
|
19
|
+
<Form>
|
|
20
|
+
<FormField label="Currency">
|
|
21
|
+
<CurrencySelect
|
|
22
|
+
value={Bind.twoWaysImmediate(() => this.model.currency)}
|
|
23
|
+
/>
|
|
24
|
+
</FormField>
|
|
25
|
+
<FormField label="Amount">
|
|
26
|
+
<input
|
|
27
|
+
type="number"
|
|
28
|
+
value={Bind.twoWaysImmediate(() => this.model.amount)}/>
|
|
29
|
+
</FormField>
|
|
30
|
+
<FormField label="Start Date">
|
|
31
|
+
<DateField
|
|
32
|
+
value={Bind.twoWaysImmediate(() => this.model.startDate)}
|
|
33
|
+
/>
|
|
34
|
+
</FormField>
|
|
35
|
+
<FormField label="End Date">
|
|
36
|
+
<DateField
|
|
37
|
+
value={Bind.twoWaysImmediate(() => this.model.endDate)}
|
|
38
|
+
/>
|
|
39
|
+
</FormField>
|
|
40
|
+
<div data-layout="command-row">
|
|
41
|
+
<SaveIconTextButton
|
|
42
|
+
data-submit-event="save-currency"
|
|
43
|
+
/>
|
|
44
|
+
</div>
|
|
45
|
+
</Form>
|
|
46
|
+
</div>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@Action({ onEvent: "save-currency", close: true })
|
|
50
|
+
async saveCurrency() {
|
|
51
|
+
return this.model;
|
|
52
|
+
}
|
|
53
|
+
}
|