@social-mail/social-mail-client 1.2.641 → 1.2.643

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.
Files changed (139) hide show
  1. package/dist/admin/AdminAppIndex.pack.js +526 -566
  2. package/dist/admin/AdminAppIndex.pack.js.map +1 -1
  3. package/dist/admin/AdminAppIndex.pack.min.js +9 -13
  4. package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
  5. package/dist/admin/commands/AdminCommands.d.ts +0 -1
  6. package/dist/admin/commands/AdminCommands.d.ts.map +1 -1
  7. package/dist/admin/commands/AdminCommands.js +0 -4
  8. package/dist/admin/commands/AdminCommands.js.map +1 -1
  9. package/dist/admin/drawer/AdminDrawer.d.ts.map +1 -1
  10. package/dist/admin/drawer/AdminDrawer.js +0 -4
  11. package/dist/admin/drawer/AdminDrawer.js.map +1 -1
  12. package/dist/common/commands/CommonCommands.d.ts +1 -1
  13. package/dist/common/commands/CommonCommands.d.ts.map +1 -1
  14. package/dist/common/commands/CommonCommands.js +3 -3
  15. package/dist/common/commands/CommonCommands.js.map +1 -1
  16. package/dist/common/controls/phone-editor/PhoneEditor.d.ts +3 -0
  17. package/dist/common/controls/phone-editor/PhoneEditor.d.ts.map +1 -1
  18. package/dist/common/controls/phone-editor/PhoneEditor.js +25 -4
  19. package/dist/common/controls/phone-editor/PhoneEditor.js.map +1 -1
  20. package/dist/common/pages/stores/StoreDetailPage.d.ts +2 -2
  21. package/dist/common/pages/stores/StoreDetailPage.d.ts.map +1 -1
  22. package/dist/common/pages/stores/StoreDetailPage.js +2 -8
  23. package/dist/common/pages/stores/StoreDetailPage.js.map +1 -1
  24. package/dist/common/pages/stores/payment-gateway/PaymentGatewayEditorPage.d.ts +10 -0
  25. package/dist/common/pages/stores/payment-gateway/PaymentGatewayEditorPage.d.ts.map +1 -0
  26. package/dist/common/pages/stores/payment-gateway/PaymentGatewayEditorPage.js +87 -0
  27. package/dist/common/pages/stores/payment-gateway/PaymentGatewayEditorPage.js.map +1 -0
  28. package/dist/common/pages/stores/payment-gateway/PaymentGatewayListPage.d.ts +23 -0
  29. package/dist/common/pages/stores/payment-gateway/PaymentGatewayListPage.d.ts.map +1 -0
  30. package/dist/common/pages/stores/payment-gateway/PaymentGatewayListPage.js +129 -0
  31. package/dist/common/pages/stores/payment-gateway/PaymentGatewayListPage.js.map +1 -0
  32. package/dist/common/pages/stores/products/EditProductListPage.d.ts +2 -2
  33. package/dist/common/pages/stores/products/EditProductListPage.d.ts.map +1 -1
  34. package/dist/common/pages/stores/products/EditProductListPage.js.map +1 -1
  35. package/dist/common/pages/stores/settings/EditSettingsPage.d.ts +2 -2
  36. package/dist/common/pages/stores/settings/EditSettingsPage.d.ts.map +1 -1
  37. package/dist/common/pages/stores/settings/EditSettingsPage.js +4 -4
  38. package/dist/common/pages/stores/settings/EditSettingsPage.js.map +1 -1
  39. package/dist/model/model.d.ts +50 -51
  40. package/dist/model/model.d.ts.map +1 -1
  41. package/dist/model/model.js +195 -205
  42. package/dist/model/model.js.map +1 -1
  43. package/dist/public/channel/ChannelView.pack.js +303 -261
  44. package/dist/public/channel/ChannelView.pack.js.map +1 -1
  45. package/dist/public/channel/ChannelView.pack.min.js +2 -2
  46. package/dist/public/channel/ChannelView.pack.min.js.map +1 -1
  47. package/dist/public/preview/zip/DownloadZip.pack.js +303 -261
  48. package/dist/public/preview/zip/DownloadZip.pack.js.map +1 -1
  49. package/dist/public/preview/zip/DownloadZip.pack.min.js +1 -1
  50. package/dist/public/preview/zip/DownloadZip.pack.min.js.map +1 -1
  51. package/dist/public/store/Store.d.ts +2 -2
  52. package/dist/public/store/Store.d.ts.map +1 -1
  53. package/dist/public/store/Store.js +29 -7
  54. package/dist/public/store/Store.js.map +1 -1
  55. package/dist/public/store/Store.pack.js +19655 -18064
  56. package/dist/public/store/Store.pack.js.map +1 -1
  57. package/dist/public/store/Store.pack.min.js +370 -161
  58. package/dist/public/store/Store.pack.min.js.map +1 -1
  59. package/dist/public/store/StoreItemDetailView.d.ts +1 -0
  60. package/dist/public/store/StoreItemDetailView.d.ts.map +1 -1
  61. package/dist/public/store/StoreItemDetailView.js +24 -8
  62. package/dist/public/store/StoreItemDetailView.js.map +1 -1
  63. package/dist/public/store/StoreItemListView.d.ts.map +1 -1
  64. package/dist/public/store/StoreItemListView.js +7 -4
  65. package/dist/public/store/StoreItemListView.js.map +1 -1
  66. package/dist/public/store/StoreUrlService.d.ts +22 -15
  67. package/dist/public/store/StoreUrlService.d.ts.map +1 -1
  68. package/dist/public/store/StoreUrlService.js +39 -12
  69. package/dist/public/store/StoreUrlService.js.map +1 -1
  70. package/dist/public/store/cart/ShoppingCart.pack.js +303 -261
  71. package/dist/public/store/cart/ShoppingCart.pack.js.map +1 -1
  72. package/dist/public/store/cart/ShoppingCart.pack.min.js +2 -2
  73. package/dist/public/store/cart/ShoppingCart.pack.min.js.map +1 -1
  74. package/dist/public/user/SiteLogin.d.ts +28 -0
  75. package/dist/public/user/SiteLogin.d.ts.map +1 -0
  76. package/dist/public/user/SiteLogin.js +224 -0
  77. package/dist/public/user/SiteLogin.js.map +1 -0
  78. package/dist/public/user/WebSiteUserService.d.ts +10 -0
  79. package/dist/public/user/WebSiteUserService.d.ts.map +1 -0
  80. package/dist/public/user/WebSiteUserService.js +52 -0
  81. package/dist/public/user/WebSiteUserService.js.map +1 -0
  82. package/dist/services/store/StoreItemService.d.ts +1 -1
  83. package/dist/services/store/StoreItemService.d.ts.map +1 -1
  84. package/dist/services/store/StoreItemService.js +6 -6
  85. package/dist/services/store/StoreItemService.js.map +1 -1
  86. package/dist/services/store/StoreService.d.ts +5 -5
  87. package/dist/services/store/StoreService.d.ts.map +1 -1
  88. package/dist/services/store/StoreService.js +7 -7
  89. package/dist/services/store/StoreService.js.map +1 -1
  90. package/dist/tsconfig.tsbuildinfo +1 -1
  91. package/dist/web/AppIndex.pack.js +528 -301
  92. package/dist/web/AppIndex.pack.js.map +1 -1
  93. package/dist/web/AppIndex.pack.min.js +8 -8
  94. package/dist/web/AppIndex.pack.min.js.map +1 -1
  95. package/dist/web/drawer/AppDrawer.d.ts +1 -1
  96. package/dist/web/drawer/AppDrawer.js +2 -2
  97. package/dist/web/drawer/AppDrawer.js.map +1 -1
  98. package/node_modules/@web-atoms/entity/dist/services/BaseEntityService.d.ts +1 -1
  99. package/node_modules/@web-atoms/entity/dist/services/BaseEntityService.d.ts.map +1 -1
  100. package/node_modules/@web-atoms/entity/dist/services/BaseEntityService.js +108 -56
  101. package/node_modules/@web-atoms/entity/dist/services/BaseEntityService.js.map +1 -1
  102. package/node_modules/@web-atoms/entity/dist/tsconfig.tsbuildinfo +1 -1
  103. package/node_modules/@web-atoms/entity/package.json +1 -1
  104. package/node_modules/@web-atoms/entity/src/services/BaseEntityService.ts +109 -54
  105. package/package.json +2 -2
  106. package/src/admin/commands/AdminCommands.ts +0 -5
  107. package/src/admin/drawer/AdminDrawer.tsx +0 -5
  108. package/src/common/commands/CommonCommands.ts +3 -4
  109. package/src/common/controls/phone-editor/PhoneEditor.tsx +24 -1
  110. package/src/common/pages/stores/StoreDetailPage.tsx +4 -8
  111. package/src/common/pages/stores/payment-gateway/PaymentGatewayEditorPage.tsx +62 -0
  112. package/src/common/pages/stores/payment-gateway/PaymentGatewayListPage.tsx +94 -0
  113. package/src/common/pages/stores/products/EditProductListPage.tsx +2 -2
  114. package/src/common/pages/stores/settings/EditSettingsPage.tsx +3 -3
  115. package/src/model/model.ts +69 -86
  116. package/src/public/store/Store.tsx +18 -4
  117. package/src/public/store/StoreItemDetailView.tsx +17 -4
  118. package/src/public/store/StoreItemListView.tsx +4 -2
  119. package/src/public/store/StoreUrlService.ts +62 -27
  120. package/src/public/user/SiteLogin.tsx +239 -0
  121. package/src/public/user/WebSiteUserService.ts +39 -0
  122. package/src/services/store/StoreItemService.ts +6 -4
  123. package/src/services/store/StoreService.ts +11 -11
  124. package/src/web/drawer/AppDrawer.tsx +2 -2
  125. package/dist/admin/pages/stores/AdminStoreDetailPage.d.ts +0 -11
  126. package/dist/admin/pages/stores/AdminStoreDetailPage.d.ts.map +0 -1
  127. package/dist/admin/pages/stores/AdminStoreDetailPage.js +0 -122
  128. package/dist/admin/pages/stores/AdminStoreDetailPage.js.map +0 -1
  129. package/dist/admin/pages/stores/AdminStoreList.d.ts +0 -13
  130. package/dist/admin/pages/stores/AdminStoreList.d.ts.map +0 -1
  131. package/dist/admin/pages/stores/AdminStoreList.js +0 -131
  132. package/dist/admin/pages/stores/AdminStoreList.js.map +0 -1
  133. package/dist/common/pages/stores/templates/EditStoreTemplatesPage.d.ts +0 -11
  134. package/dist/common/pages/stores/templates/EditStoreTemplatesPage.d.ts.map +0 -1
  135. package/dist/common/pages/stores/templates/EditStoreTemplatesPage.js +0 -28
  136. package/dist/common/pages/stores/templates/EditStoreTemplatesPage.js.map +0 -1
  137. package/src/admin/pages/stores/AdminStoreDetailPage.tsx +0 -102
  138. package/src/admin/pages/stores/AdminStoreList.tsx +0 -109
  139. package/src/common/pages/stores/templates/EditStoreTemplatesPage.tsx +0 -19
@@ -13,11 +13,18 @@ import styled from "@web-atoms/core/dist/style/styled";
13
13
  import FetchBuilder from "@web-atoms/core/dist/services/FetchBuilder";
14
14
  import { formatCurrency, formatPrice } from "../../common/currency";
15
15
  import ToggleButtonBar from "@web-atoms/web-controls/dist/basic/ToggleButtonBar";
16
+ import { StoreUrlService } from "./StoreUrlService";
17
+ import WebSiteUserService from "../user/WebSiteUserService";
16
18
 
17
- const url = (window as any).pageUrl as URL;
19
+ let storeID;
20
+ let itemID;
18
21
 
22
+ const { detail } = StoreUrlService.getParameters();
19
23
 
20
- let {1: storeID = "2", 2: itemID = "4w" } = /^\/store\/([^\/]+)\/([^\/]+)\//.exec(url?.pathname) ?? {} as any;
24
+ if (detail) {
25
+ storeID = detail.storeID;
26
+ itemID = detail.productID;
27
+ }
21
28
 
22
29
  storeID = parseInt(storeID, 36);
23
30
  itemID = parseInt(itemID, 36);
@@ -236,7 +243,7 @@ export default class StoreItemDetailView extends AtomControl {
236
243
 
237
244
  getFiles(item: IStoreItem, variant: IStoreItem, size: IStoreItem) {
238
245
  const variantFiles = variant?.mediaFiles?.filter((x) => x.isPreview);
239
- const files = variantFiles ?? item.mediaFiles.filter((x) => x.isPreview);
246
+ const files = variantFiles ?? item.mediaFiles?.filter((x) => x.isPreview) ?? [];
240
247
  if (size?.mediaFiles) {
241
248
  files.push(... size.mediaFiles.filter((x) => x.isPreview));
242
249
  }
@@ -303,7 +310,7 @@ export default class StoreItemDetailView extends AtomControl {
303
310
  <p class="price">
304
311
  <label text={ formatPrice(price) }/>
305
312
  </p>
306
- <button class="buy">Buy</button>
313
+ <button data-click-event="buy-now" class="buy">Buy</button>
307
314
 
308
315
  { this.model.sizes?.length && <ToggleButtonBar
309
316
  items={this.model.sizes}
@@ -335,6 +342,12 @@ export default class StoreItemDetailView extends AtomControl {
335
342
  this.selectedFile = this.model.mediaFiles.find((x) => x.appFileID === id);
336
343
  }
337
344
 
345
+ @Action({ onEvent: "buy-now"})
346
+ async buyNow() {
347
+ const userService = this.resolve(WebSiteUserService);
348
+ const user = await userService.getUser();
349
+ }
350
+
338
351
  async getItem() {
339
352
  return this.entityService
340
353
  .query(StoreItem, "storeQuery")
@@ -231,9 +231,11 @@ export default class StoreItemListView extends AtomControl {
231
231
  <img
232
232
  src={Bind.oneTimeAsync(() => this.downloadImage(item))}
233
233
  />
234
- <button
234
+ <a
235
+ title={item.name || item.variantFor?.name || item.name}
236
+ href={StoreUrlService.productUrl(item)}><button
235
237
  class="buy"
236
- text="Buy"/>
238
+ text="Buy"/></a>
237
239
  <div class="price">
238
240
  <label text={ formatPrice(item.storeItemPrices?.[0] ?? item.variantFor?.storeItemPrices?.[0] )}/>
239
241
  </div>
@@ -3,21 +3,28 @@ import { toBase36 } from "../../common/toBase36";
3
3
  import { IStoreItem } from "../../model/model";
4
4
 
5
5
  export type IStorePageParameters = {
6
- page: "buy",
7
- productID: any,
8
- currency: string
9
- } | {
10
- page: "detail",
11
- productID: any,
12
- currency: any,
13
- } | {
14
- page: "order",
15
- orderID: any,
16
- } | {
17
- page: "orders"
18
- } | {
19
- page: "checkout",
20
- orderID: any
6
+ login?: {
7
+ storeID: any;
8
+ },
9
+ buy?: {
10
+ productID: any,
11
+ currency: string
12
+ },
13
+ detail?: {
14
+ storeID: any,
15
+ productID: any,
16
+ currency: any,
17
+ },
18
+ order?: {
19
+ storeID: any;
20
+ orderID: any;
21
+ }
22
+ orders?: {
23
+ storeID: any,
24
+ },
25
+ checkout?: {
26
+ orderID: any;
27
+ }
21
28
  };
22
29
 
23
30
  export const StoreUrlService = {
@@ -26,7 +33,7 @@ export const StoreUrlService = {
26
33
  const storeID = toBase36(p.storeID);
27
34
  const productID = toBase36(p.variantForID ?? p.storeItemID);
28
35
  if (AppLocation.isLocalTesting) {
29
- return `?detail=${storeID}/${productID}`;
36
+ return `?detail=store/${storeID}/${productID}`;
30
37
  }
31
38
  return `/store/${storeID}/${productID}/${encodeURIComponent(p.name)}`;
32
39
  },
@@ -42,29 +49,57 @@ export const StoreUrlService = {
42
49
  }
43
50
 
44
51
  const {
45
- 1: route,
46
- 2: p1,
47
- 3: p2
52
+ 1: root,
53
+ 2: route,
54
+ 3: p1,
55
+ 4: p2
48
56
  } = /^\/([^\/]+)\/([^\/]+)\/?([^\/]+)?\/?/.exec(pathname) ?? [];
49
57
 
58
+ if (root !== "store") {
59
+ return {};
60
+ }
61
+
50
62
  switch(route) {
63
+ case "login":
64
+ return {
65
+ login: {
66
+ storeID: p1
67
+ }
68
+ };
69
+ case "orders":
70
+ return {
71
+ orders: {
72
+ storeID: p1
73
+ }
74
+ };
75
+ case "orders":
76
+ return {
77
+ order: {
78
+ storeID: p1,
79
+ orderID: p2
80
+ }
81
+ };
51
82
  case "buy":
52
83
  return {
53
- page: "buy",
54
- productID: p1,
55
- currency: p2 || "INR"
84
+ buy: {
85
+ productID: p1,
86
+ currency: p2 || "INR"
87
+ }
56
88
  };
57
89
  case "checkout":
58
90
  return {
59
- page: "checkout",
60
- orderID: p1
91
+ checkout: {
92
+ orderID: p1
93
+ }
61
94
  };
62
95
  }
63
96
 
64
97
  return {
65
- page: "detail",
66
- productID: p1,
67
- currency: p2 || "INR"
98
+ detail: {
99
+ storeID: route,
100
+ productID: p1,
101
+ currency: p2 || "INR"
102
+ }
68
103
  };
69
104
 
70
105
  }
@@ -0,0 +1,239 @@
1
+ import Bind from "@web-atoms/core/dist/core/Bind";
2
+ import XNode from "@web-atoms/core/dist/core/XNode";
3
+ import styled from "@web-atoms/core/dist/style/styled";
4
+ import { AtomControl } from "@web-atoms/core/dist/web/controls/AtomControl";
5
+ import Form from "@web-atoms/web-controls/dist/basic/Form";
6
+ import FormField from "@web-atoms/web-controls/dist/basic/FormField";
7
+ import ToggleButtonBar from "@web-atoms/web-controls/dist/basic/ToggleButtonBar";
8
+ import PhoneEditor from "../../common/controls/phone-editor/PhoneEditor";
9
+ import { EmailIconButton, EmailIconTextButton, SaveIconTextButton, UploadIconButton } from "../../common/controls/buttons/IconButton";
10
+ import Action from "@web-atoms/core/dist/view-model/Action";
11
+ import InjectProperty from "@web-atoms/core/dist/core/InjectProperty";
12
+ import EntityService from "../../services/EntityService";
13
+ import { IVerificationToken, VerificationToken, VerificationTokenAddress } from "../../model/model";
14
+ import Loader from "../../common/controls/Loader";
15
+ import { AtomDisposableList } from "@web-atoms/core/dist/core/AtomDisposableList";
16
+ import { StringHelper } from "@web-atoms/core/dist/core/StringHelper";
17
+ import QRCodeControl from "../../common/controls/qrcode/QRCode";
18
+
19
+ styled.css `
20
+ position: absolute;
21
+ left: 0;
22
+ top: 0;
23
+ width: 100%;
24
+ height: 100vh;
25
+
26
+ background-color: canvas;
27
+
28
+ display: grid;
29
+ align-items: center;
30
+ justify-items: center;
31
+
32
+ `.installGlobal("site-login");
33
+
34
+ styled.css `
35
+ & [styler-layout=component] {
36
+ position: relative;
37
+ }
38
+ `.installGlobal("body");
39
+
40
+
41
+ export interface IVerification {
42
+ id: any;
43
+ accessCode: string;
44
+ code: string;
45
+ }
46
+
47
+ export interface IUserModel {
48
+ emailAddress?: string;
49
+ phoneNumber?: string;
50
+ name?: string;
51
+
52
+ email?: IVerification;
53
+ phone?: IVerification;
54
+ captcha?: IVerification;
55
+ }
56
+
57
+ const verifyModes = [
58
+ { label: "Email", value: "email" },
59
+ { label: "Cell Phone", value: "phone" }
60
+ ];
61
+
62
+ export default class SiteLogin extends AtomControl {
63
+
64
+ @InjectProperty
65
+ entityService: EntityService;
66
+
67
+ model: IUserModel = { emailAddress: "", phoneNumber: "", name: "" };
68
+
69
+ verifyMode: string = "email";
70
+
71
+ constructor(app, e = document.createElement("site-login")) {
72
+ super(app, e);
73
+ this.element.setAttribute("site-login", "true");
74
+ this.pushInit();
75
+ }
76
+
77
+ async init() {
78
+
79
+ this.renderer = <div><Loader/></div>;
80
+
81
+ await this.verifyCaptcha();
82
+ }
83
+
84
+ async verifyCaptcha() {
85
+
86
+ const captcha = await this.entityService.save(VerificationToken.create({
87
+ type: "captcha"
88
+ }));
89
+
90
+ const { verificationID: id, accessCode } = captcha;
91
+
92
+ this.model.captcha = {
93
+ id,
94
+ accessCode,
95
+ code: ""
96
+ };
97
+
98
+ this.renderer = <div>
99
+ <Form>
100
+ <FormField label="Captcha">
101
+ <img src={`/api/users/captcha/${id}/${accessCode}`}/>
102
+ </FormField>
103
+ <FormField label="Enter 5 Digit Code">
104
+ <input
105
+ type="tel"
106
+ value={Bind.twoWaysImmediate(() => this.model.captcha.code)}/>
107
+ </FormField>
108
+ <div>
109
+ <UploadIconButton data-submit-event="verify-captcha"/>
110
+ </div>
111
+ </Form>
112
+ </div>;
113
+
114
+ await this.waitForEvents("verify-captcha");
115
+
116
+ const v = await this.entityService.invoke(VerificationToken, "verifyCode", captcha, id, accessCode, this.model.captcha.code);
117
+ if (!v.verified) {
118
+ alert("Verification failed, try again");
119
+ await this.verifyCaptcha();
120
+ return;
121
+ }
122
+
123
+ await this.displayCheckUserExists();
124
+
125
+ }
126
+
127
+
128
+ async displayCheckUserExists() {
129
+ this.renderer = <div>
130
+ <Form>
131
+ <FormField label="Verify">
132
+ <ToggleButtonBar items={verifyModes} value={Bind.twoWaysImmediate(() => this.verifyMode)} />
133
+ </FormField>
134
+ <FormField label="Email" style-display={Bind.oneWay(() => this.verifyMode === "email")}>
135
+ <input value={Bind.twoWaysImmediate(() => this.model.emailAddress)} />
136
+ </FormField>
137
+ <FormField label="Cell Phone" style-display={Bind.oneWay(() => this.verifyMode === "phone")}>
138
+ <PhoneEditor value={Bind.twoWaysImmediate(() => this.model.phoneNumber)} />
139
+ </FormField>
140
+ <div>
141
+ <EmailIconTextButton
142
+ data-submit-event="proceed-verification"
143
+ />
144
+ </div>
145
+ </Form>
146
+ </div>;
147
+
148
+ await this.waitForEvents("proceed-verification");
149
+
150
+ const isEmail = this.verifyMode === "email";
151
+
152
+ const type = isEmail ? "email" : "sms";
153
+
154
+ const address = isEmail ? this.model.emailAddress : this.model.phoneNumber;
155
+
156
+ const ve = VerificationToken.create({
157
+ type: "email",
158
+ verifyAddresses: address
159
+ });
160
+
161
+ await this.entityService.save(ve, (c) => c.include((x) => x.addresses));
162
+
163
+ if (!isEmail) {
164
+ this.renderer = <div>
165
+ <QRCodeControl
166
+ smsConfig={ve.smsConfig}
167
+ />
168
+ </div>;
169
+
170
+ for (let index = 0; index < 5; index++) {
171
+ const v = await this.entityService.query(VerificationToken, "get", ve.verificationID, ve.accessCode)
172
+ .firstOrDefault();
173
+ if (v.verified) {
174
+ ve.verified = true;
175
+ break;
176
+ }
177
+ }
178
+
179
+ if (!ve.verified) {
180
+ await this.displayCheckUserExists();
181
+ return;
182
+ }
183
+ }
184
+
185
+ }
186
+
187
+ @Action({ onEvent: "verify-email"})
188
+ async verifyEmail() {
189
+
190
+ const address = this.model.emailAddress;
191
+
192
+ const ve = VerificationToken.create({
193
+ type: "email",
194
+ verifyAddresses: [address]
195
+ });
196
+ await this.entityService.save(ve, (c) => c);
197
+
198
+ this.renderer = <div>
199
+ <Form>
200
+ <FormField label="Code">
201
+
202
+ </FormField>
203
+ </Form>
204
+ </div>;
205
+ }
206
+
207
+ @Action({ onEvent: "verify-phone"})
208
+ async verifyPhone() {
209
+ const address = this.model.emailAddress;
210
+
211
+ const ve = VerificationToken.create({
212
+ type: "email",
213
+ verifyAddresses: address
214
+ });
215
+ await this.entityService.save(ve, (c) => c);
216
+
217
+ this.renderer = <div>
218
+ <Form>
219
+ <FormField label="Code">
220
+
221
+ </FormField>
222
+ </Form>
223
+ </div>;
224
+ }
225
+
226
+ private waitForEvents<T = any>( ... names: string[]): Promise<CustomEvent<T>> {
227
+ return new Promise((resolve, reject) => {
228
+
229
+ const d = new AtomDisposableList();
230
+ for (const n of names) {
231
+ const name = StringHelper.fromHyphenToCamel(n);
232
+ d.add(this.bindEvent(this.element, name, (ce: CustomEvent) => {
233
+ d.dispose();
234
+ resolve(ce);
235
+ } ));
236
+ }
237
+ });
238
+ }
239
+ }
@@ -0,0 +1,39 @@
1
+ import DISingleton from "@web-atoms/core/dist/di/DISingleton";
2
+ import { IUser, LoginSession } from "../../model/model";
3
+ import { Inject } from "@web-atoms/core/dist/di/Inject";
4
+ import EntityService from "../../services/EntityService";
5
+ import SocialMailApp from "../../common/SocialMailApp";
6
+ import SiteLogin from "./SiteLogin";
7
+ import { App } from "@web-atoms/core/dist/App";
8
+
9
+ @DISingleton()
10
+ export default class WebSiteUserService {
11
+
12
+ @Inject
13
+ entityService: EntityService;
14
+
15
+ @Inject
16
+ app: App;
17
+
18
+ user: IUser = null;
19
+
20
+ public async getUser() {
21
+ this.user ??= (await this.entityService.query(LoginSession, "currentUser").firstOrDefault())?.user;
22
+ SocialMailApp.user = this.user;
23
+ if (this.user?.userID) {
24
+ // let start syncing...
25
+ // this.app.resolve(LocalDbService).syncAll(this.user.userID).catch(console.error);
26
+ return this.user;
27
+ }
28
+
29
+
30
+ // request login..
31
+ const sl = new SiteLogin(this.app);
32
+
33
+ const c = document.body.querySelector(`[styler-layout="component"]`) ?? document.body;
34
+ c.appendChild(sl.element);
35
+
36
+ return this.user;
37
+ }
38
+
39
+ }
@@ -1,7 +1,7 @@
1
1
  import DISingleton from "@web-atoms/core/dist/di/DISingleton";
2
2
  import { Inject } from "@web-atoms/core/dist/di/Inject";
3
3
  import EntityService from "../EntityService";
4
- import { AppFile, IStoreItem, Store, StoreItem, StoreMediaFile } from "../../model/model";
4
+ import { AppFile, IStoreItem, StoreItem, StoreMediaFile, WebSiteFolder } from "../../model/model";
5
5
  import { Sql } from "../../common/Sql";
6
6
  import DateTime from "@web-atoms/date-time/dist/DateTime";
7
7
  import MimeTypeService from "../files/MimeTypeService";
@@ -20,8 +20,9 @@ export default class StoreItemService {
20
20
  cloudFileService: CloudFileService;
21
21
 
22
22
  getStore(storeID: any) {
23
- return this.entityService.query(Store)
24
- .where({ storeID }, (p) => (x) => x.storeID === p.storeID)
23
+ return this.entityService.query(WebSiteFolder)
24
+ .where({ storeID }, (p) => (x) => x.folderID === p.storeID)
25
+ .include((x) => x.folder)
25
26
  .firstOrDefault();
26
27
  }
27
28
 
@@ -43,7 +44,8 @@ export default class StoreItemService {
43
44
  const item = items.find((x) => x.storeItemID === id);
44
45
  if (!item.folderID) {
45
46
  // lets create one...
46
- const store = await this.entityService.query(Store).where({ storeID: item.storeID}, (p) => (x) => x.storeID === p.storeID)
47
+ const store = await this.entityService.query(WebSiteFolder).where({ storeID: item.storeID}, (p) => (x) => x.folderID === p.storeID)
48
+ .include((x) => x.folder)
47
49
  .firstOrDefault();
48
50
  const { folderID: parentID} = store;
49
51
  const now = DateTime.now;
@@ -1,7 +1,7 @@
1
1
  import DISingleton from "@web-atoms/core/dist/di/DISingleton";
2
2
  import { Inject } from "@web-atoms/core/dist/di/Inject";
3
3
  import EntityService from "../EntityService";
4
- import { IStore, Store } from "../../model/model";
4
+ import { IWebSiteFolder, WebSiteFolder } from "../../model/model";
5
5
  import { Sql } from "../../common/Sql";
6
6
 
7
7
  @DISingleton()
@@ -11,12 +11,11 @@ export default class StoreService {
11
11
  private entityService: EntityService;
12
12
 
13
13
  async get(storeID) {
14
- return this.entityService.query(Store)
15
- .where({ storeID }, (p) => (x) => x.storeID === p.storeID)
16
- .include((x) => [
17
- x.storeUsers.forEach((u) => u.user),
18
- x.storeWebsites.forEach((w) => w.website.folder)
19
- ])
14
+ return this.entityService.query(WebSiteFolder)
15
+ .where({ storeID }, (p) => (x) => x.folderID === p.storeID)
16
+ .include((x) =>
17
+ x.folder.accessList
18
+ )
20
19
  .firstOrDefault();
21
20
  }
22
21
 
@@ -31,13 +30,14 @@ export default class StoreService {
31
30
  size = 100,
32
31
  cancelToken
33
32
  }) {
34
- let q = this.entityService.query(Store);
33
+ let q = this.entityService.query(WebSiteFolder);
35
34
  if (search) {
36
35
  search = search + "%";
37
- q = q.where({ search }, (p) => (x) => Sql.text.like(x.name, p.search));
36
+ q = q.where({ search }, (p) => (x) => Sql.text.like(x.folder.name, p.search));
38
37
  }
39
38
  return q
40
- .orderByDescending((x) => x.storeID)
39
+ .orderByDescending((x) => x.folderID)
40
+ .include((x) => x.folder)
41
41
  .toPagedList({
42
42
  start,
43
43
  size,
@@ -45,7 +45,7 @@ export default class StoreService {
45
45
  });
46
46
  }
47
47
 
48
- async save(store: IStore) {
48
+ async save(store: IWebSiteFolder) {
49
49
  await this.entityService.save(store, (x) => x);
50
50
  }
51
51
 
@@ -136,8 +136,8 @@ export default class AppDrawer extends Drawer {
136
136
  commandLink={null}
137
137
  />
138
138
  { ... stores.map((s) => <MenuItem
139
- label={s.name}
140
- commandLink={AppCommands.editStore.displayRoute({ id: s.storeID})}
139
+ label={s.folder.name}
140
+ commandLink={AppCommands.editStore.displayRoute({ id: s.folderID})}
141
141
  />)}
142
142
  </ExpanderMenu>}
143
143
  { mailboxes.length && <MenuItem
@@ -1,11 +0,0 @@
1
- import { ContentPage } from "@web-atoms/web-controls/dist/mobile-app/MobileApp";
2
- import { IStore, IStoreUser, IWebSiteStore } from "../../../model/model";
3
- export default class AdminStoreDetailPage extends ContentPage<IStore> {
4
- model: IStore;
5
- private storeService;
6
- init(): Promise<void>;
7
- chooseUser(): Promise<IStoreUser>;
8
- chooseWebSite(): Promise<IWebSiteStore>;
9
- saveStore(): Promise<void>;
10
- }
11
- //# sourceMappingURL=AdminStoreDetailPage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdminStoreDetailPage.d.ts","sourceRoot":"","sources":["../../../../src/admin/pages/stores/AdminStoreDetailPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mDAAmD,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAA0C,MAAM,sBAAsB,CAAC;AAiBjH,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,WAAW,CAAC,MAAM,CAAC;IAE1D,KAAK,EAAE,MAAM,CAAC;IAGrB,OAAO,CAAC,YAAY,CAAe;IAE7B,IAAI;IAkDJ,UAAU;IAQV,aAAa;IAcb,SAAS;CAIlB"}