@social-mail/social-mail-client 1.2.231 → 1.2.233
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 +99 -52
- package/dist/admin/AdminAppIndex.pack.js.map +1 -1
- package/dist/admin/AdminAppIndex.pack.min.js +33 -5
- package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
- package/dist/common/controls/html/grapes-js/GrapesJSEditor.js +2 -2
- package/dist/common/controls/html/grapes-js/GrapesJSEditor.js.map +1 -1
- package/dist/common/pages/mailboxes/services/MailboxService.js +1 -1
- package/dist/common/pages/mailboxes/services/MailboxService.js.map +1 -1
- package/dist/public/store/Store.d.ts +6 -0
- package/dist/public/store/Store.d.ts.map +1 -0
- package/dist/public/store/Store.js +23 -0
- package/dist/public/store/Store.js.map +1 -0
- package/dist/public/store/Store.pack.js +20735 -0
- package/dist/public/store/Store.pack.js.map +1 -0
- package/dist/public/store/Store.pack.min.js +561 -0
- package/dist/public/store/Store.pack.min.js.map +1 -0
- package/dist/public/store/StoreItemDetailView.d.ts +4 -0
- package/dist/public/store/StoreItemDetailView.d.ts.map +1 -0
- package/dist/public/store/StoreItemDetailView.js +22 -0
- package/dist/public/store/StoreItemDetailView.js.map +1 -0
- package/dist/public/store/StoreItemListView.d.ts +13 -0
- package/dist/public/store/StoreItemListView.d.ts.map +1 -1
- package/dist/public/store/StoreItemListView.js +99 -4
- package/dist/public/store/StoreItemListView.js.map +1 -1
- package/dist/site-editor/editor/HtmlPageEditor.d.ts +2 -2
- package/dist/site-editor/editor/HtmlPageEditor.d.ts.map +1 -1
- package/dist/site-editor/editor/HtmlPageEditor.js +34 -30
- package/dist/site-editor/editor/HtmlPageEditor.js.map +1 -1
- package/dist/site-editor/editor/WebSitePageEditor.d.ts.map +1 -1
- package/dist/site-editor/editor/WebSitePageEditor.js +14 -10
- package/dist/site-editor/editor/WebSitePageEditor.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/web/AppIndex.pack.js +99 -52
- package/dist/web/AppIndex.pack.js.map +1 -1
- package/dist/web/AppIndex.pack.min.js +34 -6
- package/dist/web/AppIndex.pack.min.js.map +1 -1
- package/dist/web/page/files/media/ChooseMediaPage.d.ts +4 -3
- package/dist/web/page/files/media/ChooseMediaPage.d.ts.map +1 -1
- package/dist/web/page/files/media/ChooseMediaPage.js +50 -11
- package/dist/web/page/files/media/ChooseMediaPage.js.map +1 -1
- package/package.json +1 -1
- package/src/common/controls/html/grapes-js/GrapesJSEditor.tsx +1 -1
- package/src/common/pages/mailboxes/services/MailboxService.ts +1 -1
- package/src/public/store/Store.tsx +15 -0
- package/src/public/store/StoreItemDetailView.tsx +16 -0
- package/src/public/store/StoreItemListView.tsx +112 -1
- package/src/site-editor/editor/HtmlPageEditor.tsx +28 -26
- package/src/site-editor/editor/WebSitePageEditor.tsx +10 -6
- package/src/web/page/files/media/ChooseMediaPage.tsx +54 -10
|
@@ -6,19 +6,20 @@ export default class ChooseMediaPage extends PopupWindowPage<{
|
|
|
6
6
|
}, {
|
|
7
7
|
file: IAppFile;
|
|
8
8
|
size: number;
|
|
9
|
-
}> {
|
|
9
|
+
}[]> {
|
|
10
10
|
parameters: any;
|
|
11
11
|
selectedFolder: IAppFile;
|
|
12
12
|
private cloudFileService;
|
|
13
13
|
private search;
|
|
14
14
|
private version;
|
|
15
15
|
private size;
|
|
16
|
-
private
|
|
16
|
+
private selectedFiles;
|
|
17
|
+
private filesRepeater;
|
|
17
18
|
init(): Promise<void>;
|
|
18
19
|
selectFile(): Promise<{
|
|
19
20
|
file: IAppFile;
|
|
20
21
|
size: number;
|
|
21
|
-
}>;
|
|
22
|
+
}[]>;
|
|
22
23
|
onFilesUploaded(): Promise<void>;
|
|
23
24
|
}
|
|
24
25
|
//# sourceMappingURL=ChooseMediaPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChooseMediaPage.d.ts","sourceRoot":"","sources":["../../../../../src/web/page/files/media/ChooseMediaPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChooseMediaPage.d.ts","sourceRoot":"","sources":["../../../../../src/web/page/files/media/ChooseMediaPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAoFnD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,eAAe,CACxD;IAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,EAClC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CACjC;IAEM,UAAU,MAAC;IAEX,cAAc,EAAE,QAAQ,CAAC;IAGhC,OAAO,CAAC,gBAAgB,CAAmB;IAE3C,OAAO,CAAC,MAAM,CAAM;IAEpB,OAAO,CAAC,OAAO,CAAK;IAEpB,OAAO,CAAC,IAAI,CAAO;IAEnB,OAAO,CAAC,aAAa,CAAkB;IAEvC,OAAO,CAAC,aAAa,CAAe;IAE9B,IAAI;IAwFJ,UAAU;;;;IAMV,eAAe;CAIxB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
System.register(["tslib", "@web-atoms/web-controls/dist/mobile-app/MobileApp", "@web-atoms/core/dist/core/XNode", "../../../../common/controls/tree/FileTreeView", "@web-atoms/web-controls/dist/basic/AtomRepeater", "@web-atoms/core/dist/core/Bind", "@web-atoms/core/dist/core/InjectProperty", "../service/CloudFileService", "@web-atoms/core/dist/style/styled", "../../../../common/controls/drag-drop/FilesDragDrop", "@web-atoms/core/dist/view-model/Action", "@web-atoms/web-controls/dist/basic/UploadEvent", "../../../../common/controls/buttons/IconButton", "../../../../common/apiPath"], function (_export, _context) {
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
|
-
var __awaiter, __decorate, __metadata, PopupWindowPage, XNode, FolderTreeView, AtomRepeater, Bind, InjectProperty, CloudFileService, styled, FilesDragDrop, Action, UploadEvent, SaveIconTextButton, apiPath, ChooseMediaPage, css;
|
|
4
|
+
var __awaiter, __decorate, __metadata, PopupWindowPage, XNode, FolderTreeView, AtomRepeater, SelectAll, SelectorCheckBox, Bind, InjectProperty, CloudFileService, styled, FilesDragDrop, Action, UploadEvent, SaveIconTextButton, apiPath, ChooseMediaPage, css;
|
|
5
5
|
_export("default", void 0);
|
|
6
6
|
return {
|
|
7
7
|
setters: [function (_tslib) {
|
|
@@ -16,6 +16,8 @@ System.register(["tslib", "@web-atoms/web-controls/dist/mobile-app/MobileApp", "
|
|
|
16
16
|
FolderTreeView = _commonControlsTreeFileTreeView.FolderTreeView;
|
|
17
17
|
}, function (_webAtomsWebControlsDistBasicAtomRepeater) {
|
|
18
18
|
AtomRepeater = _webAtomsWebControlsDistBasicAtomRepeater.default;
|
|
19
|
+
SelectAll = _webAtomsWebControlsDistBasicAtomRepeater.SelectAll;
|
|
20
|
+
SelectorCheckBox = _webAtomsWebControlsDistBasicAtomRepeater.SelectorCheckBox;
|
|
19
21
|
}, function (_webAtomsCoreDistCoreBind) {
|
|
20
22
|
Bind = _webAtomsCoreDistCoreBind.default;
|
|
21
23
|
}, function (_webAtomsCoreDistCoreInjectProperty) {
|
|
@@ -59,11 +61,39 @@ System.register(["tslib", "@web-atoms/web-controls/dist/mobile-app/MobileApp", "
|
|
|
59
61
|
}
|
|
60
62
|
|
|
61
63
|
& .media-file {
|
|
62
|
-
display: inline-
|
|
63
|
-
max-height:
|
|
64
|
+
display: inline-grid;
|
|
65
|
+
max-height: 350px;
|
|
64
66
|
border: solid 5px transparent;
|
|
65
67
|
overflow: hidden;
|
|
66
68
|
cursor: pointer;
|
|
69
|
+
grid-template-columns: auto 1fr;
|
|
70
|
+
grid-template-rows: auto 1fr;
|
|
71
|
+
position: relative;
|
|
72
|
+
|
|
73
|
+
& > [data-selector=checkbox] {
|
|
74
|
+
grid-row: 1;
|
|
75
|
+
grid-column: 1;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
& > .file-name {
|
|
79
|
+
grid-row: 1;
|
|
80
|
+
grid-column: 2;
|
|
81
|
+
overflow: hidden;
|
|
82
|
+
white-space: nowrap;
|
|
83
|
+
text-overflow: ellipsis;
|
|
84
|
+
position: absolute;
|
|
85
|
+
left: 0;
|
|
86
|
+
top: 5px;
|
|
87
|
+
width: 100%;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
& > .file-preview {
|
|
91
|
+
grid-row: 2;
|
|
92
|
+
grid-column: 1 / span 2;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
67
97
|
&:hover {
|
|
68
98
|
border-color: lightblue;
|
|
69
99
|
}
|
|
@@ -82,7 +112,7 @@ System.register(["tslib", "@web-atoms/web-controls/dist/mobile-app/MobileApp", "
|
|
|
82
112
|
this.search = "";
|
|
83
113
|
this.version = 1;
|
|
84
114
|
this.size = 700;
|
|
85
|
-
this.
|
|
115
|
+
this.selectedFiles = [];
|
|
86
116
|
}
|
|
87
117
|
init() {
|
|
88
118
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -129,8 +159,10 @@ System.register(["tslib", "@web-atoms/web-controls/dist/mobile-app/MobileApp", "
|
|
|
129
159
|
});
|
|
130
160
|
})
|
|
131
161
|
})), XNode.create(AtomRepeater, {
|
|
162
|
+
presenter: Bind.presenter(c => this.filesRepeater = c),
|
|
132
163
|
selectOnClick: true,
|
|
133
|
-
|
|
164
|
+
selectedItems: this.selectedFiles,
|
|
165
|
+
allowMultipleSelection: this.parameters.multiple,
|
|
134
166
|
header: true,
|
|
135
167
|
headerRenderer: item => XNode.create("div", {
|
|
136
168
|
"data-position": "sticky-top",
|
|
@@ -146,14 +178,22 @@ System.register(["tslib", "@web-atoms/web-controls/dist/mobile-app/MobileApp", "
|
|
|
146
178
|
})),
|
|
147
179
|
itemRenderer: item => XNode.create("div", {
|
|
148
180
|
class: "media-file"
|
|
149
|
-
}, XNode.create("
|
|
181
|
+
}, this.parameters.multiple && XNode.create(SelectorCheckBox, null), XNode.create("label", {
|
|
182
|
+
class: "file-name",
|
|
183
|
+
title: item.name,
|
|
184
|
+
text: item.name
|
|
185
|
+
}), XNode.create("img", {
|
|
186
|
+
class: "file-preview",
|
|
150
187
|
src: apiPath(`/api/files/webp(300)/${item.appFileID}/${item.fileContentID}/${item.name}.300.webp`)
|
|
151
188
|
}))
|
|
152
189
|
})));
|
|
153
190
|
this.footerRenderer = () => XNode.create("div", {
|
|
154
|
-
"style-display": Bind.oneWay(() => this.
|
|
191
|
+
"style-display": Bind.oneWay(() => this.selectedFiles.length > 0),
|
|
155
192
|
"data-layout": "row"
|
|
156
|
-
}, XNode.create(
|
|
193
|
+
}, XNode.create(SelectAll, {
|
|
194
|
+
items: Bind.oneWay(() => this.filesRepeater.items),
|
|
195
|
+
selectedItems: this.selectedFiles
|
|
196
|
+
}), XNode.create("input", {
|
|
157
197
|
type: "range",
|
|
158
198
|
min: "100",
|
|
159
199
|
max: "2000",
|
|
@@ -169,12 +209,11 @@ System.register(["tslib", "@web-atoms/web-controls/dist/mobile-app/MobileApp", "
|
|
|
169
209
|
}
|
|
170
210
|
selectFile() {
|
|
171
211
|
return __awaiter(this, void 0, void 0, function* () {
|
|
172
|
-
const file = this.selectedFile;
|
|
173
212
|
const size = this.size;
|
|
174
|
-
return {
|
|
213
|
+
return this.selectedFiles.map(file => ({
|
|
175
214
|
file,
|
|
176
215
|
size
|
|
177
|
-
};
|
|
216
|
+
}));
|
|
178
217
|
});
|
|
179
218
|
}
|
|
180
219
|
onFilesUploaded() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ChooseMediaPage","css","_export","setters","_tslib","PopupWindowPage","_webAtomsWebControlsDistMobileAppMobileApp","_webAtomsCoreDistCoreXNode","XNode","default","_commonControlsTreeFileTreeView","FolderTreeView","_webAtomsWebControlsDistBasicAtomRepeater","AtomRepeater","_webAtomsCoreDistCoreBind","Bind","_webAtomsCoreDistCoreInjectProperty","InjectProperty","_serviceCloudFileService","CloudFileService","_webAtomsCoreDistStyleStyled","styled","_commonControlsDragDropFilesDragDrop","FilesDragDrop","_webAtomsCoreDistViewModelAction","Action","_webAtomsWebControlsDistBasicUploadEvent","UploadEvent","_commonControlsButtonsIconButton","SaveIconTextButton","_commonApiPath","apiPath","execute","installLocal","constructor","search","version","size","
|
|
1
|
+
{"version":3,"names":["ChooseMediaPage","css","_export","setters","_tslib","PopupWindowPage","_webAtomsWebControlsDistMobileAppMobileApp","_webAtomsCoreDistCoreXNode","XNode","default","_commonControlsTreeFileTreeView","FolderTreeView","_webAtomsWebControlsDistBasicAtomRepeater","AtomRepeater","SelectAll","SelectorCheckBox","_webAtomsCoreDistCoreBind","Bind","_webAtomsCoreDistCoreInjectProperty","InjectProperty","_serviceCloudFileService","CloudFileService","_webAtomsCoreDistStyleStyled","styled","_commonControlsDragDropFilesDragDrop","FilesDragDrop","_webAtomsCoreDistViewModelAction","Action","_webAtomsWebControlsDistBasicUploadEvent","UploadEvent","_commonControlsButtonsIconButton","SaveIconTextButton","_commonApiPath","apiPath","execute","installLocal","constructor","search","version","size","selectedFiles","init","title","accept","parameters","selectedFolder","folder","element","style","minWidth","minHeight","renderer","create","class","folderId","appFileID","selectedItem","twoWaysImmediate","type","value","Object","assign","AttachUploadAction","multiple","extra","oneWay","_a","JSON","stringify","parentID","presenter","c","filesRepeater","selectOnClick","selectedItems","allowMultipleSelection","header","headerRenderer","item","items","oneWayAsync","e","cancelToken","cloudFileService","files","showFolder","itemRenderer","name","text","src","fileContentID","footerRenderer","length","min","max","step","selectFile","map","file","onFilesUploaded","__decorate","onEvent","close"],"sources":["../../../../../src/web/page/files/media/ChooseMediaPage.tsx"],"sourcesContent":[null],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -104,7 +104,7 @@ export default class GrapesJSEditor extends AtomControl {
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
async selectFile(accept = "image/*, video/*") {
|
|
107
|
-
const { file, size } = await PageNavigator.pushPageForResult(ChooseMediaPage, { folder: this.folder, accept });
|
|
107
|
+
const [{ file, size }] = await PageNavigator.pushPageForResult(ChooseMediaPage, { folder: this.folder, accept });
|
|
108
108
|
const src = `/api/site/asset/jpg(${size})/${this.folder.appFileID}/${file.appFileID}/${file.fileContentID}/${file.name}.${size}.jpg`;
|
|
109
109
|
return {
|
|
110
110
|
extend: "image",
|
|
@@ -43,7 +43,7 @@ export default class MailboxService {
|
|
|
43
43
|
const all = await this.entityService.query(UserPushSubscription)
|
|
44
44
|
.where({ ids, userID }, (p) =>
|
|
45
45
|
(x) => x.userID === p.userID
|
|
46
|
-
&&
|
|
46
|
+
&& x.mailboxID in p.ids
|
|
47
47
|
&& x.emailAddressID === null)
|
|
48
48
|
.toArray();
|
|
49
49
|
const map = new Map(all.map((x) => [x.mailboxID, x]));
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import "../../style/GlobalStyle";
|
|
2
|
+
import Pack from "@web-atoms/core/dist/Pack";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
const url = new URL(location.href);
|
|
6
|
+
(window as any).pageUrl = url;
|
|
7
|
+
const { default: view } = await (/\/store\/\d+/.test(url.pathname) || url.searchParams.has("detail")
|
|
8
|
+
? import("./StoreItemDetailView")
|
|
9
|
+
: import("./StoreItemListView")) as any;
|
|
10
|
+
|
|
11
|
+
@Pack
|
|
12
|
+
export default class Empty extends view {
|
|
13
|
+
|
|
14
|
+
}
|
|
15
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AtomControl } from "@web-atoms/core/dist/web/controls/AtomControl";
|
|
2
|
+
|
|
3
|
+
const url = (window as any).pageUrl as URL;
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
let {1: storeID = "1", 2: itemID = "2a" } = /^\/channels\/([^\/]+)\/([^\/]+)\//.exec(url?.pathname) ?? {} as any;
|
|
7
|
+
|
|
8
|
+
storeID = parseInt(storeID, 36);
|
|
9
|
+
itemID = parseInt(itemID, 36);
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
export default class StoreItemDetailView extends AtomControl {
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
}
|
|
@@ -1,5 +1,116 @@
|
|
|
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";
|
|
1
4
|
import { AtomControl } from "@web-atoms/core/dist/web/controls/AtomControl";
|
|
5
|
+
import AtomRepeater from "@web-atoms/web-controls/dist/basic/AtomRepeater";
|
|
6
|
+
import InfiniteRepeater from "../../common/controls/repeater/InfiniteRepeater";
|
|
7
|
+
import InjectProperty from "@web-atoms/core/dist/core/InjectProperty";
|
|
8
|
+
import EntityService from "../../services/EntityService";
|
|
9
|
+
import { IStoreItem, StoreItem } from "../../model/model";
|
|
10
|
+
import { Sql } from "../../common/Sql";
|
|
11
|
+
|
|
12
|
+
styled.css `
|
|
13
|
+
|
|
14
|
+
display:grid;
|
|
15
|
+
grid-template-rows: auto 1fr auto;
|
|
16
|
+
|
|
17
|
+
& > header {
|
|
18
|
+
grid-row:1;
|
|
19
|
+
padding: 10px;
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-wrap: wrap;
|
|
22
|
+
|
|
23
|
+
gap: 10px;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
& > section {
|
|
27
|
+
grid-row: 2;
|
|
28
|
+
padding: 10px;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
& > footer {
|
|
32
|
+
grid-row: 3;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
`.installGlobal("[data-shopping-cart-list=shopping-cart-list]");
|
|
36
|
+
|
|
2
37
|
|
|
3
38
|
export default class StoreItemListView extends AtomControl {
|
|
4
|
-
|
|
39
|
+
|
|
40
|
+
search = "";
|
|
41
|
+
|
|
42
|
+
items: IStoreItem[] = [];
|
|
43
|
+
|
|
44
|
+
@InjectProperty
|
|
45
|
+
entityService: EntityService;
|
|
46
|
+
|
|
47
|
+
constructor(app, e) {
|
|
48
|
+
super(app, e);
|
|
49
|
+
this.element.setAttribute("data-shopping-cart-list", "shopping-cart-list");
|
|
50
|
+
this.runAfterInit(() => this.app.runAsync(() => this.init()));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async init() {
|
|
54
|
+
|
|
55
|
+
this.render(<div>
|
|
56
|
+
<header>
|
|
57
|
+
<input type="search" value={Bind.twoWaysImmediate(() => this.search)}/>
|
|
58
|
+
</header>
|
|
59
|
+
<AtomRepeater
|
|
60
|
+
for="section"
|
|
61
|
+
items={this.items}
|
|
62
|
+
{ ... InfiniteRepeater.pagedItems((start) =>
|
|
63
|
+
(c, e, cancelToken) =>
|
|
64
|
+
this.searchItems({
|
|
65
|
+
start,
|
|
66
|
+
search: this.search,
|
|
67
|
+
cancelToken
|
|
68
|
+
})
|
|
69
|
+
)}
|
|
70
|
+
itemRenderer={(item: IStoreItem) => <div>
|
|
71
|
+
<label text={item.name}/>
|
|
72
|
+
</div>}
|
|
73
|
+
/>
|
|
74
|
+
<footer>
|
|
75
|
+
</footer>
|
|
76
|
+
</div>);
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
async searchItems({
|
|
82
|
+
start,
|
|
83
|
+
search,
|
|
84
|
+
size = 50,
|
|
85
|
+
cancelToken
|
|
86
|
+
}) {
|
|
87
|
+
let q = this.entityService.query(StoreItem, "storeQuery")
|
|
88
|
+
.where((x) =>
|
|
89
|
+
x.itemType in [ "product", "service", "resource"]
|
|
90
|
+
&& x.sizeForID === null
|
|
91
|
+
&& x.variantForID === null
|
|
92
|
+
);
|
|
93
|
+
if (search) {
|
|
94
|
+
search = search + "%";
|
|
95
|
+
q = q.where({ search }, (p) => (x) =>
|
|
96
|
+
(Sql.text.iLike(x.name, p.search)
|
|
97
|
+
|| Sql.text.iLike(x.description, p.search)
|
|
98
|
+
|| x.sizes.some((s) => Sql.text.iLike(s.name, p.search) || Sql.text.iLike(s.description, p.search))
|
|
99
|
+
|| x.variants.some((s) => Sql.text.iLike(s.name, p.search) || Sql.text.iLike(s.description, p.search))
|
|
100
|
+
)
|
|
101
|
+
&& x.sizeForID === null
|
|
102
|
+
&& x.variantForID === null
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
return q.orderByDescending((x) => x.storeItemID)
|
|
106
|
+
.include((x) => [
|
|
107
|
+
x.storeItemPrices,
|
|
108
|
+
x.storeItemTags.forEach((t) => t.tag)
|
|
109
|
+
])
|
|
110
|
+
.toPagedList({
|
|
111
|
+
start,
|
|
112
|
+
size,
|
|
113
|
+
cancelToken
|
|
114
|
+
});
|
|
115
|
+
}
|
|
5
116
|
}
|
|
@@ -494,37 +494,39 @@ export default class HtmlPageEditor extends AtomControl {
|
|
|
494
494
|
}
|
|
495
495
|
}
|
|
496
496
|
|
|
497
|
-
async insertImage(
|
|
498
|
-
let img: HTMLImageElement;
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
img.src = src;
|
|
497
|
+
async insertImage( ... images: { src: string, style?: { [key: string]: string} , [key: string]: any }[]) {
|
|
498
|
+
let img: HTMLImageElement = this.selection?.isImage ? this.selection.element : null as any;
|
|
499
|
+
const container = img ? img.parentElement : this.selection.element;
|
|
500
|
+
for (const { src, style, ... a} of images) {
|
|
501
|
+
if(!img) {
|
|
502
|
+
img = this.htmlDocument.createElement("img");
|
|
503
|
+
container.appendChild(img);
|
|
504
|
+
container.appendChild(document.createTextNode("\n"));
|
|
505
|
+
}
|
|
508
506
|
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
img.onload =
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
507
|
+
img.src = src;
|
|
508
|
+
const i = img;
|
|
509
|
+
img.onload = () => {
|
|
510
|
+
this.selection.update();
|
|
511
|
+
i.onload = null;
|
|
512
|
+
};
|
|
513
|
+
if (style) {
|
|
514
|
+
for (const key in style) {
|
|
515
|
+
if (Object.prototype.hasOwnProperty.call(style, key)) {
|
|
516
|
+
const element = style[key];
|
|
517
|
+
img.style[key] = element;
|
|
518
|
+
}
|
|
518
519
|
}
|
|
519
520
|
}
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
521
|
+
if (a) {
|
|
522
|
+
for (const key in a) {
|
|
523
|
+
if (Object.prototype.hasOwnProperty.call(a, key)) {
|
|
524
|
+
const element = a[key];
|
|
525
|
+
img.setAttribute(key, element);
|
|
526
|
+
}
|
|
526
527
|
}
|
|
527
528
|
}
|
|
529
|
+
img = null;
|
|
528
530
|
}
|
|
529
531
|
this.commit();
|
|
530
532
|
}
|
|
@@ -21,13 +21,17 @@ export default class WebSitePageEditor extends HtmlPageEditor {
|
|
|
21
21
|
private cloudFileService: CloudFileService;
|
|
22
22
|
|
|
23
23
|
async changeImage() {
|
|
24
|
-
const { file, size } = await PageNavigator.pushPageForResult(ChooseMediaPage, {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
src,
|
|
29
|
-
srcset
|
|
24
|
+
const files: { file: IAppFile, size: number}[] = await PageNavigator.pushPageForResult(ChooseMediaPage, {
|
|
25
|
+
folder: this.folder,
|
|
26
|
+
accept: "image/*",
|
|
27
|
+
multiple: true
|
|
30
28
|
});
|
|
29
|
+
const images = files.map(({ file, size}) => {
|
|
30
|
+
const src = imageUrl(this.folder, file, size);
|
|
31
|
+
const srcset = srcSetUrl(this.folder, file);
|
|
32
|
+
return { src, "data-src-set": srcset };
|
|
33
|
+
});
|
|
34
|
+
await this.insertImage( ... images);
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
@Action({ onEvent: "open-variables"})
|
|
@@ -2,7 +2,7 @@ import { PopupWindowPage } from "@web-atoms/web-controls/dist/mobile-app/MobileA
|
|
|
2
2
|
import { IAppFile } from "../../../../model/model";
|
|
3
3
|
import XNode from "@web-atoms/core/dist/core/XNode";
|
|
4
4
|
import { FolderTreeView } from "../../../../common/controls/tree/FileTreeView";
|
|
5
|
-
import AtomRepeater from "@web-atoms/web-controls/dist/basic/AtomRepeater";
|
|
5
|
+
import AtomRepeater, { SelectAll, SelectorCheckBox } from "@web-atoms/web-controls/dist/basic/AtomRepeater";
|
|
6
6
|
import Bind from "@web-atoms/core/dist/core/Bind";
|
|
7
7
|
import InjectProperty from "@web-atoms/core/dist/core/InjectProperty";
|
|
8
8
|
import CloudFileService from "../service/CloudFileService";
|
|
@@ -37,11 +37,39 @@ const css = styled.css `
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
& .media-file {
|
|
40
|
-
display: inline-
|
|
41
|
-
max-height:
|
|
40
|
+
display: inline-grid;
|
|
41
|
+
max-height: 350px;
|
|
42
42
|
border: solid 5px transparent;
|
|
43
43
|
overflow: hidden;
|
|
44
44
|
cursor: pointer;
|
|
45
|
+
grid-template-columns: auto 1fr;
|
|
46
|
+
grid-template-rows: auto 1fr;
|
|
47
|
+
position: relative;
|
|
48
|
+
|
|
49
|
+
& > [data-selector=checkbox] {
|
|
50
|
+
grid-row: 1;
|
|
51
|
+
grid-column: 1;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
& > .file-name {
|
|
55
|
+
grid-row: 1;
|
|
56
|
+
grid-column: 2;
|
|
57
|
+
overflow: hidden;
|
|
58
|
+
white-space: nowrap;
|
|
59
|
+
text-overflow: ellipsis;
|
|
60
|
+
position: absolute;
|
|
61
|
+
left: 0;
|
|
62
|
+
top: 5px;
|
|
63
|
+
width: 100%;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
& > .file-preview {
|
|
67
|
+
grid-row: 2;
|
|
68
|
+
grid-column: 1 / span 2;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
45
73
|
&:hover {
|
|
46
74
|
border-color: lightblue;
|
|
47
75
|
}
|
|
@@ -55,7 +83,10 @@ const css = styled.css `
|
|
|
55
83
|
}
|
|
56
84
|
`.installLocal();
|
|
57
85
|
|
|
58
|
-
export default class ChooseMediaPage extends PopupWindowPage<
|
|
86
|
+
export default class ChooseMediaPage extends PopupWindowPage<
|
|
87
|
+
{folder: IAppFile, accept: string},
|
|
88
|
+
{ file: IAppFile, size: number }[]
|
|
89
|
+
> {
|
|
59
90
|
|
|
60
91
|
public parameters;
|
|
61
92
|
|
|
@@ -70,7 +101,9 @@ export default class ChooseMediaPage extends PopupWindowPage<{folder: IAppFile,
|
|
|
70
101
|
|
|
71
102
|
private size = 700;
|
|
72
103
|
|
|
73
|
-
private
|
|
104
|
+
private selectedFiles: IAppFile[] = [];
|
|
105
|
+
|
|
106
|
+
private filesRepeater: AtomRepeater;
|
|
74
107
|
|
|
75
108
|
async init() {
|
|
76
109
|
this.title = "Choose Media";
|
|
@@ -109,8 +142,10 @@ export default class ChooseMediaPage extends PopupWindowPage<{folder: IAppFile,
|
|
|
109
142
|
})}
|
|
110
143
|
>
|
|
111
144
|
<AtomRepeater
|
|
145
|
+
presenter={Bind.presenter((c) => this.filesRepeater = c)}
|
|
112
146
|
selectOnClick={true}
|
|
113
|
-
|
|
147
|
+
selectedItems={this.selectedFiles}
|
|
148
|
+
allowMultipleSelection={this.parameters.multiple}
|
|
114
149
|
header={true}
|
|
115
150
|
headerRenderer={(item) => <div
|
|
116
151
|
data-position="sticky-top"
|
|
@@ -127,7 +162,11 @@ export default class ChooseMediaPage extends PopupWindowPage<{folder: IAppFile,
|
|
|
127
162
|
})
|
|
128
163
|
)}
|
|
129
164
|
itemRenderer={(item: IAppFile) => <div class="media-file">
|
|
130
|
-
|
|
165
|
+
{ this.parameters.multiple && <SelectorCheckBox/>}
|
|
166
|
+
<label class="file-name" title={item.name} text={item.name}/>
|
|
167
|
+
<img
|
|
168
|
+
class="file-preview"
|
|
169
|
+
src={ apiPath(`/api/files/webp(300)/${item.appFileID}/${item.fileContentID}/${item.name}.300.webp`)} />
|
|
131
170
|
</div>}
|
|
132
171
|
/>
|
|
133
172
|
</div>
|
|
@@ -135,8 +174,14 @@ export default class ChooseMediaPage extends PopupWindowPage<{folder: IAppFile,
|
|
|
135
174
|
|
|
136
175
|
this.footerRenderer = () =>
|
|
137
176
|
<div
|
|
138
|
-
style-display={Bind.oneWay(() => this.
|
|
177
|
+
style-display={Bind.oneWay(() => this.selectedFiles.length > 0)}
|
|
139
178
|
data-layout="row">
|
|
179
|
+
|
|
180
|
+
<SelectAll
|
|
181
|
+
items={Bind.oneWay(() => this.filesRepeater.items)}
|
|
182
|
+
selectedItems={this.selectedFiles}
|
|
183
|
+
/>
|
|
184
|
+
|
|
140
185
|
<input type="range" min="100" max="2000" step="100" value={Bind.twoWaysImmediate(() => this.size)} />
|
|
141
186
|
<span text={Bind.oneWay(() => `${this.size}px`)}/>
|
|
142
187
|
<SaveIconTextButton
|
|
@@ -149,9 +194,8 @@ export default class ChooseMediaPage extends PopupWindowPage<{folder: IAppFile,
|
|
|
149
194
|
|
|
150
195
|
@Action({ onEvent: "select-file", close: true })
|
|
151
196
|
async selectFile() {
|
|
152
|
-
const file = this.selectedFile;
|
|
153
197
|
const size = this.size;
|
|
154
|
-
return { file, size };
|
|
198
|
+
return this.selectedFiles.map((file) => ({ file, size }));
|
|
155
199
|
}
|
|
156
200
|
|
|
157
201
|
@Action({ onEvent: "files-available"})
|