@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.
Files changed (49) hide show
  1. package/dist/admin/AdminAppIndex.pack.js +99 -52
  2. package/dist/admin/AdminAppIndex.pack.js.map +1 -1
  3. package/dist/admin/AdminAppIndex.pack.min.js +33 -5
  4. package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
  5. package/dist/common/controls/html/grapes-js/GrapesJSEditor.js +2 -2
  6. package/dist/common/controls/html/grapes-js/GrapesJSEditor.js.map +1 -1
  7. package/dist/common/pages/mailboxes/services/MailboxService.js +1 -1
  8. package/dist/common/pages/mailboxes/services/MailboxService.js.map +1 -1
  9. package/dist/public/store/Store.d.ts +6 -0
  10. package/dist/public/store/Store.d.ts.map +1 -0
  11. package/dist/public/store/Store.js +23 -0
  12. package/dist/public/store/Store.js.map +1 -0
  13. package/dist/public/store/Store.pack.js +20735 -0
  14. package/dist/public/store/Store.pack.js.map +1 -0
  15. package/dist/public/store/Store.pack.min.js +561 -0
  16. package/dist/public/store/Store.pack.min.js.map +1 -0
  17. package/dist/public/store/StoreItemDetailView.d.ts +4 -0
  18. package/dist/public/store/StoreItemDetailView.d.ts.map +1 -0
  19. package/dist/public/store/StoreItemDetailView.js +22 -0
  20. package/dist/public/store/StoreItemDetailView.js.map +1 -0
  21. package/dist/public/store/StoreItemListView.d.ts +13 -0
  22. package/dist/public/store/StoreItemListView.d.ts.map +1 -1
  23. package/dist/public/store/StoreItemListView.js +99 -4
  24. package/dist/public/store/StoreItemListView.js.map +1 -1
  25. package/dist/site-editor/editor/HtmlPageEditor.d.ts +2 -2
  26. package/dist/site-editor/editor/HtmlPageEditor.d.ts.map +1 -1
  27. package/dist/site-editor/editor/HtmlPageEditor.js +34 -30
  28. package/dist/site-editor/editor/HtmlPageEditor.js.map +1 -1
  29. package/dist/site-editor/editor/WebSitePageEditor.d.ts.map +1 -1
  30. package/dist/site-editor/editor/WebSitePageEditor.js +14 -10
  31. package/dist/site-editor/editor/WebSitePageEditor.js.map +1 -1
  32. package/dist/tsconfig.tsbuildinfo +1 -1
  33. package/dist/web/AppIndex.pack.js +99 -52
  34. package/dist/web/AppIndex.pack.js.map +1 -1
  35. package/dist/web/AppIndex.pack.min.js +34 -6
  36. package/dist/web/AppIndex.pack.min.js.map +1 -1
  37. package/dist/web/page/files/media/ChooseMediaPage.d.ts +4 -3
  38. package/dist/web/page/files/media/ChooseMediaPage.d.ts.map +1 -1
  39. package/dist/web/page/files/media/ChooseMediaPage.js +50 -11
  40. package/dist/web/page/files/media/ChooseMediaPage.js.map +1 -1
  41. package/package.json +1 -1
  42. package/src/common/controls/html/grapes-js/GrapesJSEditor.tsx +1 -1
  43. package/src/common/pages/mailboxes/services/MailboxService.ts +1 -1
  44. package/src/public/store/Store.tsx +15 -0
  45. package/src/public/store/StoreItemDetailView.tsx +16 -0
  46. package/src/public/store/StoreItemListView.tsx +112 -1
  47. package/src/site-editor/editor/HtmlPageEditor.tsx +28 -26
  48. package/src/site-editor/editor/WebSitePageEditor.tsx +10 -6
  49. 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 selectedFile;
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;AAwDnD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,eAAe,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;IAEvH,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,YAAY,CAAkB;IAEhC,IAAI;IA4EJ,UAAU;;;;IAOV,eAAe;CAIxB"}
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-block;
63
- max-height: 300px;
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.selectedFile = null;
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
- selectedItem: Bind.twoWaysImmediate(() => this.selectedFile),
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("img", {
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.selectedFile !== null),
191
+ "style-display": Bind.oneWay(() => this.selectedFiles.length > 0),
155
192
  "data-layout": "row"
156
- }, XNode.create("input", {
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","selectedFile","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","selectOnClick","header","headerRenderer","item","items","oneWayAsync","c","e","cancelToken","cloudFileService","files","showFolder","itemRenderer","src","fileContentID","name","footerRenderer","min","max","step","text","selectFile","file","onFilesUploaded","__decorate","onEvent","close"],"sources":["../../../../../src/web/page/files/media/ChooseMediaPage.tsx"],"sourcesContent":[null],"mappings":";;;gNAyDqBA,eAAgB,EAAAC,GAAA;EAAAC,OAAA;EAAA;IAAAC,OAAA,aAAAC,MAAA;;;;;MAzD5BC,eAAe,GAAAC,0CAAA,CAAfD,eAAe;IAAA,aAAAE,0BAAA;MAEjBC,KAAK,GAAAD,0BAAA,CAAAE,OAAA;IAAA,aAAAC,+BAAA;MACHC,cAAc,GAAAD,+BAAA,CAAdC,cAAc;IAAA,aAAAC,yCAAA;MAChBC,YAAY,GAAAD,yCAAA,CAAAH,OAAA;IAAA,aAAAK,yBAAA;MACZC,IAAI,GAAAD,yBAAA,CAAAL,OAAA;IAAA,aAAAO,mCAAA;MACJC,cAAc,GAAAD,mCAAA,CAAAP,OAAA;IAAA,aAAAS,wBAAA;MACdC,gBAAgB,GAAAD,wBAAA,CAAAT,OAAA;IAAA,aAAAW,4BAAA;MAChBC,MAAM,GAAAD,4BAAA,CAAAX,OAAA;IAAA,aAAAa,oCAAA;MACJC,aAAa,GAAAD,oCAAA,CAAbC,aAAa;IAAA,aAAAC,gCAAA;MACfC,MAAM,GAAAD,gCAAA,CAAAf,OAAA;IAAA,aAAAiB,wCAAA;MACNC,WAAW,GAAAD,wCAAA,CAAAjB,OAAA;IAAA,aAAAmB,gCAAA;MACTC,kBAAkB,GAAAD,gCAAA,CAAlBC,kBAAkB;IAAA,aAAAC,cAAA;MAClBC,OAAO,GAAAD,cAAA,CAAPC,OAAO;IAAA;IAAAC,OAAA,WAAAA,CAAA;MAGV/B,GAAG,GAAGoB,MAAM,CAACpB,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCtB,CAACgC,YAAY,EAAE;MAAA/B,OAAA,YAEKF,eAAgB,GAAvB,MAAOA,eAAgB,SAAQK,eAAqF;QAAlI6B,YAAA;;UASY,KAAAC,MAAM,GAAG,EAAE;UAEX,KAAAC,OAAO,GAAG,CAAC;UAEX,KAAAC,IAAI,GAAG,GAAG;UAEV,KAAAC,YAAY,GAAa,IAAI;QAyFzC;QAvFUC,IAAIA,CAAA;;YACN,IAAI,CAACC,KAAK,GAAG,cAAc;YAE3B,MAAM;cAAEC,MAAM,GAAG;YAA2B,CAAE,GAAG,IAAI,CAACC,UAAU;YAEhE,IAAI,CAACC,cAAc,GAAG,IAAI,CAACD,UAAU,CAACE,MAAM;YAE5C,IAAI,CAACC,OAAO,CAACC,KAAK,CAACC,QAAQ,GAAG,KAAK;YACnC,IAAI,CAACF,OAAO,CAACC,KAAK,CAACE,SAAS,GAAG,KAAK;YAEpC,IAAI,CAACC,QAAQ,GAAGzC,KAAA,CAAA0C,MAAA;cAAKC,KAAK,EAAElD;YAAG,GAC3BO,KAAA,CAAA0C,MAAA,CAACvC,cAAc;cACXwC,KAAK,EAAC,aAAa;cACnBV,MAAM,EAAEA,MAAM;cACdW,QAAQ,EAAE,IAAI,CAACV,UAAU,CAACE,MAAM,CAACS,SAAS;cAC1CC,YAAY,EAAEvC,IAAI,CAACwC,gBAAgB,CAAC,MAAM,IAAI,CAACZ,cAAc;YAAC,EAC5D,EACNnC,KAAA,CAAA0C,MAAA;cAAKC,KAAK,EAAC,QAAQ;cAAA,eAAa;YAAK,GACjC3C,KAAA,CAAA0C,MAAA;cAAOM,IAAI,EAAC,QAAQ;cAACC,KAAK,EAAE1C,IAAI,CAACwC,gBAAgB,CAAC,MAAM,IAAI,CAACpB,MAAM;YAAC,EAAG,EACvE3B,KAAA,CAAA0C,MAAA,WAAAQ,MAAA,CAAAC,MAAA;cAAA,eACgB;YAAoB,GAC1BhC,WAAW,CAACiC,kBAAkB,CAAC;cACjCC,QAAQ,EAAE,IAAI;cACdC,KAAK,EAAE/C,IAAI,CAACgD,MAAM,CAAC,MAAK;gBAAA,IAAAC,EAAA;gBAAC,OAAAC,IAAI,CAACC,SAAS,CAAC;kBAAEC,QAAQ,EAAE,CAAAH,EAAA,OAAI,CAACrB,cAAc,cAAAqB,EAAA,uBAAAA,EAAA,CAAEX;gBAAS,CAAC,CAAC;cAAA,EAAC;cACrFZ;aACH,CAAC,GACFjC,KAAA,CAAA0C,MAAA;cAAGC,KAAK,EAAC;YAAe,EAAE,E,SAErB,CACP,EACN3C,KAAA,CAAA0C,MAAA,QAAAQ,MAAA,CAAAC,MAAA;cACIR,KAAK,EAAC;YAAW,GACX5B,aAAa,CAAC;cAChBuC,KAAK,EAAE/C,IAAI,CAACgD,MAAM,CAAC,MAAK;gBAAA,IAAAC,EAAA;gBAAC,OAAAC,IAAI,CAACC,SAAS,CAAC;kBAAEC,QAAQ,EAAE,CAAAH,EAAA,OAAI,CAACrB,cAAc,cAAAqB,EAAA,uBAAAA,EAAA,CAAEX;gBAAS,CAAC,CAAC;cAAA;aACvF,CAAC,GAEF7C,KAAA,CAAA0C,MAAA,CAACrC,YAAY;cACTuD,aAAa,EAAE,IAAI;cACnBd,YAAY,EAAEvC,IAAI,CAACwC,gBAAgB,CAAC,MAAM,IAAI,CAACjB,YAAY,CAAC;cAC5D+B,MAAM,EAAE,IAAI;cACZC,cAAc,EAAGC,IAAI,IAAK/D,KAAA,CAAA0C,MAAA;gBAAA,iBACR,YAAY;gBAAA,eACd;cAAY,EACtB;cACNsB,KAAK,EAAEzD,IAAI,CAAC0D,WAAW,CAAC,CAACC,CAAC,EAAEC,CAAC,EAAEC,WAAW,KACtC,IAAI,CAACC,gBAAgB,CAACC,KAAK,CAAC;gBACxB3C,MAAM,EAAE,IAAI,CAACA,MAAM;gBACnBS,MAAM,EAAE,IAAI,CAACD,cAAc;gBAC3BP,OAAO,EAAE,IAAI,CAACA,OAAO;gBACrB2C,UAAU,EAAE,KAAK;gBACjBtC,MAAM;gBACNmC;eACH,CAAC,CACL;cACDI,YAAY,EAAGT,IAAc,IAAK/D,KAAA,CAAA0C,MAAA;gBAAKC,KAAK,EAAC;cAAY,GACrD3C,KAAA,CAAA0C,MAAA;gBAAK+B,GAAG,EAAGlD,OAAO,CAAC,wBAAwBwC,IAAI,CAAClB,SAAS,IAAIkB,IAAI,CAACW,aAAa,IAAIX,IAAI,CAACY,IAAI,WAAW;cAAC,EAAI;YAC1G,EACJ,CACJ,CACJ;YAEN,IAAI,CAACC,cAAc,GAAG,MAClB5E,KAAA,CAAA0C,MAAA;cAAA,iBACmBnC,IAAI,CAACgD,MAAM,CAAC,MAAM,IAAI,CAACzB,YAAY,KAAK,IAAI,CAAC;cAAA,eAChD;YAAK,GACjB9B,KAAA,CAAA0C,MAAA;cAAOM,IAAI,EAAC,OAAO;cAAC6B,GAAG,EAAC,KAAK;cAACC,GAAG,EAAC,MAAM;cAACC,IAAI,EAAC,KAAK;cAAC9B,KAAK,EAAE1C,IAAI,CAACwC,gBAAgB,CAAC,MAAM,IAAI,CAAClB,IAAI;YAAC,EAAI,EACrG7B,KAAA,CAAA0C,MAAA;cAAMsC,IAAI,EAAEzE,IAAI,CAACgD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC1B,IAAI,IAAI;YAAC,EAAG,EAClD7B,KAAA,CAAA0C,MAAA,CAACrB,kBAAkB;cAAA,oBACE,aAAa;cAC9B2D,IAAI,EAAC;YAAQ,EACX,CACJ;UAEd,CAAC;;QAGKC,UAAUA,CAAA;;YACZ,MAAMC,IAAI,GAAG,IAAI,CAACpD,YAAY;YAC9B,MAAMD,IAAI,GAAG,IAAI,CAACA,IAAI;YACtB,OAAO;cAAEqD,IAAI;cAAErD;YAAI,CAAE;UACzB,CAAC;;QAGKsD,eAAeA,CAAA;;YACjB,IAAI,CAACvD,OAAO,EAAE;UAClB,CAAC;;OAEJ;MAlGGwD,UAAA,EAAC3E,cAAc,E,0BACWE,gBAAgB,E,wDAAC;MAsFrCyE,UAAA,EADLnE,MAAM,CAAC;QAAEoE,OAAO,EAAE,aAAa;QAAEC,KAAK,EAAE;MAAI,CAAE,CAAC,E,mKAK/C;MAGKF,UAAA,EADLnE,MAAM,CAAC;QAAEoE,OAAO,EAAE;MAAiB,CAAC,CAAC,E,wKAGrC;IAAA;EAAA;AAAA"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@social-mail/social-mail-client",
3
- "version": "1.2.231",
3
+ "version": "1.2.233",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -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
- && Sql.in(x.mailboxID, p.ids)
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({ src, style, ... a }: { src: string, style?: { [key: string]: string} , [key: string]: any }) {
498
- let img: HTMLImageElement;
499
- if(this.selection.isImage) {
500
- img = this.selection.element as HTMLImageElement;
501
- } else {
502
- img = this.htmlDocument.createElement("img");
503
- this.selection.element.appendChild(img);
504
- this.selection.element.appendChild(document.createTextNode("\n"));
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
- img.onload = () => {
510
- this.selection.update();
511
- img.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;
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
- 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);
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, { folder: this.folder, accept: "image/*" });
25
- const src = imageUrl(this.folder, file, size);
26
- const srcset = srcSetUrl(this.folder, file);
27
- await this.insertImage({
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-block;
41
- max-height: 300px;
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<{folder: IAppFile, accept: string}, { file: IAppFile, size: number }> {
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 selectedFile: IAppFile = null;
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
- selectedItem={Bind.twoWaysImmediate(() => this.selectedFile)}
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
- <img src={ apiPath(`/api/files/webp(300)/${item.appFileID}/${item.fileContentID}/${item.name}.300.webp`)} />
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.selectedFile !== null)}
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"})