@social-mail/social-mail-client 1.0.113 → 1.0.115

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 (230) hide show
  1. package/content/editor/edit.html +159 -0
  2. package/content/templates/plain/index.html +32 -0
  3. package/dist/admin/AdminAppIndex.pack.js +2605 -269
  4. package/dist/admin/AdminAppIndex.pack.js.map +1 -1
  5. package/dist/admin/AdminAppIndex.pack.min.js +258 -9
  6. package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
  7. package/dist/common/Sql.d.ts +1 -0
  8. package/dist/common/Sql.d.ts.map +1 -1
  9. package/dist/common/Sql.js.map +1 -1
  10. package/dist/common/commands/CommonCommands.d.ts +7 -0
  11. package/dist/common/commands/CommonCommands.d.ts.map +1 -1
  12. package/dist/common/commands/CommonCommands.js +10 -0
  13. package/dist/common/commands/CommonCommands.js.map +1 -1
  14. package/dist/common/controls/html/grapes-js/GrapesJSEditor.d.ts +19 -0
  15. package/dist/common/controls/html/grapes-js/GrapesJSEditor.d.ts.map +1 -0
  16. package/dist/common/controls/html/grapes-js/GrapesJSEditor.js +119 -0
  17. package/dist/common/controls/html/grapes-js/GrapesJSEditor.js.map +1 -0
  18. package/dist/common/controls/tree/FileTreeView.d.ts +16 -0
  19. package/dist/common/controls/tree/FileTreeView.d.ts.map +1 -0
  20. package/dist/common/controls/tree/FileTreeView.js +100 -0
  21. package/dist/common/controls/tree/FileTreeView.js.map +1 -0
  22. package/dist/common/controls/tree/TreeView.d.ts +4 -1
  23. package/dist/common/controls/tree/TreeView.d.ts.map +1 -1
  24. package/dist/common/controls/tree/TreeView.js +35 -17
  25. package/dist/common/controls/tree/TreeView.js.map +1 -1
  26. package/dist/common/pages/websites/edit/WebSiteFolderEditor.d.ts.map +1 -1
  27. package/dist/common/pages/websites/edit/WebSiteFolderEditor.js +2 -1
  28. package/dist/common/pages/websites/edit/WebSiteFolderEditor.js.map +1 -1
  29. package/dist/common/pages/websites/manage/ManageWebSitePage.d.ts +10 -0
  30. package/dist/common/pages/websites/manage/ManageWebSitePage.d.ts.map +1 -0
  31. package/dist/common/pages/websites/manage/ManageWebSitePage.js +45 -0
  32. package/dist/common/pages/websites/manage/ManageWebSitePage.js.map +1 -0
  33. package/dist/common/pages/websites/studio/WebSiteStudioPage.d.ts +24 -0
  34. package/dist/common/pages/websites/studio/WebSiteStudioPage.d.ts.map +1 -0
  35. package/dist/common/pages/websites/studio/WebSiteStudioPage.js +244 -0
  36. package/dist/common/pages/websites/studio/WebSiteStudioPage.js.map +1 -0
  37. package/dist/common/pages/websites/templates/ChooseWebSiteTemplatePage.d.ts +9 -0
  38. package/dist/common/pages/websites/templates/ChooseWebSiteTemplatePage.d.ts.map +1 -0
  39. package/dist/common/pages/websites/templates/ChooseWebSiteTemplatePage.js +59 -0
  40. package/dist/common/pages/websites/templates/ChooseWebSiteTemplatePage.js.map +1 -0
  41. package/dist/model/model.d.ts +9 -0
  42. package/dist/model/model.d.ts.map +1 -1
  43. package/dist/model/model.js +2 -1
  44. package/dist/model/model.js.map +1 -1
  45. package/dist/services/websites/WebSiteService.d.ts +1 -0
  46. package/dist/services/websites/WebSiteService.d.ts.map +1 -1
  47. package/dist/services/websites/WebSiteService.js +8 -1
  48. package/dist/services/websites/WebSiteService.js.map +1 -1
  49. package/dist/site-editor/blocks/Block.d.ts +6 -0
  50. package/dist/site-editor/blocks/Block.d.ts.map +1 -0
  51. package/dist/site-editor/blocks/Block.js +48 -0
  52. package/dist/site-editor/blocks/Block.js.map +1 -0
  53. package/dist/site-editor/blocks/ImageBlock.d.ts +2 -0
  54. package/dist/site-editor/blocks/ImageBlock.d.ts.map +1 -0
  55. package/dist/site-editor/blocks/ImageBlock.js +23 -0
  56. package/dist/site-editor/blocks/ImageBlock.js.map +1 -0
  57. package/dist/site-editor/blocks/WrapGrid.d.ts +2 -0
  58. package/dist/site-editor/blocks/WrapGrid.d.ts.map +1 -0
  59. package/dist/site-editor/blocks/WrapGrid.js +22 -0
  60. package/dist/site-editor/blocks/WrapGrid.js.map +1 -0
  61. package/dist/site-editor/commands/CodeCommand.d.ts +2 -0
  62. package/dist/site-editor/commands/CodeCommand.d.ts.map +1 -0
  63. package/dist/site-editor/commands/CodeCommand.js +51 -0
  64. package/dist/site-editor/commands/CodeCommand.js.map +1 -0
  65. package/dist/site-editor/commands/EditorCommand.d.ts +6 -0
  66. package/dist/site-editor/commands/EditorCommand.d.ts.map +1 -0
  67. package/dist/site-editor/commands/EditorCommand.js +52 -0
  68. package/dist/site-editor/commands/EditorCommand.js.map +1 -0
  69. package/dist/site-editor/commands/IEditorCommandParameter.d.ts +5 -0
  70. package/dist/site-editor/commands/IEditorCommandParameter.d.ts.map +1 -0
  71. package/dist/site-editor/commands/IEditorCommandParameter.js +9 -0
  72. package/dist/site-editor/commands/IEditorCommandParameter.js.map +1 -0
  73. package/dist/site-editor/components/Component.d.ts +5 -0
  74. package/dist/site-editor/components/Component.d.ts.map +1 -0
  75. package/dist/site-editor/components/Component.js +21 -0
  76. package/dist/site-editor/components/Component.js.map +1 -0
  77. package/dist/site-editor/components/ImageComponent.d.ts +1 -0
  78. package/dist/site-editor/components/ImageComponent.d.ts.map +1 -0
  79. package/dist/site-editor/components/ImageComponent.js +9 -0
  80. package/dist/site-editor/components/ImageComponent.js.map +1 -0
  81. package/dist/site-editor/drag-drop/DragDropHelper.d.ts +3 -0
  82. package/dist/site-editor/drag-drop/DragDropHelper.d.ts.map +1 -0
  83. package/dist/site-editor/drag-drop/DragDropHelper.js +117 -0
  84. package/dist/site-editor/drag-drop/DragDropHelper.js.map +1 -0
  85. package/dist/site-editor/editor/HtmlPageEditor.d.ts +43 -0
  86. package/dist/site-editor/editor/HtmlPageEditor.d.ts.map +1 -0
  87. package/dist/site-editor/editor/HtmlPageEditor.js +500 -0
  88. package/dist/site-editor/editor/HtmlPageEditor.js.map +1 -0
  89. package/dist/site-editor/properties/ColorEditor.d.ts +6 -0
  90. package/dist/site-editor/properties/ColorEditor.d.ts.map +1 -0
  91. package/dist/site-editor/properties/ColorEditor.js +46 -0
  92. package/dist/site-editor/properties/ColorEditor.js.map +1 -0
  93. package/dist/site-editor/properties/Properties.d.ts +2 -0
  94. package/dist/site-editor/properties/Properties.d.ts.map +1 -0
  95. package/dist/site-editor/properties/Properties.js +48 -0
  96. package/dist/site-editor/properties/Properties.js.map +1 -0
  97. package/dist/site-editor/properties/ThicknessEditor.d.ts +4 -0
  98. package/dist/site-editor/properties/ThicknessEditor.d.ts.map +1 -0
  99. package/dist/site-editor/properties/ThicknessEditor.js +15 -0
  100. package/dist/site-editor/properties/ThicknessEditor.js.map +1 -0
  101. package/dist/site-editor/styler/IStylerPair.d.ts +10 -0
  102. package/dist/site-editor/styler/IStylerPair.d.ts.map +1 -0
  103. package/dist/site-editor/styler/IStylerPair.js +9 -0
  104. package/dist/site-editor/styler/IStylerPair.js.map +1 -0
  105. package/dist/site-editor/styler/Styler.d.ts +170 -0
  106. package/dist/site-editor/styler/Styler.d.ts.map +1 -0
  107. package/dist/site-editor/styler/Styler.js +137 -0
  108. package/dist/site-editor/styler/Styler.js.map +1 -0
  109. package/dist/site-editor/styler/StylerSet.d.ts +8 -0
  110. package/dist/site-editor/styler/StylerSet.d.ts.map +1 -0
  111. package/dist/site-editor/styler/StylerSet.js +51 -0
  112. package/dist/site-editor/styler/StylerSet.js.map +1 -0
  113. package/dist/site-editor/styler/properties/border.d.ts +3 -0
  114. package/dist/site-editor/styler/properties/border.d.ts.map +1 -0
  115. package/dist/site-editor/styler/properties/border.js +38 -0
  116. package/dist/site-editor/styler/properties/border.js.map +1 -0
  117. package/dist/site-editor/styler/properties/boxShadow.d.ts +3 -0
  118. package/dist/site-editor/styler/properties/boxShadow.d.ts.map +1 -0
  119. package/dist/site-editor/styler/properties/boxShadow.js +24 -0
  120. package/dist/site-editor/styler/properties/boxShadow.js.map +1 -0
  121. package/dist/site-editor/styler/properties/color.d.ts +3 -0
  122. package/dist/site-editor/styler/properties/color.d.ts.map +1 -0
  123. package/dist/site-editor/styler/properties/color.js +93 -0
  124. package/dist/site-editor/styler/properties/color.js.map +1 -0
  125. package/dist/site-editor/styler/properties/cursor.d.ts +3 -0
  126. package/dist/site-editor/styler/properties/cursor.d.ts.map +1 -0
  127. package/dist/site-editor/styler/properties/cursor.js +20 -0
  128. package/dist/site-editor/styler/properties/cursor.js.map +1 -0
  129. package/dist/site-editor/styler/properties/filter.d.ts +3 -0
  130. package/dist/site-editor/styler/properties/filter.d.ts.map +1 -0
  131. package/dist/site-editor/styler/properties/filter.js +24 -0
  132. package/dist/site-editor/styler/properties/filter.js.map +1 -0
  133. package/dist/site-editor/styler/properties/layout.d.ts +3 -0
  134. package/dist/site-editor/styler/properties/layout.d.ts.map +1 -0
  135. package/dist/site-editor/styler/properties/layout.js +78 -0
  136. package/dist/site-editor/styler/properties/layout.js.map +1 -0
  137. package/dist/site-editor/toolbars/EditorToolbar.d.ts +3 -0
  138. package/dist/site-editor/toolbars/EditorToolbar.d.ts.map +1 -0
  139. package/dist/site-editor/toolbars/EditorToolbar.js +49 -0
  140. package/dist/site-editor/toolbars/EditorToolbar.js.map +1 -0
  141. package/dist/site-editor/toolbars/UndoRedoToolbar.d.ts +2 -0
  142. package/dist/site-editor/toolbars/UndoRedoToolbar.d.ts.map +1 -0
  143. package/dist/site-editor/toolbars/UndoRedoToolbar.js +40 -0
  144. package/dist/site-editor/toolbars/UndoRedoToolbar.js.map +1 -0
  145. package/dist/style/GlobalStyle.js +1 -1
  146. package/dist/tsconfig.tsbuildinfo +1 -1
  147. package/dist/web/AppIndex.pack.js +5188 -2832
  148. package/dist/web/AppIndex.pack.js.map +1 -1
  149. package/dist/web/AppIndex.pack.min.js +399 -150
  150. package/dist/web/AppIndex.pack.min.js.map +1 -1
  151. package/dist/web/drawer/AppDrawer.d.ts +1 -0
  152. package/dist/web/drawer/AppDrawer.d.ts.map +1 -1
  153. package/dist/web/drawer/AppDrawer.js +24 -4
  154. package/dist/web/drawer/AppDrawer.js.map +1 -1
  155. package/dist/web/page/files/FolderPage.d.ts.map +1 -1
  156. package/dist/web/page/files/FolderPage.js.map +1 -1
  157. package/dist/web/page/files/media/ChooseMediaPage.d.ts +24 -0
  158. package/dist/web/page/files/media/ChooseMediaPage.d.ts.map +1 -0
  159. package/dist/web/page/files/media/ChooseMediaPage.js +165 -0
  160. package/dist/web/page/files/media/ChooseMediaPage.js.map +1 -0
  161. package/dist/web/page/files/service/CloudFileService.d.ts +6 -3
  162. package/dist/web/page/files/service/CloudFileService.d.ts.map +1 -1
  163. package/dist/web/page/files/service/CloudFileService.js +34 -5
  164. package/dist/web/page/files/service/CloudFileService.js.map +1 -1
  165. package/node_modules/@web-atoms/core/dist/core/AtomList.d.ts.map +1 -1
  166. package/node_modules/@web-atoms/core/dist/core/AtomList.js +5 -3
  167. package/node_modules/@web-atoms/core/dist/core/AtomList.js.map +1 -1
  168. package/node_modules/@web-atoms/core/dist/services/FetchBuilder.d.ts +3 -0
  169. package/node_modules/@web-atoms/core/dist/services/FetchBuilder.d.ts.map +1 -1
  170. package/node_modules/@web-atoms/core/dist/services/FetchBuilder.js +10 -0
  171. package/node_modules/@web-atoms/core/dist/services/FetchBuilder.js.map +1 -1
  172. package/node_modules/@web-atoms/core/dist/style/styled.d.ts +2 -2
  173. package/node_modules/@web-atoms/core/dist/style/styled.d.ts.map +1 -1
  174. package/node_modules/@web-atoms/core/dist/style/styled.js.map +1 -1
  175. package/node_modules/@web-atoms/core/dist/tsconfig.tsbuildinfo +1 -1
  176. package/node_modules/@web-atoms/core/package.json +1 -1
  177. package/node_modules/@web-atoms/core/src/core/AtomList.ts +5 -3
  178. package/node_modules/@web-atoms/core/src/services/FetchBuilder.ts +13 -0
  179. package/node_modules/@web-atoms/core/src/style/styled.ts +3 -1
  180. package/node_modules/@web-atoms/web-controls/dist/basic/AtomChips.d.ts +1 -0
  181. package/node_modules/@web-atoms/web-controls/dist/basic/AtomChips.d.ts.map +1 -1
  182. package/node_modules/@web-atoms/web-controls/dist/basic/AtomChips.js +2 -0
  183. package/node_modules/@web-atoms/web-controls/dist/basic/AtomChips.js.map +1 -1
  184. package/node_modules/@web-atoms/web-controls/dist/basic/AtomRepeater.js +3 -0
  185. package/node_modules/@web-atoms/web-controls/dist/basic/AtomRepeater.js.map +1 -1
  186. package/node_modules/@web-atoms/web-controls/dist/tsconfig.tsbuildinfo +1 -1
  187. package/node_modules/@web-atoms/web-controls/package.json +2 -2
  188. package/node_modules/@web-atoms/web-controls/src/basic/AtomChips.tsx +4 -0
  189. package/node_modules/@web-atoms/web-controls/src/basic/AtomRepeater.tsx +3 -0
  190. package/package.json +3 -3
  191. package/src/common/Sql.ts +1 -0
  192. package/src/common/commands/CommonCommands.ts +12 -0
  193. package/src/common/controls/html/grapes-js/GrapesJSEditor.tsx +97 -0
  194. package/src/common/controls/tree/FileTreeView.tsx +74 -0
  195. package/src/common/controls/tree/TreeView.tsx +34 -12
  196. package/src/common/pages/websites/edit/WebSiteFolderEditor.tsx +2 -1
  197. package/src/common/pages/websites/manage/ManageWebSitePage.tsx +44 -0
  198. package/src/common/pages/websites/studio/WebSiteStudioPage.tsx +205 -0
  199. package/src/common/pages/websites/templates/ChooseWebSiteTemplatePage.tsx +38 -0
  200. package/src/model/model.ts +11 -0
  201. package/src/services/websites/WebSiteService.ts +8 -1
  202. package/src/site-editor/blocks/Block.tsx +38 -0
  203. package/src/site-editor/blocks/ImageBlock.tsx +14 -0
  204. package/src/site-editor/blocks/WrapGrid.tsx +11 -0
  205. package/src/site-editor/commands/CodeCommand.tsx +36 -0
  206. package/src/site-editor/commands/EditorCommand.tsx +42 -0
  207. package/src/site-editor/commands/IEditorCommandParameter.ts +5 -0
  208. package/src/site-editor/components/Component.tsx +9 -0
  209. package/src/site-editor/components/ImageComponent.tsx +0 -0
  210. package/src/site-editor/drag-drop/DragDropHelper.ts +141 -0
  211. package/src/site-editor/editor/HtmlPageEditor.tsx +497 -0
  212. package/src/site-editor/properties/ColorEditor.tsx +36 -0
  213. package/src/site-editor/properties/Properties.tsx +35 -0
  214. package/src/site-editor/properties/ThicknessEditor.tsx +5 -0
  215. package/src/site-editor/styler/IStylerPair.ts +9 -0
  216. package/src/site-editor/styler/Styler.ts +169 -0
  217. package/src/site-editor/styler/StylerSet.ts +42 -0
  218. package/src/site-editor/styler/properties/border.ts +30 -0
  219. package/src/site-editor/styler/properties/boxShadow.ts +14 -0
  220. package/src/site-editor/styler/properties/color.ts +82 -0
  221. package/src/site-editor/styler/properties/cursor.ts +49 -0
  222. package/src/site-editor/styler/properties/filter.ts +14 -0
  223. package/src/site-editor/styler/properties/layout.ts +72 -0
  224. package/src/site-editor/toolbars/EditorToolbar.tsx +40 -0
  225. package/src/site-editor/toolbars/UndoRedoToolbar.tsx +27 -0
  226. package/src/style/GlobalStyle.ts +1 -1
  227. package/src/web/drawer/AppDrawer.tsx +21 -4
  228. package/src/web/page/files/FolderPage.tsx +0 -1
  229. package/src/web/page/files/media/ChooseMediaPage.tsx +135 -0
  230. package/src/web/page/files/service/CloudFileService.ts +33 -8
@@ -48,7 +48,7 @@ export default class AppDrawer extends Drawer {
48
48
 
49
49
  this.user = SocialMailApp.user;
50
50
 
51
- const { mailboxes, channels, drives } = await this.getItems();
51
+ const { mailboxes, channels, drives, websites } = await this.getItems();
52
52
 
53
53
  this.renderer = <div>
54
54
  <div
@@ -111,6 +111,22 @@ export default class AppDrawer extends Drawer {
111
111
  commandLink={AppCommands.openDrives.displayRoute({})}
112
112
  />
113
113
  </ExpanderMenu> }
114
+ { websites.length && <ExpanderMenu isExpanded={true}>
115
+ <MenuItem
116
+ icon="fas fa-hard-drive"
117
+ label="Web Sites"
118
+ commandLink={null}
119
+ />
120
+ { ... websites.map((d) => <MenuItem
121
+ commandLink={AppCommands.manageWebSite.displayRoute({ id: d.appFileID })}
122
+ label={d.name}
123
+ description={`${d.creator?.displayName} ${ BigInt(d.fileSize) > BigInt(0) ? "(" + toFileSize(d.fileSize) + ")" : ""}`}
124
+ />)}
125
+ <MenuItem
126
+ label="All"
127
+ commandLink={AppCommands.openWebSiteList.displayRoute({})}
128
+ />
129
+ </ExpanderMenu> }
114
130
  <MenuItem
115
131
  icon="fas fa-money-check-pen"
116
132
  label="Templates"
@@ -157,12 +173,13 @@ export default class AppDrawer extends Drawer {
157
173
  async getItems() {
158
174
  const ms = this.resolve(MailboxService);
159
175
  const fs = this.resolve(CloudFileService);
160
- const [mailboxes, channels, drives] = await Promise.all([
176
+ const [mailboxes, channels, drives, websites] = await Promise.all([
161
177
  ms.top(),
162
178
  ms.top({ isChannel: true }),
163
- fs.top()
179
+ fs.top(),
180
+ fs.top(true)
164
181
  ]);
165
- return { mailboxes, channels, drives };
182
+ return { mailboxes, channels, drives, websites };
166
183
  }
167
184
 
168
185
  @Action({ onEvent: "user-logout"})
@@ -2,7 +2,6 @@ import { ContentPage } from "@web-atoms/web-controls/dist/mobile-app/MobileApp";
2
2
  import { AppFile, IAppFile } from "../../../model/model";
3
3
  import XNode from "@web-atoms/core/dist/core/XNode";
4
4
  import UploadEvent from "@web-atoms/web-controls/dist/basic/UploadEvent";
5
- import { acceptDocumentAndMedia } from "../../../services/files/LocalFileService";
6
5
  import AtomRepeater from "@web-atoms/web-controls/dist/basic/AtomRepeater";
7
6
  import TreeView from "../../../common/controls/tree/TreeView";
8
7
  import Bind from "@web-atoms/core/dist/core/Bind";
@@ -0,0 +1,135 @@
1
+ import { PopupWindowPage } from "@web-atoms/web-controls/dist/mobile-app/MobileApp";
2
+ import { IAppFile } from "../../../../model/model";
3
+ import XNode from "@web-atoms/core/dist/core/XNode";
4
+ import { FolderTreeView } from "../../../../common/controls/tree/FileTreeView";
5
+ import AtomRepeater from "@web-atoms/web-controls/dist/basic/AtomRepeater";
6
+ import Bind from "@web-atoms/core/dist/core/Bind";
7
+ import InjectProperty from "@web-atoms/core/dist/core/InjectProperty";
8
+ import CloudFileService from "../service/CloudFileService";
9
+ import styled from "@web-atoms/core/dist/style/styled";
10
+ import { FilesDragDrop } from "../../../../common/controls/drag-drop/FilesDragDrop";
11
+ import Action from "@web-atoms/core/dist/view-model/Action";
12
+
13
+
14
+ const css = styled.css `
15
+ display: grid;
16
+ grid-template-columns: 200px 1fr;
17
+ gap: 5px;
18
+ & .folder-tree {
19
+ grid-column: 1;
20
+ grid-row: 1;
21
+ }
22
+ & .file-list {
23
+ grid-row: 1;
24
+ grid-column: 2;
25
+ position: relative;
26
+ overflow: auto;
27
+ & > * {
28
+ width: 100%;
29
+ }
30
+
31
+ & .media-file {
32
+ display: inline-block;
33
+ max-height: 300px;
34
+ border: solid 5px transparent;
35
+ overflow: hidden;
36
+ cursor: pointer;
37
+ &:hover {
38
+ border-color: lightblue;
39
+ }
40
+
41
+
42
+ &[data-selected-item] {
43
+ border-color: green;
44
+ }
45
+ }
46
+
47
+ }
48
+ `.installLocal();
49
+
50
+ export default class ChooseMediaPage extends PopupWindowPage<{folder: IAppFile, accept: string}, { file: IAppFile, size: number }> {
51
+
52
+ public parameters;
53
+
54
+ public selectedFolder: IAppFile;
55
+
56
+ @InjectProperty
57
+ private cloudFileService: CloudFileService;
58
+
59
+ private search = "";
60
+
61
+ private version = 1;
62
+
63
+ private size = 700;
64
+
65
+ private selectedFile: IAppFile = null;
66
+
67
+ async init() {
68
+ this.title = "Choose Media";
69
+
70
+ const { accept = "image/*, video/*, audio/*" } = this.parameters;
71
+
72
+ this.selectedFolder = this.parameters.folder;
73
+
74
+ this.element.style.minWidth = "90%";
75
+ this.element.style.minHeight = "90%";
76
+
77
+ this.renderer = <div class={css}>
78
+ <FolderTreeView
79
+ accept={accept}
80
+ folderId={this.parameters.folder.appFileID}
81
+ selectedItem={Bind.twoWaysImmediate(() => this.selectedFolder)}
82
+ />
83
+ <div
84
+ class="file-list"
85
+ { ... FilesDragDrop({
86
+ extra: Bind.oneWay(() => JSON.stringify({ parentID: this.selectedFolder?.appFileID}))
87
+ })}
88
+ >
89
+ <AtomRepeater
90
+ selectOnClick={true}
91
+ selectedItem={Bind.twoWaysImmediate(() => this.selectedFile)}
92
+ header={true}
93
+ headerRenderer={(item) => <div
94
+ data-position="sticky-top"
95
+ data-layout="header-row">
96
+ </div>}
97
+ items={Bind.oneWayAsync((c, e, cancelToken) =>
98
+ this.cloudFileService.files({
99
+ search: this.search,
100
+ folder: this.selectedFolder,
101
+ version: this.version,
102
+ accept,
103
+ cancelToken
104
+ })
105
+ )}
106
+ itemRenderer={(item: IAppFile) => <div class="media-file">
107
+ <img src={`/api/files/jpg(300)/${item.appFileID}/${item.fileContentID}/${item.name}.300.jpg`} />
108
+ </div>}
109
+ />
110
+ </div>
111
+ </div>;
112
+
113
+ this.footerRenderer = () => <div
114
+ style-display={Bind.oneWay(() => this.selectedFile !== null)}
115
+ data-layout="command-row">
116
+ <input type="range" min="100" max="2000" step="100" value={Bind.twoWaysImmediate(() => this.size)} />
117
+ <span text={Bind.oneWay(() => `${this.size}px`)}/>
118
+ <button data-click-event="select-file" text="Save"/>
119
+ </div>;
120
+
121
+ }
122
+
123
+ @Action({ onEvent: "select-file", close: true })
124
+ async selectFile() {
125
+ const file = this.selectedFile;
126
+ const size = this.size;
127
+ return { file, size };
128
+ }
129
+
130
+ @Action({ onEvent: "files-available"})
131
+ async onFilesUploaded() {
132
+ this.version++;
133
+ }
134
+
135
+ }
@@ -15,10 +15,14 @@ export default class CloudFileService {
15
15
  @Inject
16
16
  private entityService: EntityService;
17
17
 
18
- async top() {
18
+ async top(site: boolean = false) {
19
19
  const userID = SocialMailApp.user.userID;
20
- const top = await this.entityService.query(AppFile)
21
- .where((x) => x.isFolder === true && x.parentID === null && x.path !== null)
20
+ let q = this.entityService.query(AppFile)
21
+ .where((x) => x.isFolder === true && x.parentID === null && x.path !== null);
22
+ q = site
23
+ ? q.where((x) => x.websiteFolder.folderID !== null)
24
+ : q.where((x) => x.websiteFolder.folderID === null);
25
+ const top = await q
22
26
  .orderByDescending({userID} , (p) => (x) => x.userPins.some((s) => p.userID === s.userID))
23
27
  .thenByDescending((x) => x.dateUpdated)
24
28
  .include((x) => x.creator)
@@ -58,15 +62,29 @@ export default class CloudFileService {
58
62
  .toArray();
59
63
 
60
64
  return all.filter((x) => !x.parentID);
61
- }
65
+ }
66
+
67
+ async getFolder(id, cancelToken = null) {
68
+ const folder = await this.entityService.query(AppFile)
69
+ .where({id}, (p) => (x) => x.appFileID === p.id)
70
+ .include((x) => x.creator)
71
+ .include((x) => x.children)
72
+ .firstOrDefault({ cancelToken });
73
+ if (folder.children) {
74
+ folder.children.remove((x) => !x.isFolder);
75
+ } else {
76
+ folder.children = [];
77
+ }
78
+ return folder;
79
+ }
62
80
 
63
- async root({ id, templates = false}) {
81
+ async root({ id, templates = false, cancelToken = null}) {
64
82
 
65
83
  if (templates) {
66
84
 
67
85
  const children = await this.entityService.query(AppFile)
68
86
  .where((x) => x.templates.some((c) => true))
69
- .toArray();
87
+ .toArray({ cancelToken });
70
88
 
71
89
  const root = AppFile.create({
72
90
  name: "Templates",
@@ -82,7 +100,7 @@ export default class CloudFileService {
82
100
  .where({id}, (p) => (x) => x.appFileID === p.id)
83
101
  .include((x) => x.creator)
84
102
  .include((x) => x.children)
85
- .firstOrDefault();
103
+ .firstOrDefault({ cancelToken });
86
104
  }
87
105
 
88
106
  async rootFolders() {
@@ -129,10 +147,11 @@ export default class CloudFileService {
129
147
 
130
148
  async files({
131
149
  search = "",
150
+ accept = "",
132
151
  folder,
133
152
  cancelToken,
134
153
  showDeleted = false
135
- }: { search: string, folder: IAppFile, cancelToken: CancelToken, version?: any, showDeleted?: boolean}) {
154
+ }: { search: string, accept?: string, folder: IAppFile, cancelToken: CancelToken, version?: any, showDeleted?: boolean}) {
136
155
  const parentID = folder?.appFileID;
137
156
 
138
157
  if (!parentID) {
@@ -147,6 +166,12 @@ export default class CloudFileService {
147
166
  }
148
167
  q = q.where({ search }, (p) => (x) => Sql.text.like(x.name, p.search));
149
168
  }
169
+
170
+ if (accept) {
171
+ const contentTypes = accept.split(/\,/g).map((x) => x.replace("*", "%").trim()).filter((x) => x);
172
+ q = q.where({ contentTypes }, (p) => (x) => x.isFolder || Sql.text.iLikeAny( x.contentType, p.contentTypes));
173
+ }
174
+
150
175
  const files = await q
151
176
  .orderByDescending((x) => x.isFolder)
152
177
  .thenBy((x) => x.name)