@social-mail/social-mail-client 1.2.489 → 1.2.490

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 (68) hide show
  1. package/dist/admin/AdminAppIndex.pack.js +941 -208
  2. package/dist/admin/AdminAppIndex.pack.js.map +1 -1
  3. package/dist/admin/AdminAppIndex.pack.min.js +27 -2
  4. package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
  5. package/dist/model/model.d.ts +9 -5
  6. package/dist/model/model.d.ts.map +1 -1
  7. package/dist/model/model.js +907 -207
  8. package/dist/model/model.js.map +1 -1
  9. package/dist/public/channel/ChannelView.pack.js +907 -207
  10. package/dist/public/channel/ChannelView.pack.js.map +1 -1
  11. package/dist/public/channel/ChannelView.pack.min.js +1 -1
  12. package/dist/public/channel/ChannelView.pack.min.js.map +1 -1
  13. package/dist/public/contact-us/ContactUsApp.d.ts +1 -0
  14. package/dist/public/contact-us/ContactUsApp.d.ts.map +1 -1
  15. package/dist/public/contact-us/ContactUsApp.js +100 -14
  16. package/dist/public/contact-us/ContactUsApp.js.map +1 -1
  17. package/dist/public/contact-us/ContactUsApp.pack.js +100 -14
  18. package/dist/public/contact-us/ContactUsApp.pack.js.map +1 -1
  19. package/dist/public/contact-us/ContactUsApp.pack.min.js +82 -14
  20. package/dist/public/contact-us/ContactUsApp.pack.min.js.map +1 -1
  21. package/dist/public/store/Store.pack.js +907 -207
  22. package/dist/public/store/Store.pack.js.map +1 -1
  23. package/dist/public/store/Store.pack.min.js +1 -1
  24. package/dist/public/store/Store.pack.min.js.map +1 -1
  25. package/dist/public/store/cart/ShoppingCart.pack.js +907 -207
  26. package/dist/public/store/cart/ShoppingCart.pack.js.map +1 -1
  27. package/dist/public/store/cart/ShoppingCart.pack.min.js +1 -1
  28. package/dist/public/store/cart/ShoppingCart.pack.min.js.map +1 -1
  29. package/dist/services/local-db/LocalDbService.d.ts.map +1 -1
  30. package/dist/services/local-db/LocalDbService.js +12 -5
  31. package/dist/services/local-db/LocalDbService.js.map +1 -1
  32. package/dist/services/local-db/core/LocalTable.d.ts +4 -1
  33. package/dist/services/local-db/core/LocalTable.d.ts.map +1 -1
  34. package/dist/services/local-db/core/LocalTable.js +51 -1
  35. package/dist/services/local-db/core/LocalTable.js.map +1 -1
  36. package/dist/services/local-db/core/TemplateQuery.d.ts +1 -0
  37. package/dist/services/local-db/core/TemplateQuery.d.ts.map +1 -1
  38. package/dist/services/local-db/core/TemplateQuery.js +29 -4
  39. package/dist/services/local-db/core/TemplateQuery.js.map +1 -1
  40. package/dist/services/local-db/mailboxes/LocalMailbox.d.ts +0 -1
  41. package/dist/services/local-db/mailboxes/LocalMailbox.d.ts.map +1 -1
  42. package/dist/services/local-db/mailboxes/LocalMailbox.js +0 -12
  43. package/dist/services/local-db/mailboxes/LocalMailbox.js.map +1 -1
  44. package/dist/site-editor/editor/HtmlPageEditor.d.ts.map +1 -1
  45. package/dist/site-editor/editor/HtmlPageEditor.js +34 -1
  46. package/dist/site-editor/editor/HtmlPageEditor.js.map +1 -1
  47. package/dist/tsconfig.tsbuildinfo +1 -1
  48. package/dist/web/AppIndex.pack.js +941 -208
  49. package/dist/web/AppIndex.pack.js.map +1 -1
  50. package/dist/web/AppIndex.pack.min.js +27 -2
  51. package/dist/web/AppIndex.pack.min.js.map +1 -1
  52. package/dist/web/page/files/shares/AddSharePage.d.ts +0 -1
  53. package/dist/web/page/files/shares/AddSharePage.d.ts.map +1 -1
  54. package/node_modules/@web-atoms/entity/dist/services/BaseEntityService.d.ts +2 -0
  55. package/node_modules/@web-atoms/entity/dist/services/BaseEntityService.d.ts.map +1 -1
  56. package/node_modules/@web-atoms/entity/dist/services/BaseEntityService.js.map +1 -1
  57. package/node_modules/@web-atoms/entity/dist/tsconfig.tsbuildinfo +1 -1
  58. package/node_modules/@web-atoms/entity/package.json +1 -1
  59. package/node_modules/@web-atoms/entity/src/services/BaseEntityService.ts +2 -0
  60. package/package.json +2 -2
  61. package/src/model/model.ts +84 -82
  62. package/src/public/contact-us/ContactUsApp.tsx +102 -17
  63. package/src/services/LoginService.ts +1 -1
  64. package/src/services/local-db/LocalDbService.ts +12 -5
  65. package/src/services/local-db/core/LocalTable.ts +43 -3
  66. package/src/services/local-db/core/TemplateQuery.ts +30 -4
  67. package/src/services/local-db/mailboxes/LocalMailbox.ts +10 -10
  68. package/src/site-editor/editor/HtmlPageEditor.tsx +31 -1
@@ -10,29 +10,97 @@ import Pack from "@web-atoms/core/dist/Pack";
10
10
  import Action from "@web-atoms/core/dist/view-model/Action";
11
11
 
12
12
  styled.css `
13
- display: flex;
14
- justify-content: center;
13
+ display: grid;
15
14
  align-items: center;
15
+ justify-items: stretch;
16
+
17
+ padding: 20px;
18
+
19
+ & [data-form] {
20
+ display: grid;
21
+ grid-template-columns: 1fr 1fr;
22
+ grid-template-rows: auto auto auto auto auto;
23
+
24
+ background-color: transparent;
25
+
26
+ & .field-error, & .error-message {
27
+ background-color: transparent;
28
+ color: red;
29
+ }
30
+
31
+ & > * {
32
+ background-color: #80808015;
33
+ padding: 5px;
34
+ padding-left: 10px;
35
+ padding-right: 10px;
36
+ border-radius: 10px;
37
+ }
38
+
39
+ }
40
+
41
+ & .error-message {
42
+ grid-column: 1 / span 2;
43
+ grid-row: 1;
44
+ }
45
+
46
+ & .name {
47
+ grid-column: 1;
48
+ grid-row: 2;
49
+ }
50
+
51
+ & .contact {
52
+ grid-column: 2;
53
+ grid-row: 2;
54
+ }
55
+
56
+ & .questions {
57
+ grid-column: 1 / span 2;
58
+ grid-row: 3;
59
+ }
60
+
61
+ & .verify {
62
+ grid-column: 1 / span 2;
63
+ grid-row: 4;
64
+ & img {
65
+ max-width: 250px;
66
+ }
67
+ }
68
+
69
+ & .email {
70
+ grid-column: 1 / span 2;
71
+ grid-row: 5;
72
+ background-color: transparent;
73
+ place-self: center;
74
+ & button {
75
+ display: flex;
76
+ gap: 10px;
77
+ background-color: lightgreen;
78
+ font-size: larger;
79
+ border: none;
80
+ outline: none;
81
+ padding: 10px;
82
+ padding-left: 20px;
83
+ padding-right: 20px;
84
+ border-radius: 20px;
85
+ margin-bottom: 20px;
86
+ &:hover {
87
+ box-shadow: 0 0 5px 5px #0000FF50;
88
+ }
89
+ }
90
+ }
91
+
16
92
  & .captcha {
17
93
  display: flex;
18
94
  flex-direction: column;
19
95
  gap: 10px;
20
96
  }
97
+
98
+
99
+
21
100
  & input, &,textarea {
22
101
  border: none;
23
102
  outline: none;
24
103
  background-color: transparent;
25
- border-bottom: solid 1px lightgray;
26
- }
27
- & button {
28
- display: flex;
29
- gap: 10px;
30
- background-color: lightgreen;
31
- padding: 2px;
32
- padding-left: 10px;
33
- padding-right: 10px;
34
- border-radius: 10px;
35
- margin-bottom: 10px;
36
104
  }
37
105
  `.installGlobal("contact-us");
38
106
 
@@ -61,26 +129,30 @@ export default class ContactUsApp extends AtomControl {
61
129
 
62
130
  captcha.code = "";
63
131
 
64
- this.renderer = <div>
132
+ this.renderer = <div event-click={(e) => this.selectInput(e.target as any)}>
65
133
  <Form>
66
- <FormField label="Your Name"
134
+ <FormField class="name" label="Your Name"
67
135
  error={Bind.oneWay(() => (this.model.name) ? "" : "Name is required")}>
68
136
  <input
69
137
  autofocus={true}
70
138
  value={Bind.twoWaysImmediate(() => this.model.name)}/>
71
139
  </FormField>
72
140
  <FormField
141
+ class="contact"
73
142
  label="Your Phone/Email"
74
143
  error={Bind.oneWay(() => (this.model.email || this.model.phone) ? "" : "Email or Phone is required")}>
75
144
  <input
76
145
  value={Bind.twoWaysImmediate(() => this.model.email)}/>
77
146
  </FormField>
78
- <FormField label="Questions">
147
+ <FormField
148
+ class="questions"
149
+ label="Questions">
79
150
  <textarea
80
151
  rows="8"
81
152
  value={Bind.twoWaysImmediate(() => this.model.description)}/>
82
153
  </FormField>
83
154
  <FormField
155
+ class="verify"
84
156
  label="Verify Code"
85
157
  error={Bind.oneWay(() => this.model.captcha.code ? "" : "Code is required")}>
86
158
  <div>
@@ -90,7 +162,9 @@ export default class ContactUsApp extends AtomControl {
90
162
  </div>
91
163
  </div>
92
164
  </FormField>
93
- <FormField label="">
165
+ <FormField
166
+ class="email"
167
+ label="">
94
168
  <div>
95
169
  <EmailIconTextButton
96
170
  data-submit-event="send-email"
@@ -102,6 +176,17 @@ export default class ContactUsApp extends AtomControl {
102
176
  </div>;
103
177
  }
104
178
 
179
+ selectInput(target: HTMLElement) {
180
+ while(target) {
181
+ const input = target.querySelector("input") ?? target.querySelector("textarea");
182
+ if (input) {
183
+ input.focus();
184
+ return;
185
+ }
186
+ target = target.parentElement;
187
+ }
188
+ }
189
+
105
190
  @Action({
106
191
  onEvent: "send-email"
107
192
  })
@@ -8,7 +8,7 @@ import WebPushService from "./WebPushService";
8
8
  import sleep from "@web-atoms/core/dist/core/sleep";
9
9
  import DateTime from "@web-atoms/date-time/dist/DateTime";
10
10
  import { CancelToken } from "@web-atoms/core/dist/core/types";
11
- import LocalDbService from "./local-db/LocalDbService";
11
+ // import LocalDbService from "./local-db/LocalDbService";
12
12
 
13
13
  @DISingleton()
14
14
  export default class LoginService {
@@ -49,12 +49,19 @@ export default class LocalDbService {
49
49
  }
50
50
 
51
51
  async query<T>(a: TemplateStringsArray | TemplateQuery, ... args: any[]): Promise<IResult<T>> {
52
- const pg = await this.ready();
53
- if (!(a instanceof TemplateQuery)) {
54
- a = TemplateQuery.create(a, ... args);
52
+ let q;
53
+ try {
54
+ const pg = await this.ready();
55
+ if (!(a instanceof TemplateQuery)) {
56
+ a = TemplateQuery.create(a, ... args);
57
+ }
58
+ q = a.toQuery();
59
+ console.log (q);
60
+ return await pg.query(q.text, q.values);
61
+ } catch (error) {
62
+ console.error(`Failed executing ${q.text}`);
63
+ console.error(error);
55
64
  }
56
- const q = a.toQuery();
57
- return pg.query(q.text, q.values);
58
65
  }
59
66
 
60
67
  }
@@ -27,7 +27,23 @@ export default abstract class LocalTable<T> {
27
27
 
28
28
  public abstract startSync(): Promise<void>;
29
29
 
30
- public abstract init(): Promise<void>;
30
+ public async afterInit() {
31
+
32
+ }
33
+
34
+ public async init() {
35
+ let keys = TemplateQuery.fragments(",");
36
+ let pKeys = TemplateQuery.fragments(",");
37
+ for (const { name, dataType, length } of this.model.schema.keys) {
38
+ keys = keys.add `${TemplateQuery.literal(name)} ${TemplateQuery.literal(this.toPgType(dataType, length))}`;
39
+ pKeys = pKeys.add `${TemplateQuery.literal(name)}`;
40
+ }
41
+ await this.query `CREATE TABLE IF NOT EXISTS ${this.name} (${keys}, PRIMARY KEY (${pKeys}))`;
42
+ for (const { name, dataType, length } of this.model.schema.properties) {
43
+ await this.query `ALTER TABLE ${this.name} ADD COLUMN IF NOT EXISTS ${TemplateQuery.literal(name)} ${TemplateQuery.literal(this.toPgColumn(dataType, length))}`;
44
+ }
45
+ await this.afterInit();
46
+ }
31
47
 
32
48
  public query(a: TemplateStringsArray | TemplateQuery, ... args: any[]) {
33
49
  return this.service.query(a, ... args) as Promise<IResult<T>>;
@@ -38,7 +54,7 @@ export default abstract class LocalTable<T> {
38
54
  // try to update directly...
39
55
  let where = TemplateQuery.fragments(" AND ");
40
56
  for(const key of this.model.schema.keys) {
41
- where = where.add `${TemplateQuery.literal(key.name)} === ${element[key.name]}`;
57
+ where = where.add `${TemplateQuery.literal(key.name)} = ${element[key.name]}`;
42
58
  }
43
59
 
44
60
  let fields = TemplateQuery.fragments(" , ");
@@ -69,5 +85,29 @@ export default abstract class LocalTable<T> {
69
85
 
70
86
  }
71
87
 
88
+ private toPgColumn(type: string, length: number) {
89
+ const pgType = this.toPgType(type, length);
90
+ return pgType + " NULL";
91
+ }
72
92
 
73
- }
93
+ private toPgType(type: string, length: number): string {
94
+ switch(type) {
95
+ case "Integer":
96
+ return "int";
97
+ case "BigInt":
98
+ return "bigint";
99
+ case "Boolean":
100
+ case "Bool":
101
+ return "bool";
102
+ case "DateTime":
103
+ return "timestamp";
104
+ case "Decimal":
105
+ case "Double":
106
+ return "real";
107
+ }
108
+ if (length) {
109
+ return `varchar (${length})`;
110
+ }
111
+ return "text";
112
+ }
113
+ }
@@ -88,11 +88,16 @@ export default class TemplateQuery {
88
88
  text += literal;
89
89
  continue;
90
90
  }
91
- let an = map.get(arg ?? null);
92
- if (!an) {
91
+ const av = arg ?? null;
92
+ if (av === null) {
93
+ text += " NULL ";
94
+ continue;
95
+ }
96
+ let an = map.get(av);
97
+ if (an === void 0) {
93
98
  an = argName(values.length);
94
- map.set(arg, an);
95
- values.push(arg);
99
+ map.set(av, an);
100
+ values.push(this.toValue(av));
96
101
  }
97
102
  text += an;
98
103
  }
@@ -101,6 +106,27 @@ export default class TemplateQuery {
101
106
  values
102
107
  };
103
108
  }
109
+
110
+ toValue(av: any): any {
111
+ if (av === void 0) {
112
+ return null;
113
+ }
114
+ if (av === null) {
115
+ return null;
116
+ }
117
+ if (av instanceof Date) {
118
+ return av.toJSON();
119
+ }
120
+ switch(typeof av) {
121
+ case "boolean":
122
+ return av;
123
+ case "string":
124
+ case "number":
125
+ case "bigint":
126
+ return (av as any).toString();
127
+ }
128
+ return av;
129
+ }
104
130
  }
105
131
 
106
132
  export interface IQuery {
@@ -46,15 +46,15 @@ export default class LocalMailbox extends LocalTable<IMailbox> {
46
46
  } while(true);
47
47
  }
48
48
 
49
- public async init() {
50
- await this.service.query `CREATE TABLE ${this.name} IF NOT EXISTS
51
- (
52
- mailboxId char (200),
53
- name char (200),
54
- dateUpdated timestamp,
55
- primary key (mailboxId)
56
- )
57
- `;
58
- }
49
+ // public async init() {
50
+ // await this.service.query `CREATE TABLE IF NOT EXISTS ${this.name}
51
+ // (
52
+ // mailboxId char (200),
53
+ // name char (200),
54
+ // dateUpdated timestamp,
55
+ // primary key (mailboxId)
56
+ // )
57
+ // `;
58
+ // }
59
59
 
60
60
  }
@@ -121,6 +121,31 @@ import BreadCrum from "./BreadCrum";
121
121
  pointer-events: none;
122
122
  outline: solid 1px green;
123
123
  z-index: 22;
124
+ & > .lt, & > .rt, & > .lb, & > .rb {
125
+ position: absolute;
126
+ width: 10px;
127
+ height: 10px;
128
+ background-color: blue;
129
+ border: solid 1px white;
130
+ display: none;
131
+ border-radius: 5px;
132
+ }
133
+ & > .lt {
134
+ top: -5px;
135
+ left: -5px;
136
+ }
137
+ & > .rt {
138
+ top: -5px;
139
+ right: -5px;
140
+ }
141
+ & > .lb {
142
+ bottom: -5px;
143
+ left: -5px;
144
+ }
145
+ & > .rb {
146
+ bottom: -5px;
147
+ right: -5px;
148
+ }
124
149
  & > div {
125
150
  pointer-events: all;
126
151
  position: absolute;
@@ -345,12 +370,17 @@ export default class HtmlPageEditor extends AtomControl {
345
370
  style-left={Bind.oneWay(() => this.dropTarget.left)}
346
371
  style-top={Bind.oneWay(() => this.dropTarget.top)}
347
372
  style-width={Bind.oneWay(() => this.dropTarget.width)}
348
- style-height={Bind.oneWay(() => this.dropTarget.height)}></div>
373
+ style-height={Bind.oneWay(() => this.dropTarget.height)}>
374
+ </div>
349
375
  <div data-element="selection"
350
376
  style-left={Bind.oneWay(() => this.selection.left)}
351
377
  style-top={Bind.oneWay(() => this.selection.top)}
352
378
  style-width={Bind.oneWay(() => this.selection.width)}
353
379
  style-height={Bind.oneWay(() => this.selection.height)}>
380
+ <i class="lt" />
381
+ <i class="rt" />
382
+ <i class="lb" />
383
+ <i class="rb" />
354
384
  <div>
355
385
  <i
356
386
  class="fa-regular fa-arrow-up"