@social-mail/social-mail-client 1.2.708 → 1.2.710
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 +140 -33
- package/dist/admin/AdminAppIndex.pack.js.map +1 -1
- package/dist/admin/AdminAppIndex.pack.min.js +12 -8
- package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
- package/dist/admin/drawer/AdminDrawer.d.ts +2 -2
- package/dist/admin/drawer/AdminDrawer.d.ts.map +1 -1
- package/dist/admin/drawer/AdminDrawer.js +6 -37
- package/dist/admin/drawer/AdminDrawer.js.map +1 -1
- package/dist/common/MenuService.d.ts +7 -1
- package/dist/common/MenuService.d.ts.map +1 -1
- package/dist/common/MenuService.js +31 -2
- package/dist/common/MenuService.js.map +1 -1
- package/dist/common/controls/drawer/BaseDrawer.d.ts +5 -0
- package/dist/common/controls/drawer/BaseDrawer.d.ts.map +1 -0
- package/dist/common/controls/drawer/BaseDrawer.js +45 -0
- package/dist/common/controls/drawer/BaseDrawer.js.map +1 -0
- package/dist/common/controls/menu/MenuRepeater.d.ts +5 -0
- package/dist/common/controls/menu/MenuRepeater.d.ts.map +1 -0
- package/dist/common/controls/menu/MenuRepeater.js +34 -0
- package/dist/common/controls/menu/MenuRepeater.js.map +1 -0
- package/dist/model/model.d.ts +1 -0
- package/dist/model/model.d.ts.map +1 -1
- package/dist/model/model.js.map +1 -1
- package/dist/public/channel/ChannelView.pack.js.map +1 -1
- package/dist/public/channel/ChannelView.pack.min.js.map +1 -1
- package/dist/public/preview/zip/DownloadZip.pack.js.map +1 -1
- package/dist/public/preview/zip/DownloadZip.pack.min.js.map +1 -1
- package/dist/public/store/StoreApp.pack.js +74 -5
- package/dist/public/store/StoreApp.pack.js.map +1 -1
- package/dist/public/store/StoreApp.pack.min.js +1 -1
- package/dist/public/store/StoreApp.pack.min.js.map +1 -1
- package/dist/public/store/cart/ShoppingCart.pack.js.map +1 -1
- package/dist/public/store/cart/ShoppingCart.pack.min.js.map +1 -1
- package/dist/public/store/pages/StoreOrderPage.d.ts +4 -1
- package/dist/public/store/pages/StoreOrderPage.d.ts.map +1 -1
- package/dist/public/store/pages/StoreOrderPage.js +74 -5
- package/dist/public/store/pages/StoreOrderPage.js.map +1 -1
- package/dist/site-editor-app/SiteEditorApp.pack.js +153 -68
- package/dist/site-editor-app/SiteEditorApp.pack.js.map +1 -1
- package/dist/site-editor-app/SiteEditorApp.pack.min.js +29 -6
- package/dist/site-editor-app/SiteEditorApp.pack.min.js.map +1 -1
- package/dist/site-editor-app/drawer/SiteEditorDrawer.d.ts +2 -2
- package/dist/site-editor-app/drawer/SiteEditorDrawer.d.ts.map +1 -1
- package/dist/site-editor-app/drawer/SiteEditorDrawer.js +7 -7
- package/dist/site-editor-app/drawer/SiteEditorDrawer.js.map +1 -1
- package/dist/site-editor-app/pages/store/coupons/StoreCouponsPage.d.ts.map +1 -1
- package/dist/site-editor-app/pages/store/coupons/StoreCouponsPage.js +5 -1
- package/dist/site-editor-app/pages/store/coupons/StoreCouponsPage.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/web/AppIndex.pack.js +241 -109
- package/dist/web/AppIndex.pack.js.map +1 -1
- package/dist/web/AppIndex.pack.min.js +23 -8
- package/dist/web/AppIndex.pack.min.js.map +1 -1
- package/dist/web/drawer/AppDrawer.d.ts +4 -8
- package/dist/web/drawer/AppDrawer.d.ts.map +1 -1
- package/dist/web/drawer/AppDrawer.js +63 -106
- package/dist/web/drawer/AppDrawer.js.map +1 -1
- package/dist/web/page/mails/MailboxContacts.d.ts +1 -0
- package/dist/web/page/mails/MailboxContacts.d.ts.map +1 -1
- package/dist/web/page/mails/MailboxContacts.js +6 -2
- package/dist/web/page/mails/MailboxContacts.js.map +1 -1
- package/package.json +1 -1
- package/src/admin/drawer/AdminDrawer.tsx +7 -33
- package/src/common/MenuService.ts +35 -3
- package/src/common/controls/drawer/BaseDrawer.tsx +35 -0
- package/src/common/controls/menu/MenuRepeater.tsx +22 -0
- package/src/model/model.ts +1 -0
- package/src/public/store/pages/StoreOrderPage.tsx +83 -7
- package/src/site-editor-app/drawer/SiteEditorDrawer.tsx +40 -34
- package/src/site-editor-app/pages/store/coupons/StoreCouponsPage.tsx +7 -1
- package/src/web/drawer/AppDrawer.tsx +70 -107
- package/src/web/page/mails/MailboxContacts.tsx +7 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import styled from "@web-atoms/core/dist/style/styled";
|
|
2
|
+
import { Drawer } from "@web-atoms/web-controls/dist/mobile-app/MobileApp";
|
|
3
|
+
|
|
4
|
+
const css = styled.css `
|
|
5
|
+
width: 300px;
|
|
6
|
+
|
|
7
|
+
background-color: var(--accent-color);
|
|
8
|
+
|
|
9
|
+
display: grid;
|
|
10
|
+
grid-template-rows: auto 1fr;
|
|
11
|
+
|
|
12
|
+
& > .header, & > header {
|
|
13
|
+
grid-row: 1;
|
|
14
|
+
padding: 10px;
|
|
15
|
+
font-size: large;
|
|
16
|
+
color: white;
|
|
17
|
+
}
|
|
18
|
+
& > .menus, & > section {
|
|
19
|
+
grid-row: 2;
|
|
20
|
+
background-color: canvas;
|
|
21
|
+
padding: var(--spacing);
|
|
22
|
+
margin: var(--spacing);
|
|
23
|
+
border-radius: 10px;
|
|
24
|
+
overflow: auto;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
`.installGlobal("drawer-menu");
|
|
28
|
+
|
|
29
|
+
export default class BaseDrawer extends Drawer {
|
|
30
|
+
|
|
31
|
+
constructor(app, e = document.createElement("drawer-menu")) {
|
|
32
|
+
super(app, e);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import styled from "@web-atoms/core/dist/style/styled";
|
|
2
|
+
import AtomRepeater from "@web-atoms/web-controls/dist/basic/AtomRepeater";
|
|
3
|
+
|
|
4
|
+
styled.css `
|
|
5
|
+
&[data-element][data-element][data-element] {
|
|
6
|
+
padding: 0;
|
|
7
|
+
margin: 0;
|
|
8
|
+
border: none;
|
|
9
|
+
padding-left: 0;
|
|
10
|
+
margin-left: 25px;
|
|
11
|
+
border-left: solid 1px lightgray;
|
|
12
|
+
& > * {
|
|
13
|
+
padding-left: 20px;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
`.installGlobal("menu-repeater");
|
|
17
|
+
|
|
18
|
+
export default class MenuRepeater extends AtomRepeater {
|
|
19
|
+
constructor(app, e = document.createElement("menu-repeater")) {
|
|
20
|
+
super(app, e);
|
|
21
|
+
}
|
|
22
|
+
}
|
package/src/model/model.ts
CHANGED
|
@@ -1232,6 +1232,7 @@ export interface IStoreItemPrice extends IClrEntity {
|
|
|
1232
1232
|
endDate?: DateTime | null;
|
|
1233
1233
|
currency?: string;
|
|
1234
1234
|
amount?: number;
|
|
1235
|
+
taxes?: number;
|
|
1235
1236
|
maxAmount?: number | null;
|
|
1236
1237
|
taxIncluded?: boolean;
|
|
1237
1238
|
readonly taxAmount?: number;
|
|
@@ -3,8 +3,13 @@ import { ContentPage } from "@web-atoms/web-controls/dist/mobile-app/MobileApp";
|
|
|
3
3
|
import EntityService from "../../../services/EntityService";
|
|
4
4
|
import XNode from "@web-atoms/core/dist/core/XNode";
|
|
5
5
|
import Loader from "../../../common/controls/Loader";
|
|
6
|
-
import { IStoreJournal, StoreJournal } from "../../../model/model";
|
|
6
|
+
import { IStoreJournal, IStoreJournalCoupon, StoreJournal, StoreJournalCoupon } from "../../../model/model";
|
|
7
7
|
import { DateFormats } from "../../../common/date/DateFormats";
|
|
8
|
+
import AtomRepeater from "@web-atoms/web-controls/dist/basic/AtomRepeater";
|
|
9
|
+
import Bind from "@web-atoms/core/dist/core/Bind";
|
|
10
|
+
import { AddIconTextButton } from "../../../common/controls/buttons/IconButton";
|
|
11
|
+
import Action from "@web-atoms/core/dist/view-model/Action";
|
|
12
|
+
import DateTime from "@web-atoms/date-time/dist/DateTime";
|
|
8
13
|
|
|
9
14
|
export default class StoreOrderPage extends ContentPage<Partial<IStoreJournal>> {
|
|
10
15
|
|
|
@@ -13,6 +18,9 @@ export default class StoreOrderPage extends ContentPage<Partial<IStoreJournal>>
|
|
|
13
18
|
|
|
14
19
|
model: IStoreJournal = null;
|
|
15
20
|
|
|
21
|
+
newCoupon: IStoreJournalCoupon = StoreJournalCoupon.create({
|
|
22
|
+
});
|
|
23
|
+
|
|
16
24
|
async init() {
|
|
17
25
|
|
|
18
26
|
this.renderer = <div>
|
|
@@ -21,7 +29,10 @@ export default class StoreOrderPage extends ContentPage<Partial<IStoreJournal>>
|
|
|
21
29
|
|
|
22
30
|
const order = this.model = await this.load();
|
|
23
31
|
|
|
32
|
+
this.newCoupon.orderID = order.journalID;
|
|
33
|
+
|
|
24
34
|
order.paymentAttempts ??= [];
|
|
35
|
+
order.orderCoupons ??= [];
|
|
25
36
|
order.paymentAttempts = order.paymentAttempts.orderByDescending((x) => x.success);
|
|
26
37
|
|
|
27
38
|
this.renderer = <div>
|
|
@@ -39,12 +50,21 @@ export default class StoreOrderPage extends ContentPage<Partial<IStoreJournal>>
|
|
|
39
50
|
<td>{ DateFormats.withWeekDayAndTime(order.dateUpdated)}</td>
|
|
40
51
|
</tr>
|
|
41
52
|
</table>
|
|
42
|
-
<table>
|
|
43
|
-
|
|
44
|
-
<
|
|
45
|
-
<
|
|
46
|
-
<
|
|
47
|
-
|
|
53
|
+
<table style-width="300px">
|
|
54
|
+
<thead>
|
|
55
|
+
<th>Item</th>
|
|
56
|
+
<th>Qty</th>
|
|
57
|
+
<th>Amount</th>
|
|
58
|
+
<th>Taxes</th>
|
|
59
|
+
</thead>
|
|
60
|
+
<tbody>
|
|
61
|
+
{ ... order.lineItems.map((item) => <tr>
|
|
62
|
+
<td>{item.item.name}</td>
|
|
63
|
+
<td>{item.quantity}</td>
|
|
64
|
+
<td>{item.itemPrice.amount}</td>
|
|
65
|
+
<td>{item.itemPrice.taxes ?? "0"}</td>
|
|
66
|
+
</tr>)}
|
|
67
|
+
</tbody>
|
|
48
68
|
</table>
|
|
49
69
|
<table>
|
|
50
70
|
<tr>
|
|
@@ -54,6 +74,37 @@ export default class StoreOrderPage extends ContentPage<Partial<IStoreJournal>>
|
|
|
54
74
|
</table>
|
|
55
75
|
|
|
56
76
|
<br/>
|
|
77
|
+
|
|
78
|
+
<div>
|
|
79
|
+
<AtomRepeater
|
|
80
|
+
for="table"
|
|
81
|
+
header={true}
|
|
82
|
+
headerRenderer={(x) => <thead>
|
|
83
|
+
<th>Coupons</th>
|
|
84
|
+
</thead>}
|
|
85
|
+
itemRenderer={(x: IStoreJournalCoupon) => <tbody>
|
|
86
|
+
<tr>
|
|
87
|
+
<td colSpan={2}>
|
|
88
|
+
<label text={x.couponCode}/>
|
|
89
|
+
<i
|
|
90
|
+
data-click-event="delete-coupon"
|
|
91
|
+
class="fas fa-times-circle"/>
|
|
92
|
+
</td>
|
|
93
|
+
</tr>
|
|
94
|
+
</tbody>}
|
|
95
|
+
items={this.model.orderCoupons}
|
|
96
|
+
footer={Bind.oneWay(() => this.newCoupon)}
|
|
97
|
+
footerRenderer={() => <tfoot>
|
|
98
|
+
<th><input value={Bind.twoWaysImmediate(() => this.newCoupon.couponCode)}/></th>
|
|
99
|
+
<th>
|
|
100
|
+
<AddIconTextButton
|
|
101
|
+
data-click-event="add-coupon"
|
|
102
|
+
/>
|
|
103
|
+
</th>
|
|
104
|
+
</tfoot>}
|
|
105
|
+
/>
|
|
106
|
+
</div>
|
|
107
|
+
|
|
57
108
|
<br/>
|
|
58
109
|
|
|
59
110
|
<table>
|
|
@@ -80,9 +131,34 @@ export default class StoreOrderPage extends ContentPage<Partial<IStoreJournal>>
|
|
|
80
131
|
x.paymentAttempts,
|
|
81
132
|
x.buyer,
|
|
82
133
|
x.buyerBillingAddress,
|
|
134
|
+
x.orderCoupons,
|
|
83
135
|
x.lineItems.forEach((l) => [l.itemPrice, l.item])])
|
|
84
136
|
.firstOrDefault();
|
|
85
137
|
return order;
|
|
86
138
|
}
|
|
87
139
|
|
|
140
|
+
@Action({ onEvent: "add-coupon"})
|
|
141
|
+
async addCoupon() {
|
|
142
|
+
const coupon = { ... this.newCoupon };
|
|
143
|
+
(this.model.orderCoupons ??= []).add(coupon);
|
|
144
|
+
try {
|
|
145
|
+
this.model.dateUpdated = DateTime.now;
|
|
146
|
+
await this.entityService.save(this.model, (c) => c.include((x) => x.orderCoupons));
|
|
147
|
+
} catch (error) {
|
|
148
|
+
this.model.orderCoupons.remove(coupon);
|
|
149
|
+
throw error;
|
|
150
|
+
}
|
|
151
|
+
location.reload();
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
@Action({
|
|
155
|
+
onEvent: "delete-coupon",
|
|
156
|
+
confirm: "Are you sure you want to delete this coupon?"
|
|
157
|
+
})
|
|
158
|
+
async deleteCoupon(coupon: IStoreJournalCoupon) {
|
|
159
|
+
coupon.$deleted = true;
|
|
160
|
+
this.model.dateUpdated = DateTime.now;
|
|
161
|
+
await this.entityService.save(this.model, (c) => c.include((x) => x.orderCoupons));
|
|
162
|
+
this.model.orderCoupons.remove(coupon);
|
|
163
|
+
}
|
|
88
164
|
}
|
|
@@ -8,47 +8,53 @@ import { IWebSiteFolder } from "../../model/model";
|
|
|
8
8
|
import SiteEditorCommands from "../commands/SiteEditorCommands";
|
|
9
9
|
import { ExpanderMenu } from "@web-atoms/web-controls/dist/basic/Expander";
|
|
10
10
|
import MenuItem from "../../common/controls/menu/MenuItem";
|
|
11
|
+
import BaseDrawer from "../../common/controls/drawer/BaseDrawer";
|
|
11
12
|
|
|
12
|
-
export default class SiteEditorDrawer extends
|
|
13
|
+
export default class SiteEditorDrawer extends BaseDrawer {
|
|
13
14
|
|
|
14
15
|
@InjectProperty
|
|
15
16
|
menuService: MenuService;
|
|
16
17
|
|
|
17
18
|
async init() {
|
|
18
19
|
this.renderer = <div>
|
|
19
|
-
<
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
20
|
+
<header>
|
|
21
|
+
Social Websites
|
|
22
|
+
</header>
|
|
23
|
+
<section>
|
|
24
|
+
<AtomRepeater
|
|
25
|
+
items={Bind.oneWay(() => this.menuService.websites)}
|
|
26
|
+
itemRenderer={(x: IWebSiteFolder) => <ExpanderMenu isExpanded={true}>
|
|
27
|
+
<MenuItem
|
|
28
|
+
icon="fas fa-hard-drive"
|
|
29
|
+
label={x.folder.name}
|
|
30
|
+
commandLink={null}
|
|
31
|
+
/>
|
|
32
|
+
<MenuItem
|
|
33
|
+
label="Site Editor"
|
|
34
|
+
commandLink={SiteEditorCommands.editWebSite.displayRoute({ id: x.folderID })}/>
|
|
35
|
+
<MenuItem
|
|
36
|
+
label="Site Files"
|
|
37
|
+
commandLink={SiteEditorCommands.openFiles.displayRoute({ id: x.folderID })}/>
|
|
38
|
+
{x.storeEnabled && <MenuItem
|
|
39
|
+
label="Products"
|
|
40
|
+
commandLink={SiteEditorCommands.productList.displayRoute({ storeID: x.folderID })}/>}
|
|
41
|
+
{x.storeEnabled && <MenuItem
|
|
42
|
+
label="Orders"
|
|
43
|
+
commandLink={SiteEditorCommands.orderList.displayRoute({ id: x.folderID })}/>}
|
|
44
|
+
{x.storeEnabled && <MenuItem
|
|
45
|
+
label="Coupons"
|
|
46
|
+
commandLink={SiteEditorCommands.couponList.displayRoute({ storeID: x.folderID })}/>}
|
|
47
|
+
{x.storeEnabled && <MenuItem
|
|
48
|
+
label="Payment Gateways"
|
|
49
|
+
commandLink={SiteEditorCommands.paymentGatewayList.displayRoute({ storeID: x.folderID })}/>}
|
|
50
|
+
</ExpanderMenu>}
|
|
51
|
+
/>
|
|
52
|
+
<MenuItem
|
|
53
|
+
icon="fas fa-hard-drive"
|
|
54
|
+
label="All Websites"
|
|
55
|
+
commandLink={SiteEditorCommands.websiteList.displayRoute({})}
|
|
56
|
+
/>
|
|
57
|
+
</section>
|
|
52
58
|
</div>;
|
|
53
59
|
}
|
|
54
60
|
|
|
@@ -23,7 +23,11 @@ export default class StoreCouponsPage extends ContentPage<{storeID }> {
|
|
|
23
23
|
|
|
24
24
|
search = "";
|
|
25
25
|
|
|
26
|
-
newItem = StoreCoupon.create({
|
|
26
|
+
newItem = StoreCoupon.create({
|
|
27
|
+
type: "subtract",
|
|
28
|
+
active: true,
|
|
29
|
+
hidden: false
|
|
30
|
+
});
|
|
27
31
|
|
|
28
32
|
async init() {
|
|
29
33
|
|
|
@@ -93,6 +97,8 @@ export default class StoreCouponsPage extends ContentPage<{storeID }> {
|
|
|
93
97
|
@Action({ onEvent: "add-item" })
|
|
94
98
|
async addItem() {
|
|
95
99
|
const item = { ... this.newItem };
|
|
100
|
+
this.newItem.code = "";
|
|
101
|
+
item.storeID = this.parameters.storeID;
|
|
96
102
|
if (!item.amount) {
|
|
97
103
|
throw new Error("amount cannot be empty");
|
|
98
104
|
}
|
|
@@ -2,7 +2,7 @@ import XNode from "@web-atoms/core/dist/core/XNode";
|
|
|
2
2
|
import { Drawer } from "@web-atoms/web-controls/dist/mobile-app/MobileApp";
|
|
3
3
|
import SocialMailApp from "../../common/SocialMailApp";
|
|
4
4
|
import MenuItem from "../../common/controls/menu/MenuItem";
|
|
5
|
-
import { IUser } from "../../model/model";
|
|
5
|
+
import { IAppFile, IMailbox, IUser, IWebSiteFolder } from "../../model/model";
|
|
6
6
|
import styled from "@web-atoms/core/dist/style/styled";
|
|
7
7
|
import AppCommands from "../commands/AppCommands";
|
|
8
8
|
import { ExpanderMenu } from "@web-atoms/web-controls/dist/basic/Expander";
|
|
@@ -13,54 +13,32 @@ import CommonCommands from "../../common/commands/CommonCommands";
|
|
|
13
13
|
import LoginService from "../../services/LoginService";
|
|
14
14
|
import { AppUrlService } from "../../common/AppUrlService";
|
|
15
15
|
import CloudFileService from "../../common/pages/files/service/CloudFileService";
|
|
16
|
+
import InjectProperty from "@web-atoms/core/dist/core/InjectProperty";
|
|
17
|
+
import MenuService from "../../common/MenuService";
|
|
18
|
+
import AtomRepeater from "@web-atoms/web-controls/dist/basic/AtomRepeater";
|
|
19
|
+
import MenuRepeater from "../../common/controls/menu/MenuRepeater";
|
|
20
|
+
import BaseDrawer from "../../common/controls/drawer/BaseDrawer";
|
|
21
|
+
import Bind from "@web-atoms/core/dist/core/Bind";
|
|
16
22
|
|
|
17
|
-
const css = styled.css `
|
|
18
|
-
min-width: 300px;
|
|
19
|
-
|
|
20
|
-
background-color: var(--accent-color);
|
|
21
|
-
|
|
22
|
-
display: grid;
|
|
23
|
-
grid-template-rows: auto 1fr;
|
|
24
|
-
|
|
25
|
-
& > .header {
|
|
26
|
-
grid-row: 1;
|
|
27
|
-
}
|
|
28
|
-
& > .menus {
|
|
29
|
-
grid-row: 2;
|
|
30
|
-
background-color: canvas;
|
|
31
|
-
padding: var(--spacing);
|
|
32
|
-
margin: var(--spacing);
|
|
33
|
-
border-radius: 10px;
|
|
34
|
-
overflow: auto;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
`.installLocal();
|
|
38
23
|
|
|
39
24
|
declare let BigInt: any;
|
|
40
25
|
|
|
41
|
-
export default class AppDrawer extends
|
|
26
|
+
export default class AppDrawer extends BaseDrawer {
|
|
27
|
+
|
|
28
|
+
@InjectProperty
|
|
29
|
+
menuService: MenuService;
|
|
42
30
|
|
|
43
31
|
private user: IUser;
|
|
44
32
|
|
|
45
33
|
private selected: HTMLElement;
|
|
46
34
|
|
|
47
35
|
async init() {
|
|
48
|
-
this.element.className = css;
|
|
49
36
|
|
|
50
37
|
this.user = SocialMailApp.user;
|
|
51
38
|
|
|
52
|
-
const { mailboxes, channels, drives, websites } = await this.getItems();
|
|
53
|
-
|
|
54
39
|
this.renderer = <div>
|
|
55
|
-
<
|
|
56
|
-
|
|
57
|
-
data-padding="large"
|
|
58
|
-
data-font-size="large"
|
|
59
|
-
data-color="white"
|
|
60
|
-
text={SocialMailApp.config.name}/>
|
|
61
|
-
<div
|
|
62
|
-
class="menus"
|
|
63
|
-
>
|
|
40
|
+
<header>{SocialMailApp.config.name}</header>
|
|
41
|
+
<section>
|
|
64
42
|
<MenuItem
|
|
65
43
|
icon="fas fa-home"
|
|
66
44
|
label="Home"
|
|
@@ -72,93 +50,78 @@ export default class AppDrawer extends Drawer {
|
|
|
72
50
|
label="Mailboxes"
|
|
73
51
|
commandLink={null}
|
|
74
52
|
/>
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
53
|
+
<MenuRepeater
|
|
54
|
+
items={this.menuService.mailboxes}
|
|
55
|
+
itemRenderer={(mb: IMailbox) => <MenuItem
|
|
56
|
+
commandLink={AppCommands.openMailbox.displayRoute({ id: mb.mailboxID })}
|
|
57
|
+
label={mb.emailAddress.name}
|
|
58
|
+
description={mb.emailAddress.emailAddress}
|
|
59
|
+
title={mb.emailAddress.emailAddress}
|
|
60
|
+
/>}
|
|
61
|
+
/>
|
|
81
62
|
<MenuItem
|
|
82
63
|
label="All"
|
|
83
64
|
commandLink={AppCommands.openMailboxList.displayRoute({})}
|
|
84
65
|
/>
|
|
85
66
|
</ExpanderMenu> }
|
|
86
|
-
|
|
67
|
+
<ExpanderMenu
|
|
68
|
+
style-display={Bind.oneWay(() => this.menuService.channels.length > 0)}
|
|
69
|
+
isExpanded={true}>
|
|
87
70
|
<MenuItem
|
|
88
71
|
icon="fas fa-hard-drive"
|
|
89
72
|
label="Channels"
|
|
90
73
|
commandLink={null}
|
|
91
74
|
/>
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
75
|
+
<MenuRepeater
|
|
76
|
+
items={this.menuService.channels}
|
|
77
|
+
itemRenderer={(mb: IMailbox) => <MenuItem
|
|
78
|
+
commandLink={AppCommands.openChannel.displayRoute({ id: mb.mailboxID })}
|
|
79
|
+
label={mb.emailAddress.name}
|
|
80
|
+
description={mb.emailAddress.emailAddress}
|
|
81
|
+
title={mb.emailAddress.emailAddress}
|
|
82
|
+
/>}
|
|
83
|
+
/>
|
|
84
|
+
</ExpanderMenu>
|
|
85
|
+
<ExpanderMenu
|
|
86
|
+
style-display={Bind.oneWay(() => this.menuService.drives.length > 0)}
|
|
87
|
+
isExpanded={true}>
|
|
100
88
|
<MenuItem
|
|
101
89
|
icon="fas fa-hard-drive"
|
|
102
90
|
label="Drives"
|
|
103
91
|
commandLink={null}
|
|
104
92
|
/>
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
93
|
+
<MenuRepeater
|
|
94
|
+
items={this.menuService.drives}
|
|
95
|
+
itemRenderer={(d: IAppFile) => <MenuItem
|
|
96
|
+
commandLink={AppCommands.openFiles.displayRoute({ id: d.appFileID })}
|
|
97
|
+
label={d.name}
|
|
98
|
+
description={`${d.creator?.displayName} ${ BigInt(d.fileSize) > BigInt(0) ? "(" + toFileSize(d.fileSize) + ")" : ""}`}
|
|
99
|
+
/>}/>
|
|
110
100
|
<MenuItem
|
|
111
101
|
label="All"
|
|
112
102
|
commandLink={AppCommands.openDrives.displayRoute({})}
|
|
113
103
|
/>
|
|
114
|
-
</ExpanderMenu>
|
|
115
|
-
|
|
104
|
+
</ExpanderMenu>
|
|
105
|
+
<ExpanderMenu
|
|
106
|
+
style-display={Bind.oneWay(() => this.menuService.websites.length > 0)}
|
|
107
|
+
isExpanded={true}>
|
|
116
108
|
<MenuItem
|
|
117
109
|
icon="fas fa-hard-drive"
|
|
118
110
|
label="Web Sites"
|
|
119
111
|
commandLink={null}
|
|
120
112
|
/>
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
113
|
+
<MenuRepeater
|
|
114
|
+
items={this.menuService.websites}
|
|
115
|
+
itemRenderer={(d: IWebSiteFolder) => <MenuItem
|
|
116
|
+
href={AppUrlService.editWebSite(d)}
|
|
117
|
+
label={d.folder.name}
|
|
118
|
+
description={toFileSize(Number(d.folder.fileSize) + Number(d.snapshotStorage))}
|
|
119
|
+
/>}/>
|
|
126
120
|
<MenuItem
|
|
127
121
|
label="All"
|
|
128
122
|
commandLink={AppCommands.openWebSiteList.displayRoute({})}
|
|
129
123
|
/>
|
|
130
|
-
</ExpanderMenu>
|
|
131
|
-
{/* {stores.length && <ExpanderMenu isExpanded={false}>
|
|
132
|
-
<MenuItem
|
|
133
|
-
icon="fas fa-dollar"
|
|
134
|
-
label="Stores"
|
|
135
|
-
commandLink={null}
|
|
136
|
-
/>
|
|
137
|
-
{ ... stores.map((s) => <MenuItem
|
|
138
|
-
label={s.folder.name}
|
|
139
|
-
commandLink={AppCommands.editStore.displayRoute({ id: s.folderID})}
|
|
140
|
-
/>)}
|
|
141
|
-
</ExpanderMenu>} */}
|
|
142
|
-
{ mailboxes.length && <MenuItem
|
|
143
|
-
icon="fas fa-money-check-pen"
|
|
144
|
-
label="Templates"
|
|
145
|
-
commandLink={AppCommands.openTemplates.displayRoute({ templates: true })}
|
|
146
|
-
/> }
|
|
147
|
-
{ mailboxes.length && <MenuItem
|
|
148
|
-
icon="fas fa-envelopes-bulk"
|
|
149
|
-
label="All Mailboxes"
|
|
150
|
-
commandLink={AppCommands.openMailboxList.displayRoute({})}
|
|
151
|
-
/> }
|
|
152
|
-
{/* <MenuItem
|
|
153
|
-
icon="fas fa-envelopes-bulk"
|
|
154
|
-
label="All Mailboxes"
|
|
155
|
-
commandLink={AppCommands.openMailboxList.displayRoute({})}
|
|
156
|
-
/>
|
|
157
|
-
{/* <MenuItem
|
|
158
|
-
icon="fas fa-folder"
|
|
159
|
-
label="Files"
|
|
160
|
-
commandLink={AppCommands.openFiles.displayRoute({})}
|
|
161
|
-
/> */}
|
|
124
|
+
</ExpanderMenu>
|
|
162
125
|
<ExpanderMenu isExpanded={false}>
|
|
163
126
|
<MenuItem
|
|
164
127
|
icon="fas fa-gears"
|
|
@@ -187,23 +150,23 @@ export default class AppDrawer extends Drawer {
|
|
|
187
150
|
data-click-event="user-logout"
|
|
188
151
|
/>
|
|
189
152
|
</ExpanderMenu>
|
|
190
|
-
</
|
|
153
|
+
</section>
|
|
191
154
|
</div>;
|
|
192
155
|
|
|
193
156
|
}
|
|
194
157
|
|
|
195
|
-
async getItems() {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
}
|
|
158
|
+
// async getItems() {
|
|
159
|
+
// const ms = this.resolve(MailboxService);
|
|
160
|
+
// const fs = this.resolve(CloudFileService);
|
|
161
|
+
// // const ss = this.resolve(StoreService);
|
|
162
|
+
// const [mailboxes, channels, drives, websites] = await Promise.all([
|
|
163
|
+
// ms.top(),
|
|
164
|
+
// ms.top({ isChannel: true }),
|
|
165
|
+
// fs.top(),
|
|
166
|
+
// fs.topSites()
|
|
167
|
+
// ]);
|
|
168
|
+
// return { mailboxes, channels, drives, websites };
|
|
169
|
+
// }
|
|
207
170
|
|
|
208
171
|
@Action({ onEvent: "user-logout"})
|
|
209
172
|
async userLogout() {
|
|
@@ -28,6 +28,7 @@ import { toKMBString } from "../../../common/NumberFormats";
|
|
|
28
28
|
import { MailAppEvents } from "../../commands/MailAppEvents";
|
|
29
29
|
import EntityService from "../../../services/EntityService";
|
|
30
30
|
import { toSentenceCase } from "../../../common/StringFormat";
|
|
31
|
+
import MenuService from "../../../common/MenuService";
|
|
31
32
|
|
|
32
33
|
const css = styled.css `
|
|
33
34
|
|
|
@@ -189,6 +190,9 @@ export default class MailsPage extends MasterDetailPage {
|
|
|
189
190
|
@InjectProperty
|
|
190
191
|
private mailService: MailService;
|
|
191
192
|
|
|
193
|
+
@InjectProperty
|
|
194
|
+
private menuService: MenuService;
|
|
195
|
+
|
|
192
196
|
private folders: IMailboxFolder[] = [];
|
|
193
197
|
|
|
194
198
|
private currentMailbox: IMailbox;
|
|
@@ -214,6 +218,9 @@ export default class MailsPage extends MasterDetailPage {
|
|
|
214
218
|
|
|
215
219
|
const mailboxID = this.parameters.id;
|
|
216
220
|
const mailbox = this.currentMailbox = await this.mailService.mailbox(mailboxID);
|
|
221
|
+
|
|
222
|
+
this.menuService.addMailbox(this, mailbox);
|
|
223
|
+
|
|
217
224
|
this.folder = mailbox.folders[0];
|
|
218
225
|
if (mailbox.isExternal) {
|
|
219
226
|
const es = this.resolve(EntityService);
|