@social-mail/social-mail-client 1.2.252 → 1.2.253

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 (169) hide show
  1. package/dist/admin/AdminAppIndex.pack.js +717 -76
  2. package/dist/admin/AdminAppIndex.pack.js.map +1 -1
  3. package/dist/admin/AdminAppIndex.pack.min.js +22 -16
  4. package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
  5. package/dist/code-editor/CodeEditorPage.d.ts +1 -3
  6. package/dist/code-editor/CodeEditorPage.d.ts.map +1 -1
  7. package/dist/code-editor/CodeEditorPage.js +5 -4
  8. package/dist/code-editor/CodeEditorPage.js.map +1 -1
  9. package/dist/common/controls/Loader.d.ts +2 -0
  10. package/dist/common/controls/Loader.d.ts.map +1 -0
  11. package/dist/common/controls/Loader.js +21 -0
  12. package/dist/common/controls/Loader.js.map +1 -0
  13. package/dist/common/controls/collection-editor/CollectionEditorEx.js +18 -8
  14. package/dist/common/controls/collection-editor/CollectionEditorEx.js.map +1 -1
  15. package/dist/common/controls/reference-editor/ReferenceEditor.d.ts.map +1 -1
  16. package/dist/common/controls/reference-editor/ReferenceEditor.js.map +1 -1
  17. package/dist/common/fileUrl.d.ts +14 -1
  18. package/dist/common/fileUrl.d.ts.map +1 -1
  19. package/dist/common/fileUrl.js +24 -5
  20. package/dist/common/fileUrl.js.map +1 -1
  21. package/dist/common/pages/stores/products/EditProductDetailPage.d.ts +4 -3
  22. package/dist/common/pages/stores/products/EditProductDetailPage.d.ts.map +1 -1
  23. package/dist/common/pages/stores/products/EditProductDetailPage.js +21 -5
  24. package/dist/common/pages/stores/products/EditProductDetailPage.js.map +1 -1
  25. package/dist/common/pages/stores/products/ProductEditor.d.ts +10 -1
  26. package/dist/common/pages/stores/products/ProductEditor.d.ts.map +1 -1
  27. package/dist/common/pages/stores/products/ProductEditor.js +176 -27
  28. package/dist/common/pages/stores/products/ProductEditor.js.map +1 -1
  29. package/dist/common/pages/stores/products/html/Offsers.d.ts +2 -0
  30. package/dist/common/pages/stores/products/html/Offsers.d.ts.map +1 -0
  31. package/dist/common/pages/stores/products/html/Offsers.js +20 -0
  32. package/dist/common/pages/stores/products/html/Offsers.js.map +1 -0
  33. package/dist/common/pages/stores/products/html/ProductHtmlEditor.d.ts +9 -0
  34. package/dist/common/pages/stores/products/html/ProductHtmlEditor.d.ts.map +1 -0
  35. package/dist/common/pages/stores/products/html/ProductHtmlEditor.js +64 -0
  36. package/dist/common/pages/stores/products/html/ProductHtmlEditor.js.map +1 -0
  37. package/dist/common/pages/stores/products/html/ProductHtmlEditorPage.d.ts +21 -0
  38. package/dist/common/pages/stores/products/html/ProductHtmlEditorPage.d.ts.map +1 -0
  39. package/dist/common/pages/stores/products/html/ProductHtmlEditorPage.js +138 -0
  40. package/dist/common/pages/stores/products/html/ProductHtmlEditorPage.js.map +1 -0
  41. package/dist/common/pages/stores/products/html/Specifications.d.ts +2 -0
  42. package/dist/common/pages/stores/products/html/Specifications.d.ts.map +1 -0
  43. package/dist/common/pages/stores/products/html/Specifications.js +22 -0
  44. package/dist/common/pages/stores/products/html/Specifications.js.map +1 -0
  45. package/dist/common/pages/websites/studio/WebSiteStudioPage.js +1 -1
  46. package/dist/common/pages/websites/studio/WebSiteStudioPage.js.map +1 -1
  47. package/dist/model/model.d.ts +21 -2
  48. package/dist/model/model.d.ts.map +1 -1
  49. package/dist/model/model.js +90 -11
  50. package/dist/model/model.js.map +1 -1
  51. package/dist/public/channel/ChannelView.pack.js +107 -16
  52. package/dist/public/channel/ChannelView.pack.js.map +1 -1
  53. package/dist/public/channel/ChannelView.pack.min.js +3 -3
  54. package/dist/public/channel/ChannelView.pack.min.js.map +1 -1
  55. package/dist/public/store/Store.pack.js +10729 -10631
  56. package/dist/public/store/Store.pack.js.map +1 -1
  57. package/dist/public/store/Store.pack.min.js +149 -288
  58. package/dist/public/store/Store.pack.min.js.map +1 -1
  59. package/dist/public/store/StoreApp.d.ts +1 -0
  60. package/dist/public/store/StoreApp.d.ts.map +1 -1
  61. package/dist/public/store/StoreApp.js +2 -2
  62. package/dist/public/store/StoreApp.js.map +1 -1
  63. package/dist/public/store/StoreApp.pack.js +35 -7
  64. package/dist/public/store/StoreApp.pack.js.map +1 -1
  65. package/dist/public/store/StoreApp.pack.min.js +8 -4
  66. package/dist/public/store/StoreApp.pack.min.js.map +1 -1
  67. package/dist/public/store/StoreItemDetailView.d.ts +13 -2
  68. package/dist/public/store/StoreItemDetailView.d.ts.map +1 -1
  69. package/dist/public/store/StoreItemDetailView.js +147 -7
  70. package/dist/public/store/StoreItemDetailView.js.map +1 -1
  71. package/dist/public/store/StoreItemListView.d.ts +2 -2
  72. package/dist/public/store/StoreItemListView.d.ts.map +1 -1
  73. package/dist/public/store/StoreItemListView.js +11 -9
  74. package/dist/public/store/StoreItemListView.js.map +1 -1
  75. package/dist/public/store/styles/common.d.ts +2 -0
  76. package/dist/public/store/styles/common.d.ts.map +1 -0
  77. package/dist/public/store/styles/common.js +18 -0
  78. package/dist/public/store/styles/common.js.map +1 -0
  79. package/dist/services/store/StoreItemService.d.ts +5 -0
  80. package/dist/services/store/StoreItemService.d.ts.map +1 -1
  81. package/dist/services/store/StoreItemService.js +66 -4
  82. package/dist/services/store/StoreItemService.js.map +1 -1
  83. package/dist/site-editor/editor/HtmlPageEditor.d.ts +1 -0
  84. package/dist/site-editor/editor/HtmlPageEditor.d.ts.map +1 -1
  85. package/dist/site-editor/editor/HtmlPageEditor.js +1 -0
  86. package/dist/site-editor/editor/HtmlPageEditor.js.map +1 -1
  87. package/dist/site-editor/editor/WebSitePageEditor.js +1 -1
  88. package/dist/site-editor/editor/WebSitePageEditor.js.map +1 -1
  89. package/dist/tsconfig.tsbuildinfo +1 -1
  90. package/dist/web/AppIndex.pack.js +717 -76
  91. package/dist/web/AppIndex.pack.js.map +1 -1
  92. package/dist/web/AppIndex.pack.min.js +22 -16
  93. package/dist/web/AppIndex.pack.min.js.map +1 -1
  94. package/dist/web/page/files/media/ChooseMediaPage.d.ts.map +1 -1
  95. package/dist/web/page/files/media/ChooseMediaPage.js +5 -1
  96. package/dist/web/page/files/media/ChooseMediaPage.js.map +1 -1
  97. package/dist/web/page/files/service/CloudFileService.d.ts +2 -1
  98. package/dist/web/page/files/service/CloudFileService.d.ts.map +1 -1
  99. package/dist/web/page/files/service/CloudFileService.js +5 -2
  100. package/dist/web/page/files/service/CloudFileService.js.map +1 -1
  101. package/node_modules/@web-atoms/core/dist/services/MockNavigationService.js.map +1 -1
  102. package/node_modules/@web-atoms/core/dist/tsconfig.tsbuildinfo +1 -1
  103. package/node_modules/@web-atoms/core/dist/web/controls/AtomControl.js +7 -3
  104. package/node_modules/@web-atoms/core/dist/web/controls/AtomControl.js.map +1 -1
  105. package/node_modules/@web-atoms/core/package.json +1 -1
  106. package/node_modules/@web-atoms/core/src/web/controls/AtomControl.ts +8 -2
  107. package/node_modules/@web-atoms/email-dom/dist/DomToString.js +10 -2
  108. package/node_modules/@web-atoms/email-dom/dist/DomToString.js.map +1 -1
  109. package/node_modules/@web-atoms/email-dom/dist/core/IXStyle.js.map +1 -1
  110. package/node_modules/@web-atoms/email-dom/dist/dom/Bold.js.map +1 -1
  111. package/node_modules/@web-atoms/email-dom/dist/dom/Button.js.map +1 -1
  112. package/node_modules/@web-atoms/email-dom/dist/dom/Cell.js.map +1 -1
  113. package/node_modules/@web-atoms/email-dom/dist/dom/Div.js.map +1 -1
  114. package/node_modules/@web-atoms/email-dom/dist/dom/EllipsisText.js.map +1 -1
  115. package/node_modules/@web-atoms/email-dom/dist/dom/Email.js.map +1 -1
  116. package/node_modules/@web-atoms/email-dom/dist/dom/EmailFooter.js.map +1 -1
  117. package/node_modules/@web-atoms/email-dom/dist/dom/FloatingBox.js.map +1 -1
  118. package/node_modules/@web-atoms/email-dom/dist/dom/HeaderBox.js.map +1 -1
  119. package/node_modules/@web-atoms/email-dom/dist/dom/Hr.js.map +1 -1
  120. package/node_modules/@web-atoms/email-dom/dist/dom/Image.js.map +1 -1
  121. package/node_modules/@web-atoms/email-dom/dist/dom/InlineDiv.js.map +1 -1
  122. package/node_modules/@web-atoms/email-dom/dist/dom/Link.js.map +1 -1
  123. package/node_modules/@web-atoms/email-dom/dist/dom/Pre.js.map +1 -1
  124. package/node_modules/@web-atoms/email-dom/dist/dom/Row.js.map +1 -1
  125. package/node_modules/@web-atoms/email-dom/dist/dom/Span.js.map +1 -1
  126. package/node_modules/@web-atoms/email-dom/dist/dom/StyleHelper.js.map +1 -1
  127. package/node_modules/@web-atoms/email-dom/dist/dom/Table.js.map +1 -1
  128. package/node_modules/@web-atoms/email-dom/dist/dom/TextBox.js.map +1 -1
  129. package/node_modules/@web-atoms/email-dom/dist/style/IEmailElementStyle.js.map +1 -1
  130. package/node_modules/@web-atoms/email-dom/dist/style/mergeStyle.js.map +1 -1
  131. package/node_modules/@web-atoms/email-dom/dist/tsconfig.tsbuildinfo +1 -1
  132. package/node_modules/@web-atoms/email-dom/package.json +1 -1
  133. package/node_modules/@web-atoms/email-dom/src/DomToString.tsx +10 -4
  134. package/node_modules/@web-atoms/web-controls/dist/basic/PinchZoomView.d.ts.map +1 -1
  135. package/node_modules/@web-atoms/web-controls/dist/basic/PinchZoomView.js +1 -0
  136. package/node_modules/@web-atoms/web-controls/dist/basic/PinchZoomView.js.map +1 -1
  137. package/node_modules/@web-atoms/web-controls/dist/basic/styles/pinch-zoom-view-style.js +1 -0
  138. package/node_modules/@web-atoms/web-controls/dist/basic/styles/pinch-zoom-view-style.js.map +1 -1
  139. package/node_modules/@web-atoms/web-controls/dist/mobile-app/MobileApp.d.ts.map +1 -1
  140. package/node_modules/@web-atoms/web-controls/dist/mobile-app/MobileApp.js +4 -1
  141. package/node_modules/@web-atoms/web-controls/dist/mobile-app/MobileApp.js.map +1 -1
  142. package/node_modules/@web-atoms/web-controls/dist/tsconfig.tsbuildinfo +1 -1
  143. package/node_modules/@web-atoms/web-controls/package.json +1 -1
  144. package/node_modules/@web-atoms/web-controls/src/basic/PinchZoomView.tsx +1 -0
  145. package/node_modules/@web-atoms/web-controls/src/basic/styles/pinch-zoom-view-style.ts +1 -0
  146. package/node_modules/@web-atoms/web-controls/src/mobile-app/MobileApp.tsx +5 -1
  147. package/package.json +4 -4
  148. package/src/code-editor/CodeEditorPage.tsx +4 -6
  149. package/src/common/controls/Loader.tsx +9 -0
  150. package/src/common/controls/collection-editor/CollectionEditorEx.tsx +27 -13
  151. package/src/common/controls/reference-editor/ReferenceEditor.tsx +1 -0
  152. package/src/common/fileUrl.ts +17 -5
  153. package/src/common/pages/stores/products/EditProductDetailPage.tsx +11 -2
  154. package/src/common/pages/stores/products/ProductEditor.tsx +179 -33
  155. package/src/common/pages/stores/products/html/Offsers.tsx +9 -0
  156. package/src/common/pages/stores/products/html/ProductHtmlEditor.tsx +37 -0
  157. package/src/common/pages/stores/products/html/ProductHtmlEditorPage.tsx +131 -0
  158. package/src/common/pages/stores/products/html/Specifications.tsx +41 -0
  159. package/src/common/pages/websites/studio/WebSiteStudioPage.tsx +1 -1
  160. package/src/model/model.ts +35 -8
  161. package/src/public/store/StoreApp.tsx +1 -0
  162. package/src/public/store/StoreItemDetailView.tsx +160 -3
  163. package/src/public/store/StoreItemListView.tsx +6 -6
  164. package/src/public/store/styles/common.ts +7 -0
  165. package/src/services/store/StoreItemService.ts +68 -2
  166. package/src/site-editor/editor/HtmlPageEditor.tsx +2 -0
  167. package/src/site-editor/editor/WebSitePageEditor.tsx +1 -1
  168. package/src/web/page/files/media/ChooseMediaPage.tsx +5 -1
  169. package/src/web/page/files/service/CloudFileService.ts +7 -3
@@ -221,6 +221,7 @@ export interface IContact extends IClrEntity {
221
221
  items?: ICollection<IContactItem>;
222
222
  domains?: ICollection<IContactDomain>;
223
223
  sellerStores?: ICollection<IStore>;
224
+ vendorItems?: ICollection<IStoreItem>;
224
225
  ledgers?: ICollection<IStoreLedger>;
225
226
  soldInvoices?: ICollection<IStoreJournal>;
226
227
  boughtInvoices?: ICollection<IStoreJournal>;
@@ -231,7 +232,7 @@ export const Contact: IModel<IContact> = new Model<IContact>(
231
232
  "Contact",
232
233
  ["contactID"],
233
234
  { name: "",type: "",dateCreated: new DefaultFactory(() => new DateTime()),dateUpdated: new DefaultFactory(() => new DateTime()) },
234
- {"name":"contacts","keys":[{"name":"contactID","type":"number","generated":"identity"}],"properties":[{"name":"externalID","type":"string","default":["externalID","\"\""]},{"name":"userID","type":"number"},{"name":"mailboxID","type":"number"},{"name":"domainID","type":"number"},{"name":"name","type":"string","default":["name","\"\""]},{"name":"description","type":"string","default":["description","\"\""]},{"name":"companyID","type":"string","default":["companyID","\"\""]},{"name":"salesTaxID","type":"string","default":["salesTaxID","\"\""]},{"name":"gstTaxID","type":"string","default":["gstTaxID","\"\""]},{"name":"vatTaxID","type":"string","default":["vatTaxID","\"\""]},{"name":"incomeTaxID","type":"string","default":["incomeTaxID","\"\""]},{"name":"type","type":"string","default":["type","\"\""]},{"name":"synchronization","type":"string","default":["synchronization","\"\""]},{"name":"dateCreated","type":"DateTime","default":["dateCreated","new DefaultFactory(() => new DateTime())"]},{"name":"dateUpdated","type":"DateTime","default":["dateUpdated","new DefaultFactory(() => new DateTime())"]},{"name":"previewID","type":"number"},{"name":"billingAddressID","type":"number"},{"name":"shippingAddressID","type":"number"}],"relations":[{"name":"user","fkMap":[{"fk":"userID","relatedKey":"userID"}],"relatedName":"User"},{"name":"mailbox","fkMap":[{"fk":"mailboxID","relatedKey":"mailboxID"}],"relatedName":"Mailbox"},{"name":"domain","fkMap":[{"fk":"domainID","relatedKey":"domainID"}],"relatedName":"HostedDomain"},{"name":"preview","fkMap":[{"fk":"previewID","relatedKey":"appFileID"}],"relatedName":"AppFile"},{"name":"billingAddress","fkMap":[{"fk":"billingAddressID","relatedKey":"addressID"}],"relatedName":"ContactAddress"},{"name":"addresses","isCollection":true,"isInverse":true,"relatedName":"ContactAddress"},{"name":"shippingAddress","fkMap":[{"fk":"shippingAddressID","relatedKey":"addressID"}],"relatedName":"ContactAddress"},{"name":"emails","isCollection":true,"isInverse":true,"relatedName":"ContactEmail"},{"name":"phones","isCollection":true,"isInverse":true,"relatedName":"ContactPhone"},{"name":"items","isCollection":true,"isInverse":true,"relatedName":"ContactItem"},{"name":"domains","isCollection":true,"isInverse":true,"relatedName":"ContactDomain"},{"name":"sellerStores","isCollection":true,"isInverse":true,"relatedName":"Store"},{"name":"ledgers","isCollection":true,"isInverse":true,"relatedName":"StoreLedger"},{"name":"soldInvoices","isCollection":true,"isInverse":true,"relatedName":"StoreJournal"},{"name":"boughtInvoices","isCollection":true,"isInverse":true,"relatedName":"StoreJournal"},{"name":"soldItems","isCollection":true,"isInverse":true,"relatedName":"StoreJournalLineItem"}]}
235
+ {"name":"contacts","keys":[{"name":"contactID","type":"number","generated":"identity"}],"properties":[{"name":"externalID","type":"string","default":["externalID","\"\""]},{"name":"userID","type":"number"},{"name":"mailboxID","type":"number"},{"name":"domainID","type":"number"},{"name":"name","type":"string","default":["name","\"\""]},{"name":"description","type":"string","default":["description","\"\""]},{"name":"companyID","type":"string","default":["companyID","\"\""]},{"name":"salesTaxID","type":"string","default":["salesTaxID","\"\""]},{"name":"gstTaxID","type":"string","default":["gstTaxID","\"\""]},{"name":"vatTaxID","type":"string","default":["vatTaxID","\"\""]},{"name":"incomeTaxID","type":"string","default":["incomeTaxID","\"\""]},{"name":"type","type":"string","default":["type","\"\""]},{"name":"synchronization","type":"string","default":["synchronization","\"\""]},{"name":"dateCreated","type":"DateTime","default":["dateCreated","new DefaultFactory(() => new DateTime())"]},{"name":"dateUpdated","type":"DateTime","default":["dateUpdated","new DefaultFactory(() => new DateTime())"]},{"name":"previewID","type":"number"},{"name":"billingAddressID","type":"number"},{"name":"shippingAddressID","type":"number"}],"relations":[{"name":"user","fkMap":[{"fk":"userID","relatedKey":"userID"}],"relatedName":"User"},{"name":"mailbox","fkMap":[{"fk":"mailboxID","relatedKey":"mailboxID"}],"relatedName":"Mailbox"},{"name":"domain","fkMap":[{"fk":"domainID","relatedKey":"domainID"}],"relatedName":"HostedDomain"},{"name":"preview","fkMap":[{"fk":"previewID","relatedKey":"appFileID"}],"relatedName":"AppFile"},{"name":"billingAddress","fkMap":[{"fk":"billingAddressID","relatedKey":"addressID"}],"relatedName":"ContactAddress"},{"name":"addresses","isCollection":true,"isInverse":true,"relatedName":"ContactAddress"},{"name":"shippingAddress","fkMap":[{"fk":"shippingAddressID","relatedKey":"addressID"}],"relatedName":"ContactAddress"},{"name":"emails","isCollection":true,"isInverse":true,"relatedName":"ContactEmail"},{"name":"phones","isCollection":true,"isInverse":true,"relatedName":"ContactPhone"},{"name":"items","isCollection":true,"isInverse":true,"relatedName":"ContactItem"},{"name":"domains","isCollection":true,"isInverse":true,"relatedName":"ContactDomain"},{"name":"sellerStores","isCollection":true,"isInverse":true,"relatedName":"Store"},{"name":"vendorItems","isCollection":true,"isInverse":true,"relatedName":"StoreItem"},{"name":"ledgers","isCollection":true,"isInverse":true,"relatedName":"StoreLedger"},{"name":"soldInvoices","isCollection":true,"isInverse":true,"relatedName":"StoreJournal"},{"name":"boughtInvoices","isCollection":true,"isInverse":true,"relatedName":"StoreJournal"},{"name":"soldItems","isCollection":true,"isInverse":true,"relatedName":"StoreJournalLineItem"}]}
235
236
  );
236
237
  modelEntitySchemas["Contact"] = Contact;
237
238
 
@@ -938,6 +939,10 @@ export interface IStoreItem extends IClrEntity {
938
939
  folderID?: number | null;
939
940
  sizeForID?: number | null;
940
941
  variantForID?: number | null;
942
+ dateCreated?: DateTime;
943
+ dateUpdated?: DateTime;
944
+ vendorID?: number | null;
945
+ signed?: string;
941
946
  store?: IStore;
942
947
  itemFolder?: IStoreItemFolder;
943
948
  fileFolder?: IAppFile;
@@ -945,7 +950,9 @@ export interface IStoreItem extends IClrEntity {
945
950
  sizes?: ICollection<IStoreItem>;
946
951
  variantFor?: IStoreItem;
947
952
  variants?: ICollection<IStoreItem>;
953
+ vendor?: IContact;
948
954
  storeItemPrices?: ICollection<IStoreItemPrice>;
955
+ priceAddOns?: ICollection<IStorePriceAddOn>;
949
956
  mediaFiles?: ICollection<IStoreMediaFile>;
950
957
  insights?: ICollection<IStoreInsight>;
951
958
  ledgers?: ICollection<IStoreLedger>;
@@ -958,8 +965,8 @@ export const StoreItemItemTypeArray = [{"label":"product","value":"product"},{"l
958
965
  export const StoreItem: IModel<IStoreItem> = new Model<IStoreItem>(
959
966
  "StoreItem",
960
967
  ["storeItemID"],
961
- { name: "",active: false,itemType: "product" },
962
- {"name":"store_items","keys":[{"name":"storeItemID","type":"number","generated":"identity"}],"properties":[{"name":"storeID","type":"number"},{"name":"itemFolderID","type":"number"},{"name":"name","type":"string","default":["name","\"\""]},{"name":"active","type":"boolean","default":["active","false"]},{"name":"internalNotes","type":"string","default":["internalNotes","\"\""]},{"name":"description","type":"string","default":["description","\"\""]},{"name":"itemType","type":"string","default":["itemType","\"product\""]},{"name":"folderID","type":"number"},{"name":"sizeForID","type":"number"},{"name":"variantForID","type":"number"}],"relations":[{"name":"store","fkMap":[{"fk":"storeID","relatedKey":"storeID"}],"relatedName":"Store"},{"name":"itemFolder","fkMap":[{"fk":"itemFolderID","relatedKey":"itemFolderID"}],"relatedName":"StoreItemFolder"},{"name":"fileFolder","fkMap":[{"fk":"folderID","relatedKey":"appFileID"}],"relatedName":"AppFile"},{"name":"sizeFor","fkMap":[{"fk":"sizeForID","relatedKey":"storeItemID"}],"relatedName":"StoreItem"},{"name":"sizes","isCollection":true,"isInverse":true,"relatedName":"StoreItem"},{"name":"variantFor","fkMap":[{"fk":"variantForID","relatedKey":"storeItemID"}],"relatedName":"StoreItem"},{"name":"variants","isCollection":true,"isInverse":true,"relatedName":"StoreItem"},{"name":"storeItemPrices","isCollection":true,"isInverse":true,"relatedName":"StoreItemPrice"},{"name":"mediaFiles","isCollection":true,"isInverse":true,"relatedName":"StoreMediaFile"},{"name":"insights","isCollection":true,"isInverse":true,"relatedName":"StoreInsight"},{"name":"ledgers","isCollection":true,"isInverse":true,"relatedName":"StoreLedger"},{"name":"lineItems","isCollection":true,"isInverse":true,"relatedName":"StoreJournalLineItem"},{"name":"storeItemTags","isCollection":true,"isInverse":true,"relatedName":"StoreItemTag"}]}
968
+ { name: "",active: false,itemType: "product",dateCreated: new DefaultFactory(() => new DateTime()),dateUpdated: new DefaultFactory(() => new DateTime()) },
969
+ {"name":"store_items","keys":[{"name":"storeItemID","type":"number","generated":"identity"}],"properties":[{"name":"storeID","type":"number"},{"name":"itemFolderID","type":"number"},{"name":"name","type":"string","default":["name","\"\""]},{"name":"active","type":"boolean","default":["active","false"]},{"name":"internalNotes","type":"string","default":["internalNotes","\"\""]},{"name":"description","type":"string","default":["description","\"\""]},{"name":"itemType","type":"string","default":["itemType","\"product\""]},{"name":"folderID","type":"number"},{"name":"sizeForID","type":"number"},{"name":"variantForID","type":"number"},{"name":"dateCreated","type":"DateTime","default":["dateCreated","new DefaultFactory(() => new DateTime())"]},{"name":"dateUpdated","type":"DateTime","default":["dateUpdated","new DefaultFactory(() => new DateTime())"]},{"name":"vendorID","type":"number"}],"relations":[{"name":"store","fkMap":[{"fk":"storeID","relatedKey":"storeID"}],"relatedName":"Store"},{"name":"itemFolder","fkMap":[{"fk":"itemFolderID","relatedKey":"itemFolderID"}],"relatedName":"StoreItemFolder"},{"name":"fileFolder","fkMap":[{"fk":"folderID","relatedKey":"appFileID"}],"relatedName":"AppFile"},{"name":"sizeFor","fkMap":[{"fk":"sizeForID","relatedKey":"storeItemID"}],"relatedName":"StoreItem"},{"name":"sizes","isCollection":true,"isInverse":true,"relatedName":"StoreItem"},{"name":"variantFor","fkMap":[{"fk":"variantForID","relatedKey":"storeItemID"}],"relatedName":"StoreItem"},{"name":"variants","isCollection":true,"isInverse":true,"relatedName":"StoreItem"},{"name":"vendor","fkMap":[{"fk":"vendorID","relatedKey":"contactID"}],"relatedName":"Contact"},{"name":"storeItemPrices","isCollection":true,"isInverse":true,"relatedName":"StoreItemPrice"},{"name":"priceAddOns","isCollection":true,"isInverse":true,"relatedName":"StorePriceAddOn"},{"name":"mediaFiles","isCollection":true,"isInverse":true,"relatedName":"StoreMediaFile"},{"name":"insights","isCollection":true,"isInverse":true,"relatedName":"StoreInsight"},{"name":"ledgers","isCollection":true,"isInverse":true,"relatedName":"StoreLedger"},{"name":"lineItems","isCollection":true,"isInverse":true,"relatedName":"StoreJournalLineItem"},{"name":"storeItemTags","isCollection":true,"isInverse":true,"relatedName":"StoreItemTag"}]}
963
970
  );
964
971
  modelEntitySchemas["StoreItem"] = StoreItem;
965
972
 
@@ -994,6 +1001,7 @@ export interface IStoreItemPrice extends IClrEntity {
994
1001
  maxAmount?: number | null;
995
1002
  active?: boolean;
996
1003
  storeItem?: IStoreItem;
1004
+ addons?: ICollection<IStorePriceAddOn>;
997
1005
  lineItems?: ICollection<IStoreJournalLineItem>;
998
1006
  }
999
1007
 
@@ -1001,20 +1009,39 @@ export const StoreItemPrice: IModel<IStoreItemPrice> = new Model<IStoreItemPrice
1001
1009
  "StoreItemPrice",
1002
1010
  ["priceID"],
1003
1011
  { startDate: new DefaultFactory(() => new DateTime()),currency: "",amount: 0,active: false },
1004
- {"name":"store_item_prices","keys":[{"name":"priceID","type":"number","generated":"identity"}],"properties":[{"name":"storeItemID","type":"number"},{"name":"startDate","type":"DateTime","default":["startDate","new DefaultFactory(() => new DateTime())"]},{"name":"endDate","type":"DateTime","default":["endDate","new DefaultFactory(() => new DateTime())"]},{"name":"currency","type":"string","default":["currency","\"\""]},{"name":"amount","type":"number","default":["amount","0"]},{"name":"maxAmount","type":"number","default":["maxAmount","0"]},{"name":"active","type":"boolean","default":["active","false"]}],"relations":[{"name":"storeItem","fkMap":[{"fk":"storeItemID","relatedKey":"storeItemID"}],"relatedName":"StoreItem"},{"name":"lineItems","isCollection":true,"isInverse":true,"relatedName":"StoreJournalLineItem"}]}
1012
+ {"name":"store_item_prices","keys":[{"name":"priceID","type":"number","generated":"identity"}],"properties":[{"name":"storeItemID","type":"number"},{"name":"startDate","type":"DateTime","default":["startDate","new DefaultFactory(() => new DateTime())"]},{"name":"endDate","type":"DateTime","default":["endDate","new DefaultFactory(() => new DateTime())"]},{"name":"currency","type":"string","default":["currency","\"\""]},{"name":"amount","type":"number","default":["amount","0"]},{"name":"maxAmount","type":"number","default":["maxAmount","0"]},{"name":"active","type":"boolean","default":["active","false"]}],"relations":[{"name":"storeItem","fkMap":[{"fk":"storeItemID","relatedKey":"storeItemID"}],"relatedName":"StoreItem"},{"name":"addons","isCollection":true,"isInverse":true,"relatedName":"StorePriceAddOn"},{"name":"lineItems","isCollection":true,"isInverse":true,"relatedName":"StoreJournalLineItem"}]}
1005
1013
  );
1006
1014
  modelEntitySchemas["StoreItemPrice"] = StoreItemPrice;
1007
1015
 
1016
+ export interface IStorePriceAddOn extends IClrEntity {
1017
+ priceID?: number;
1018
+ addOnItemID?: number;
1019
+ inclusive?: boolean;
1020
+ print?: boolean;
1021
+ price?: IStoreItemPrice;
1022
+ addOnItem?: IStoreItem;
1023
+ }
1024
+
1025
+ export const StorePriceAddOn: IModel<IStorePriceAddOn> = new Model<IStorePriceAddOn>(
1026
+ "StorePriceAddOn",
1027
+ ["priceID","addOnItemID"],
1028
+ { inclusive: false,print: false },
1029
+ {"name":"store_price_add_ons","keys":[{"name":"priceID","type":"number"},{"name":"addOnItemID","type":"number"}],"properties":[{"name":"inclusive","type":"boolean","default":["inclusive","false"]},{"name":"print","type":"boolean","default":["print","false"]}],"relations":[{"name":"price","fkMap":[{"fk":"priceID","relatedKey":"priceID"}],"relatedName":"StoreItemPrice"},{"name":"addOnItem","fkMap":[{"fk":"addOnItemID","relatedKey":"storeItemID"}],"relatedName":"StoreItem"}]}
1030
+ );
1031
+ modelEntitySchemas["StorePriceAddOn"] = StorePriceAddOn;
1032
+
1008
1033
  export interface IStoreMediaFile extends IClrEntity {
1009
1034
  storeItemID?: number;
1010
1035
  appFileID?: number;
1036
+ fileContentID?: number | null;
1011
1037
  sortOrder?: number;
1012
1038
  title?: string;
1013
1039
  description?: string | null;
1040
+ isPreview?: boolean;
1041
+ isDeleted?: boolean;
1014
1042
  fileHtmlView?: string | null;
1015
1043
  fileLink?: string | null;
1016
- signature?: string | null;
1017
- signatureExpiry?: string | null;
1044
+ signed?: string;
1018
1045
  storeItem?: IStoreItem;
1019
1046
  appFile?: IAppFile;
1020
1047
  }
@@ -1022,8 +1049,8 @@ export interface IStoreMediaFile extends IClrEntity {
1022
1049
  export const StoreMediaFile: IModel<IStoreMediaFile> = new Model<IStoreMediaFile>(
1023
1050
  "StoreMediaFile",
1024
1051
  ["storeItemID","appFileID"],
1025
- { sortOrder: 0,title: "" },
1026
- {"name":"store_media_files","keys":[{"name":"storeItemID","type":"number"},{"name":"appFileID","type":"number"}],"properties":[{"name":"sortOrder","type":"number","default":["sortOrder","0"]},{"name":"title","type":"string","default":["title","\"\""]},{"name":"description","type":"string","default":["description","\"\""]},{"name":"fileHtmlView","type":"string","default":["fileHtmlView","\"\""]},{"name":"fileLink","type":"string","default":["fileLink","\"\""]},{"name":"signature","type":"string","default":["signature","\"\""]},{"name":"signatureExpiry","type":"string","default":["signatureExpiry","\"\""]}],"relations":[{"name":"storeItem","fkMap":[{"fk":"storeItemID","relatedKey":"storeItemID"}],"relatedName":"StoreItem"},{"name":"appFile","fkMap":[{"fk":"appFileID","relatedKey":"appFileID"}],"relatedName":"AppFile"}]}
1052
+ { sortOrder: 0,title: "",isPreview: false,isDeleted: false },
1053
+ {"name":"store_media_files","keys":[{"name":"storeItemID","type":"number"},{"name":"appFileID","type":"number"}],"properties":[{"name":"fileContentID","type":"number","default":["fileContentID","0"]},{"name":"sortOrder","type":"number","default":["sortOrder","0"]},{"name":"title","type":"string","default":["title","\"\""]},{"name":"description","type":"string","default":["description","\"\""]},{"name":"isPreview","type":"boolean","default":["isPreview","false"]},{"name":"isDeleted","type":"boolean","default":["isDeleted","false"]},{"name":"fileHtmlView","type":"string","default":["fileHtmlView","\"\""]},{"name":"fileLink","type":"string","default":["fileLink","\"\""]}],"relations":[{"name":"storeItem","fkMap":[{"fk":"storeItemID","relatedKey":"storeItemID"}],"relatedName":"StoreItem"},{"name":"appFile","fkMap":[{"fk":"appFileID","relatedKey":"appFileID"}],"relatedName":"AppFile"}]}
1027
1054
  );
1028
1055
  modelEntitySchemas["StoreMediaFile"] = StoreMediaFile;
1029
1056
 
@@ -1,6 +1,7 @@
1
1
  import MobileDesktopApp from "@web-atoms/web-controls/dist/desktop-app/MobileDesktopApp";
2
2
  import "../../style/GlobalStyle";
3
3
  import Pack from "@web-atoms/core/dist/Pack";
4
+ import "./styles/common";
4
5
 
5
6
 
6
7
  @Pack
@@ -1,17 +1,174 @@
1
+ import InjectProperty from "@web-atoms/core/dist/core/InjectProperty";
1
2
  import { AtomControl } from "@web-atoms/core/dist/web/controls/AtomControl";
2
3
  import { ContentPage } from "@web-atoms/web-controls/dist/mobile-app/MobileApp";
4
+ import EntityService from "../../services/EntityService";
5
+ import { IStoreItem, IStoreMediaFile, StoreItem } from "../../model/model";
6
+ import XNode from "@web-atoms/core/dist/core/XNode";
7
+ import AtomRepeater from "@web-atoms/web-controls/dist/basic/AtomRepeater";
8
+ import PinchZoomView from "@web-atoms/web-controls/dist/basic/PinchZoomView";
9
+ import { signedImageUrl, signedUrl } from "../../common/fileUrl";
10
+ import Bind from "@web-atoms/core/dist/core/Bind";
11
+ import Action from "@web-atoms/core/dist/view-model/Action";
12
+ import styled from "@web-atoms/core/dist/style/styled";
13
+ import FetchBuilder from "@web-atoms/core/dist/services/FetchBuilder";
14
+ import { formatCurrency } from "../../common/currency";
3
15
 
4
16
  const url = (window as any).pageUrl as URL;
5
17
 
6
18
 
7
- let {1: storeID = "1", 2: itemID = "2a" } = /^\/channels\/([^\/]+)\/([^\/]+)\//.exec(url?.pathname) ?? {} as any;
19
+ let {1: storeID = "1", 2: itemID = "5" } = /^\/store\/([^\/]+)\/([^\/]+)\//.exec(url?.pathname) ?? {} as any;
8
20
 
9
21
  storeID = parseInt(storeID, 36);
10
22
  itemID = parseInt(itemID, 36);
11
23
 
24
+ const css = styled.css `
12
25
 
13
- export default class StoreItemDetailView extends ContentPage {
26
+ margin: 10px;
14
27
 
15
-
28
+ display: flex;
29
+ gap: 10px;
30
+ position: relative;
31
+ flex-wrap: wrap;
32
+
33
+ & > h2 {
34
+ flex: 1 1 100%;
35
+ }
36
+
37
+ & > .photos {
38
+
39
+ margin: 10px;
40
+ padding: 10px;
41
+ border-radius: 5px;
42
+ box-shadow: 0 0 10px 2px gray;
43
+
44
+ display: inline-grid;
45
+ grid-template-columns: auto 1fr;
46
+ grid-template-rows: 1fr;
47
+ overflow: hidden;
48
+
49
+ & > .thumbnails {
50
+ grid-row: 1;
51
+ grid-column: 1;
52
+ display: flex;
53
+ flex-direction: column;
54
+ overflow: auto;
55
+ & > img {
56
+ cursor: pointer;
57
+ margin: 5px;
58
+ border-radius: 10px;
59
+ &:hover {
60
+ box-shadow: 0 0 5px 1px #0000ff7f;
61
+ }
62
+ }
63
+ }
64
+ & > .preview {
65
+ grid-row: 1;
66
+ grid-column: 2;
67
+ height: 60vh;
68
+ min-width: 50vw;
69
+ & img {
70
+ -webkit-user-drag: none;
71
+ }
72
+ }
73
+ }
74
+ `.installLocal();
75
+
76
+
77
+ export default class StoreItemDetailView extends AtomControl {
78
+
79
+ @InjectProperty
80
+ entityService: EntityService;
81
+
82
+ model: IStoreItem;
83
+
84
+ selectedFile: IStoreMediaFile = null;
85
+
86
+ constructor(app, e) {
87
+ super(app, e);
88
+ this.runAfterInit(() => this.app.runAsync(() => this.init()));
89
+ }
90
+
91
+ async init() {
92
+
93
+ this.renderer = <div>
94
+ <label text="..."/>
95
+ </div>;
96
+
97
+ this.model = await this.getItem();
98
+
99
+ const images = this.model.mediaFiles.where((x) => x.isPreview);
100
+ this.selectedFile = images[0];
101
+
102
+ const offer = this.model.mediaFiles.find((x) => x.title === "offer.html");
103
+ const specifications = this.model.mediaFiles.find((x) => x.title === "specs.html");
104
+
105
+ const price = this.model.storeItemPrices[0];
106
+ const sellPrice = price.amount;
107
+ const maxPrice = price.maxAmount ? price.maxAmount : ( Math.ceil(price.amount * 1.1));
108
+
109
+ const [offerHtml, specHtml] = await Promise.all([
110
+ offer ? FetchBuilder.get(signedUrl(offer)).responseAsText() : Promise.resolve(""),
111
+ specifications ? FetchBuilder.get(signedUrl(specifications)).responseAsText() : Promise.resolve("")
112
+ ]);
113
+
114
+ this.renderer = <div class={css}>
115
+ <h2>{this.model.name}</h2>
116
+
117
+ <section class="photos">
118
+ <div class="thumbnails">
119
+ { ... images.map((x) =>
120
+ <img
121
+ class="thumbnail"
122
+ data-click-event="change-image"
123
+ data-id={x.appFileID}
124
+ src={signedImageUrl(x, 150)} />)}
125
+ </div>
126
+ <PinchZoomView
127
+ class="preview"
128
+ source={Bind.oneWay(() => signedImageUrl(this.selectedFile, 720))}
129
+ />
130
+ </section>
131
+
132
+ <section>
133
+
134
+ { /* Display Offers */ }
135
+ {
136
+ offerHtml && <section innerHTML={offerHtml}>
137
+ </section>
138
+ }
139
+
140
+ <p>
141
+ {this.model.description}
142
+ </p>
143
+ <p>
144
+ <label text={ formatCurrency(sellPrice, price.currency) }/>
145
+ </p>
146
+ <button>Buy</button>
147
+ </section>
148
+
149
+ {/* This should be html */}
150
+ <section data-flex="stretch-full">
151
+ <section innerHTML={specHtml}></section>
152
+ </section>
153
+
154
+ </div>;
155
+ }
156
+
157
+ @Action({ onEvent: "change-image"})
158
+ changeImage( { id }) {
159
+ this.selectedFile = this.model.mediaFiles.find((x) => x.appFileID === id);
160
+ }
161
+
162
+ async getItem() {
163
+ return this.entityService
164
+ .query(StoreItem, "storeQuery")
165
+ .where({ storeID, itemID }, (p) => (x) => x.storeID === p.storeID && x.storeItemID === p.itemID)
166
+ .include((x) => [
167
+ x.storeItemPrices,
168
+ x.storeItemTags.forEach((t) => t.tag),
169
+ x.mediaFiles,
170
+ ])
171
+ .firstOrDefault();
172
+ }
16
173
 
17
174
  }
@@ -6,7 +6,7 @@ import AtomRepeater from "@web-atoms/web-controls/dist/basic/AtomRepeater";
6
6
  import InfiniteRepeater from "../../common/controls/repeater/InfiniteRepeater";
7
7
  import InjectProperty from "@web-atoms/core/dist/core/InjectProperty";
8
8
  import EntityService from "../../services/EntityService";
9
- import { AppFile, IStoreItem, StoreItem } from "../../model/model";
9
+ import { AppFile, IStoreItem, StoreItem, StoreMediaFile } from "../../model/model";
10
10
  import { Sql } from "../../common/Sql";
11
11
  import { apiPath } from "../../common/apiPath";
12
12
  import SocialMailApp from "../../common/SocialMailApp";
@@ -74,7 +74,7 @@ import { ContentPage } from "@web-atoms/web-controls/dist/mobile-app/MobileApp";
74
74
  `.installGlobal("[data-shopping-cart-list=shopping-cart-list]");
75
75
 
76
76
 
77
- export default class StoreItemListView extends ContentPage {
77
+ export default class StoreItemListView extends AtomControl {
78
78
 
79
79
  search = "";
80
80
 
@@ -91,7 +91,7 @@ export default class StoreItemListView extends ContentPage {
91
91
 
92
92
  async init() {
93
93
 
94
- this.render(<div>
94
+ this.render(<div data-shopping-cart-list="shopping-cart-list">
95
95
  <header>
96
96
  <input type="search" value={Bind.twoWaysImmediate(() => this.search)}/>
97
97
  </header>
@@ -134,10 +134,10 @@ export default class StoreItemListView extends ContentPage {
134
134
  }
135
135
 
136
136
  async downloadImage(item: IStoreItem) {
137
- const file = await this.entityService.query(AppFile, "storeItemFiles", item.folderID)
138
- .where((x) => Sql.text.like(x.contentType, "image/%"))
137
+ const file = await this.entityService.query(StoreMediaFile, "storeQuery", item.storeItemID, item.signed)
138
+ .orderBy((x) => x.sortOrder)
139
139
  .firstOrDefault();
140
- return apiPath(`/api/store/file/webp(700)/${item.folderID}/${file.appFileID}/${file.fileContentID}/${file.name}.webp`);
140
+ return apiPath(`/api/signed/webp(700)/${file.appFileID}/${file.fileContentID}/${file.signed}/file.webp`);
141
141
  }
142
142
 
143
143
 
@@ -0,0 +1,7 @@
1
+ import styled from "@web-atoms/core/dist/style/styled";
2
+
3
+ styled.css `
4
+ * {
5
+ box-sizing: border-box;
6
+ }
7
+ `.installGlobal();
@@ -1,9 +1,11 @@
1
1
  import DISingleton from "@web-atoms/core/dist/di/DISingleton";
2
2
  import { Inject } from "@web-atoms/core/dist/di/Inject";
3
3
  import EntityService from "../EntityService";
4
- import { AppFile, IStoreItem, Store, StoreItem } from "../../model/model";
4
+ import { AppFile, IStoreItem, Store, StoreItem, StoreMediaFile } from "../../model/model";
5
5
  import { Sql } from "../../common/Sql";
6
6
  import DateTime from "@web-atoms/date-time/dist/DateTime";
7
+ import MimeTypeService from "../files/MimeTypeService";
8
+ import CloudFileService from "../../web/page/files/service/CloudFileService";
7
9
 
8
10
  @DISingleton()
9
11
  export default class StoreItemService {
@@ -11,10 +13,23 @@ export default class StoreItemService {
11
13
  @Inject
12
14
  entityService: EntityService;
13
15
 
16
+ @Inject
17
+ mimeTypeService: MimeTypeService;
18
+
19
+ @Inject
20
+ cloudFileService: CloudFileService;
21
+
14
22
  async get(id: any) {
15
23
  const items = await this.entityService.query(StoreItem)
16
24
  .where({ id }, (p) => (x) => x.storeItemID === p.id || x.variantForID === p.id || x.sizeForID === p.id)
17
- .include((x) => [ x.itemFolder, x.fileFolder, x.storeItemPrices, x.storeItemTags.forEach((t) => t.tag)])
25
+ .include((x) => [
26
+ x.store.folder,
27
+ x.itemFolder,
28
+ x.fileFolder,
29
+ x.storeItemPrices.forEach((i) => i.addons.forEach((a) => a.addOnItem.storeItemPrices)),
30
+ x.mediaFiles,
31
+ x.storeItemTags.forEach((t) => t.tag)
32
+ ])
18
33
  .toArray();
19
34
  const item = items.find((x) => x.storeItemID === id);
20
35
  if (!item.folderID) {
@@ -69,10 +84,61 @@ export default class StoreItemService {
69
84
  async save(storeItem: IStoreItem) {
70
85
  await this.entityService.save(storeItem, (c) =>
71
86
  c.include((x) => x.storeItemPrices)
87
+ .thenInclude((x) => x.addons)
72
88
  .include((x) => x.storeItemTags)
73
89
  .thenInclude((x) => x.tag)
90
+ .include((x) => x.mediaFiles)
74
91
  );
75
92
  return storeItem;
76
93
  }
77
94
 
95
+ async getOrCreateMediaFile(model: IStoreItem, name: string, template: () => string) {
96
+ const { folderID } = model;
97
+ let file = await this.entityService
98
+ .query(AppFile)
99
+ .where({ folderID, name }, (p) => (x) => x.parentID === p.folderID
100
+ && x.name === p.name
101
+ ).firstOrDefault();
102
+ if (!file) {
103
+
104
+ file = AppFile.create({
105
+ parentID: folderID,
106
+ isFolder: false,
107
+ contentType: await this.mimeTypeService.getMimeType(name),
108
+ name
109
+ });
110
+ await this.entityService.save(file);
111
+ if (template) {
112
+ const { fileContentID, url } = await this.cloudFileService.saveFile({
113
+ appFileID: file.appFileID,
114
+ content: new File([template()], name, { type: "text/html"})
115
+ });
116
+ file.url = url;
117
+ file.fileContentID = fileContentID;
118
+ file.downloadUrl = url;
119
+ }
120
+ }
121
+
122
+ let mediaFile = model.mediaFiles?.find((x) => x.title === name);
123
+ if (!mediaFile) {
124
+ mediaFile = StoreMediaFile.create({
125
+ storeItemID: model.storeItemID,
126
+ appFileID: file.appFileID,
127
+ fileContentID: file.fileContentID,
128
+ isPreview: false,
129
+ title: name
130
+ });
131
+ await this.entityService.save(mediaFile);
132
+ (model.mediaFiles ??= []).add(mediaFile);
133
+ } else {
134
+ if(mediaFile.fileContentID !== file.fileContentID) {
135
+ mediaFile.appFileID = file.appFileID;
136
+ mediaFile.fileContentID = file.fileContentID;
137
+ await this.entityService.save(mediaFile, (c) => c);
138
+ }
139
+ }
140
+ mediaFile.appFile = file;
141
+ return mediaFile;
142
+ }
143
+
78
144
  }
@@ -183,6 +183,7 @@ export default class HtmlPageEditor extends AtomControl {
183
183
 
184
184
  public originalBaseUrl: string;
185
185
  public lastCommittedHtml: string;
186
+ public lastCommittedBody: string;
186
187
 
187
188
  // public get htmlPageUrl() {
188
189
  // return this.htmlDocument.baseURI.toString();
@@ -609,6 +610,7 @@ export default class HtmlPageEditor extends AtomControl {
609
610
  }
610
611
  }
611
612
  this.lastCommittedHtml = clone.outerHTML;
613
+ this.lastCommittedBody = body.innerHTML;
612
614
  this.element.dispatchEvent(new CustomEvent("htmlPageChanged", { detail: clone.outerHTML, bubbles: true }));
613
615
  AtomBinder.refreshValue(this, "htmlPage");
614
616
  setTimeout(() => {
@@ -39,7 +39,7 @@ export default class WebSitePageEditor extends HtmlPageEditor {
39
39
  async openVariables() {
40
40
  let file = await this.cloudFileService.children(this.folder.appFileID, "styles/vars.css").firstOrDefault();
41
41
  let content = await FetchBuilder.get(file.downloadUrl).responseAsText();
42
- const modifiedContent = await PageNavigator.pushPageForResult(CodeEditorPage, { file, content } );
42
+ const modifiedContent = await PageNavigator.pushPageForResult(CodeEditorPage, { fileName: file.name, content } );
43
43
  if (modifiedContent !== content) {
44
44
  // save ...
45
45
  content = modifiedContent;
@@ -61,11 +61,15 @@ const css = styled.css `
61
61
  left: 0;
62
62
  top: 5px;
63
63
  width: 100%;
64
+ max-width: 200px;
64
65
  }
65
66
 
66
67
  & > .file-preview {
67
68
  grid-row: 2;
68
69
  grid-column: 1 / span 2;
70
+ max-width: 200px;
71
+ height: 200px;
72
+ object-fit: contain;
69
73
  }
70
74
 
71
75
 
@@ -129,7 +133,6 @@ export default class ChooseMediaPage extends PopupWindowPage<
129
133
  this.renderer = <div class={css}>
130
134
  <FolderTreeView
131
135
  class="folder-tree"
132
- accept={accept}
133
136
  folderId={this.parameters.folder.appFileID}
134
137
  selectedItem={Bind.twoWaysImmediate(() => this.selectedFolder)}
135
138
  />
@@ -168,6 +171,7 @@ export default class ChooseMediaPage extends PopupWindowPage<
168
171
  folder: this.selectedFolder,
169
172
  version: this.version,
170
173
  showFolder: false,
174
+ includeFilesInFolder: false,
171
175
  accept,
172
176
  cancelToken
173
177
  })
@@ -188,7 +188,8 @@ export default class CloudFileService {
188
188
  cancelToken,
189
189
  showDeleted = false,
190
190
  showSnapShot = false,
191
- showFolder = true
191
+ showFolder = true,
192
+ includeFilesInFolder = true
192
193
  }: {
193
194
  search: string,
194
195
  accept?: string,
@@ -197,7 +198,8 @@ export default class CloudFileService {
197
198
  version?: any,
198
199
  showDeleted?: boolean,
199
200
  showFolder?: boolean,
200
- showSnapShot?: boolean
201
+ showSnapShot?: boolean,
202
+ includeFilesInFolder?: boolean
201
203
  }) {
202
204
  const parentID = folder?.appFileID;
203
205
 
@@ -243,7 +245,9 @@ export default class CloudFileService {
243
245
  if (accept && iterator.parentID === folder.appFileID) {
244
246
  const children = (folder.children ??= []);
245
247
  if (!children.some((f) => f.appFileID === iterator.appFileID)) {
246
- children.add(iterator);
248
+ if (includeFilesInFolder || iterator.isFolder) {
249
+ children.add(iterator);
250
+ }
247
251
  }
248
252
  }
249
253
  results.push(iterator);