@social-mail/social-mail-client 1.2.490 → 1.2.492
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 +3 -2
- package/dist/admin/AdminAppIndex.pack.js.map +1 -1
- package/dist/admin/AdminAppIndex.pack.min.js +2 -2
- package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
- package/dist/common/pages/stores/products/EditProductDetailPage.d.ts.map +1 -1
- package/dist/common/pages/stores/products/EditProductDetailPage.js +2 -1
- package/dist/common/pages/stores/products/EditProductDetailPage.js.map +1 -1
- package/dist/public/channel/ChannelView.pack.js +1 -1
- package/dist/public/channel/ChannelView.pack.js.map +1 -1
- package/dist/public/channel/ChannelView.pack.min.js +1 -1
- package/dist/public/channel/ChannelView.pack.min.js.map +1 -1
- package/dist/public/contact-us/ContactUsApp.pack.js +1 -1
- package/dist/public/contact-us/ContactUsApp.pack.js.map +1 -1
- package/dist/public/contact-us/ContactUsApp.pack.min.js +1 -1
- package/dist/public/contact-us/ContactUsApp.pack.min.js.map +1 -1
- package/dist/public/preview/pdf/PreviewPDF.pack.js +1 -1
- package/dist/public/preview/pdf/PreviewPDF.pack.js.map +1 -1
- package/dist/public/preview/pdf/PreviewPDF.pack.min.js +1 -1
- package/dist/public/preview/pdf/PreviewPDF.pack.min.js.map +1 -1
- package/dist/public/store/Store.pack.js +140 -76
- package/dist/public/store/Store.pack.js.map +1 -1
- package/dist/public/store/Store.pack.min.js +139 -76
- package/dist/public/store/Store.pack.min.js.map +1 -1
- package/dist/public/store/StoreApp.pack.js +1 -1
- 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/StoreItemListView.d.ts.map +1 -1
- package/dist/public/store/StoreItemListView.js +139 -75
- package/dist/public/store/StoreItemListView.js.map +1 -1
- package/dist/public/store/cart/ShoppingCart.pack.js +1 -1
- package/dist/public/store/cart/ShoppingCart.pack.js.map +1 -1
- package/dist/public/store/cart/ShoppingCart.pack.min.js +1 -1
- package/dist/public/store/cart/ShoppingCart.pack.min.js.map +1 -1
- package/dist/services/LoginService.d.ts.map +1 -1
- package/dist/services/LoginService.js.map +1 -1
- package/dist/services/local-db/LocalDbService.d.ts +7 -6
- package/dist/services/local-db/LocalDbService.d.ts.map +1 -1
- package/dist/services/local-db/LocalDbService.js +46 -22
- package/dist/services/local-db/LocalDbService.js.map +1 -1
- package/dist/services/local-db/contact/LocalContact.d.ts +8 -0
- package/dist/services/local-db/contact/LocalContact.d.ts.map +1 -0
- package/dist/services/local-db/contact/LocalContact.js +25 -0
- package/dist/services/local-db/contact/LocalContact.js.map +1 -0
- package/dist/services/local-db/core/LocalTable.d.ts +14 -3
- package/dist/services/local-db/core/LocalTable.d.ts.map +1 -1
- package/dist/services/local-db/core/LocalTable.js +131 -15
- package/dist/services/local-db/core/LocalTable.js.map +1 -1
- package/dist/services/local-db/core/SqlDbFactory.d.ts +39 -0
- package/dist/services/local-db/core/SqlDbFactory.d.ts.map +1 -0
- package/dist/services/local-db/core/SqlDbFactory.js +112 -0
- package/dist/services/local-db/core/SqlDbFactory.js.map +1 -0
- package/dist/services/local-db/core/TemplateQuery.d.ts.map +1 -1
- package/dist/services/local-db/core/TemplateQuery.js +6 -5
- package/dist/services/local-db/core/TemplateQuery.js.map +1 -1
- package/dist/services/local-db/mailboxes/LocalMailbox.d.ts +0 -1
- package/dist/services/local-db/mailboxes/LocalMailbox.d.ts.map +1 -1
- package/dist/services/local-db/mailboxes/LocalMailbox.js +3 -40
- package/dist/services/local-db/mailboxes/LocalMailbox.js.map +1 -1
- package/dist/site-editor/SiteEditorApp.pack.js +1 -1
- package/dist/site-editor/SiteEditorApp.pack.js.map +1 -1
- package/dist/site-editor/SiteEditorApp.pack.min.js +1 -1
- package/dist/site-editor/SiteEditorApp.pack.min.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/web/AppIndex.pack.js +3 -2
- package/dist/web/AppIndex.pack.js.map +1 -1
- package/dist/web/AppIndex.pack.min.js +2 -2
- package/dist/web/AppIndex.pack.min.js.map +1 -1
- package/node_modules/@web-atoms/module-loader/package.json +1 -1
- package/node_modules/@web-atoms/module-loader/umd/src/AmdLoader.ts +1 -1
- package/node_modules/@web-atoms/module-loader/umd.js +1 -1
- package/node_modules/@web-atoms/module-loader/umd.js.map +1 -1
- package/package.json +2 -2
- package/sqlite-loader.mjs +4 -4
- package/src/common/pages/stores/products/EditProductDetailPage.tsx +1 -0
- package/src/public/store/StoreItemListView.tsx +141 -77
- package/src/services/LoginService.ts +2 -1
- package/src/services/local-db/LocalDbService.ts +47 -20
- package/src/services/local-db/contact/LocalContact.ts +11 -0
- package/src/services/local-db/core/LocalTable.ts +131 -16
- package/src/services/local-db/core/SqlDbFactory.ts +173 -0
- package/src/services/local-db/core/TemplateQuery.ts +10 -5
- package/src/services/local-db/mailboxes/LocalMailbox.ts +0 -37
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/* eslint-disable no-cond-assign */
|
|
2
|
+
/* eslint-disable no-var */
|
|
3
|
+
import { UMD } from "@web-atoms/core/dist/core/types";
|
|
4
|
+
|
|
5
|
+
export type ISqlString = any;
|
|
6
|
+
export type IPreparedStatement = any;
|
|
7
|
+
|
|
8
|
+
export interface ISqlFactory {
|
|
9
|
+
open_v2(name: string): Promise<any>;
|
|
10
|
+
close(db: any): Promise<void>;
|
|
11
|
+
exec(db: any, text: string, fx: (rows:any[], columns: string[]) => void): Promise<number>;
|
|
12
|
+
prepare_v2(db: any, sql: ISqlString): Promise<{ sql: number, stmt: number }>;
|
|
13
|
+
statements(db: any, text: string, options?: any): any;
|
|
14
|
+
bind(stmt: number, i: number, value: any );
|
|
15
|
+
finalize(stmt: number): Promise<number>;
|
|
16
|
+
step(stmt: number): Promise<number>;
|
|
17
|
+
row(stmt: number): string[];
|
|
18
|
+
column_names(stmt: number): string[];
|
|
19
|
+
bind_parameter_count(stmt: number): number;
|
|
20
|
+
bind_parameter_name(stmt: number, i: number): string;
|
|
21
|
+
changes(stmt: number): number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface ISqlResult<T = any> {
|
|
25
|
+
rows: T[];
|
|
26
|
+
updated: number;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
declare var SQLite: any;
|
|
30
|
+
|
|
31
|
+
export class SqlDb {
|
|
32
|
+
|
|
33
|
+
private prev: Promise<ISqlResult> = Promise.resolve(null);
|
|
34
|
+
|
|
35
|
+
private db: any;
|
|
36
|
+
|
|
37
|
+
constructor(
|
|
38
|
+
private sqlFactory: ISqlFactory,
|
|
39
|
+
private name: string) {}
|
|
40
|
+
|
|
41
|
+
async query(query, values) {
|
|
42
|
+
const prev = this.prev;
|
|
43
|
+
const { sqlFactory } = this;
|
|
44
|
+
return await (this.prev = (async () => {
|
|
45
|
+
try {
|
|
46
|
+
await prev;
|
|
47
|
+
} catch (error) {
|
|
48
|
+
// ignore...
|
|
49
|
+
}
|
|
50
|
+
const d = await sqlFactory.open_v2(this.name);
|
|
51
|
+
this.db = d;
|
|
52
|
+
await using d1 = { [Symbol.asyncDispose]: () => sqlFactory.close(d) };
|
|
53
|
+
const rows = [];
|
|
54
|
+
|
|
55
|
+
let updated = 0;
|
|
56
|
+
|
|
57
|
+
for await (const stmt of sqlFactory.statements(d, query)) {
|
|
58
|
+
let i = 0;
|
|
59
|
+
let columns;
|
|
60
|
+
for (const p of values) {
|
|
61
|
+
sqlFactory.bind(stmt, ++i, p);
|
|
62
|
+
}
|
|
63
|
+
while(await sqlFactory.step(stmt) === SQLite.SQLITE_ROW) {
|
|
64
|
+
columns ??= sqlFactory.column_names(stmt);
|
|
65
|
+
const row = sqlFactory.row(stmt);
|
|
66
|
+
const item = {};
|
|
67
|
+
for (let index = 0; index < columns.length; index++) {
|
|
68
|
+
const element = columns[index];
|
|
69
|
+
item[element] = row[index];
|
|
70
|
+
}
|
|
71
|
+
rows.push(item);
|
|
72
|
+
}
|
|
73
|
+
updated = sqlFactory.changes(this.db);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// const updated = await sqlFactory.exec(d, query, (row, columns) => {
|
|
77
|
+
// const item = {};
|
|
78
|
+
// for (let index = 0; index < columns.length; index++) {
|
|
79
|
+
// const element = columns[index];
|
|
80
|
+
// item[element] = row[index];
|
|
81
|
+
// }
|
|
82
|
+
// rows.push(item);
|
|
83
|
+
// });
|
|
84
|
+
|
|
85
|
+
return {
|
|
86
|
+
rows,
|
|
87
|
+
updated
|
|
88
|
+
};
|
|
89
|
+
})());
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// async exec(query: string) {
|
|
93
|
+
// const { sqlFactory } = this;
|
|
94
|
+
// const db = await sqlFactory.open_v2(this.name);
|
|
95
|
+
// await using a = { [Symbol.asyncDispose]: () => sqlFactory.close(db)};
|
|
96
|
+
// const rows = [];
|
|
97
|
+
// const updated = 0;
|
|
98
|
+
// await sqlFactory.exec(db, query, (items, columns) => {
|
|
99
|
+
// const row = {};
|
|
100
|
+
// for (let index = 0; index < columns.length; index++) {
|
|
101
|
+
// const element = columns[index];
|
|
102
|
+
// row[element] = items[index];
|
|
103
|
+
// }
|
|
104
|
+
// rows.push(row);
|
|
105
|
+
// });
|
|
106
|
+
// return {
|
|
107
|
+
// rows,
|
|
108
|
+
// updated
|
|
109
|
+
// };
|
|
110
|
+
// }
|
|
111
|
+
|
|
112
|
+
// private async * prepare({query, values}:{ query: string, values: any}) {
|
|
113
|
+
// const { sqlFactory } = this;
|
|
114
|
+
// let prepared = { stmt: null, sql: query } as any;
|
|
115
|
+
// try {
|
|
116
|
+
// while(prepared = await sqlFactory.prepare_v2(this.db, prepared.sql)){
|
|
117
|
+
|
|
118
|
+
// // bind parameters...
|
|
119
|
+
// const { stmt } = prepared;
|
|
120
|
+
// // bind parameters...
|
|
121
|
+
// const total = sqlFactory.bind_parameter_count(stmt);
|
|
122
|
+
// for (let index = 0; index < total; index++) {
|
|
123
|
+
// const name = sqlFactory.bind_parameter_name(stmt, index);
|
|
124
|
+
// if (values.hasOwnProperty(name)) {
|
|
125
|
+
// sqlFactory.bind(stmt, index, values[name]);
|
|
126
|
+
// }
|
|
127
|
+
// }
|
|
128
|
+
// yield stmt;
|
|
129
|
+
// await sqlFactory.finalize(stmt);
|
|
130
|
+
// prepared.stmt = null;
|
|
131
|
+
// }
|
|
132
|
+
// } finally {
|
|
133
|
+
// if (prepared?.stmt) {
|
|
134
|
+
// await sqlFactory.finalize(prepared.stmt);
|
|
135
|
+
// }
|
|
136
|
+
// }
|
|
137
|
+
// }
|
|
138
|
+
|
|
139
|
+
// private newString(txt: string) {
|
|
140
|
+
// const { sqlFactory } = this;
|
|
141
|
+
// const str = sqlFactory.str_new(this.db, txt);
|
|
142
|
+
// return {
|
|
143
|
+
// str,
|
|
144
|
+
// [Symbol.dispose]() {
|
|
145
|
+
// return sqlFactory.str_finish(str);
|
|
146
|
+
// }
|
|
147
|
+
// };
|
|
148
|
+
// }
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
let factory: Promise<ISqlFactory>;
|
|
152
|
+
|
|
153
|
+
const loadSqlFactory = () => {
|
|
154
|
+
return factory ??= new Promise<ISqlFactory>((resolve, reject) => {
|
|
155
|
+
const script = document.createElement("script");
|
|
156
|
+
script.type = "module";
|
|
157
|
+
script.src = UMD.resolvePath("@social-mail/social-mail-client/sqlite-loader.mjs");
|
|
158
|
+
script.onerror = reject;
|
|
159
|
+
document.body.addEventListener("sqliteLoaded", (ce: CustomEvent) => {
|
|
160
|
+
resolve(ce.detail);
|
|
161
|
+
}, { once: true });
|
|
162
|
+
document.body.appendChild(script);
|
|
163
|
+
});
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
export default class SqlDbFactory {
|
|
167
|
+
|
|
168
|
+
static async load(name: string) {
|
|
169
|
+
const sqlFactory = await loadSqlFactory();
|
|
170
|
+
return new SqlDb(sqlFactory, name);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
}
|
|
@@ -88,10 +88,15 @@ export default class TemplateQuery {
|
|
|
88
88
|
text += literal;
|
|
89
89
|
continue;
|
|
90
90
|
}
|
|
91
|
-
|
|
92
|
-
if (av === null) {
|
|
93
|
-
|
|
94
|
-
|
|
91
|
+
let av = arg ?? null;
|
|
92
|
+
// if (av === null) {
|
|
93
|
+
// text += " NULL ";
|
|
94
|
+
// continue;
|
|
95
|
+
// }
|
|
96
|
+
if (typeof av === "boolean") {
|
|
97
|
+
av = av ? 1 : 0;
|
|
98
|
+
} else if (av instanceof Date) {
|
|
99
|
+
av = av.getTime();
|
|
95
100
|
}
|
|
96
101
|
let an = map.get(av);
|
|
97
102
|
if (an === void 0) {
|
|
@@ -115,7 +120,7 @@ export default class TemplateQuery {
|
|
|
115
120
|
return null;
|
|
116
121
|
}
|
|
117
122
|
if (av instanceof Date) {
|
|
118
|
-
return av.
|
|
123
|
+
return av.getTime();
|
|
119
124
|
}
|
|
120
125
|
switch(typeof av) {
|
|
121
126
|
case "boolean":
|
|
@@ -9,43 +9,6 @@ export default class LocalMailbox extends LocalTable<IMailbox> {
|
|
|
9
9
|
|
|
10
10
|
model = Mailbox;
|
|
11
11
|
|
|
12
|
-
public async startSync() {
|
|
13
|
-
|
|
14
|
-
const es = this.service.entityService;
|
|
15
|
-
|
|
16
|
-
let q = es.query(this.model);
|
|
17
|
-
|
|
18
|
-
let max = null;
|
|
19
|
-
|
|
20
|
-
// get last max updated...
|
|
21
|
-
const { rows:[first] } = await this.query `SELECT * FROM ${this.name} ORDER BY dateUpdated DESC LIMIT 1`;
|
|
22
|
-
if (first) {
|
|
23
|
-
max = first.dateUpdated;
|
|
24
|
-
q = q.where({ max}, (p) => (x) => x.dateUpdated >= p.max);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
let min = DateTime.now;
|
|
28
|
-
|
|
29
|
-
do {
|
|
30
|
-
const result = await q.where({ min }, (p) => (x) => x.dateUpdated < p.min)
|
|
31
|
-
.orderByDescending((x) => x.dateUpdated)
|
|
32
|
-
.toPagedList({
|
|
33
|
-
start: 0,
|
|
34
|
-
size: 200,
|
|
35
|
-
count: false
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
if (!result.items.length) {
|
|
39
|
-
break;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
for (const element of result.items) {
|
|
43
|
-
await this.save(element);
|
|
44
|
-
min = element.dateUpdated;
|
|
45
|
-
}
|
|
46
|
-
} while(true);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
12
|
// public async init() {
|
|
50
13
|
// await this.service.query `CREATE TABLE IF NOT EXISTS ${this.name}
|
|
51
14
|
// (
|