@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.
- package/dist/admin/AdminAppIndex.pack.js +717 -76
- package/dist/admin/AdminAppIndex.pack.js.map +1 -1
- package/dist/admin/AdminAppIndex.pack.min.js +22 -16
- package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
- package/dist/code-editor/CodeEditorPage.d.ts +1 -3
- package/dist/code-editor/CodeEditorPage.d.ts.map +1 -1
- package/dist/code-editor/CodeEditorPage.js +5 -4
- package/dist/code-editor/CodeEditorPage.js.map +1 -1
- package/dist/common/controls/Loader.d.ts +2 -0
- package/dist/common/controls/Loader.d.ts.map +1 -0
- package/dist/common/controls/Loader.js +21 -0
- package/dist/common/controls/Loader.js.map +1 -0
- package/dist/common/controls/collection-editor/CollectionEditorEx.js +18 -8
- package/dist/common/controls/collection-editor/CollectionEditorEx.js.map +1 -1
- package/dist/common/controls/reference-editor/ReferenceEditor.d.ts.map +1 -1
- package/dist/common/controls/reference-editor/ReferenceEditor.js.map +1 -1
- package/dist/common/fileUrl.d.ts +14 -1
- package/dist/common/fileUrl.d.ts.map +1 -1
- package/dist/common/fileUrl.js +24 -5
- package/dist/common/fileUrl.js.map +1 -1
- package/dist/common/pages/stores/products/EditProductDetailPage.d.ts +4 -3
- package/dist/common/pages/stores/products/EditProductDetailPage.d.ts.map +1 -1
- package/dist/common/pages/stores/products/EditProductDetailPage.js +21 -5
- package/dist/common/pages/stores/products/EditProductDetailPage.js.map +1 -1
- package/dist/common/pages/stores/products/ProductEditor.d.ts +10 -1
- package/dist/common/pages/stores/products/ProductEditor.d.ts.map +1 -1
- package/dist/common/pages/stores/products/ProductEditor.js +176 -27
- package/dist/common/pages/stores/products/ProductEditor.js.map +1 -1
- package/dist/common/pages/stores/products/html/Offsers.d.ts +2 -0
- package/dist/common/pages/stores/products/html/Offsers.d.ts.map +1 -0
- package/dist/common/pages/stores/products/html/Offsers.js +20 -0
- package/dist/common/pages/stores/products/html/Offsers.js.map +1 -0
- package/dist/common/pages/stores/products/html/ProductHtmlEditor.d.ts +9 -0
- package/dist/common/pages/stores/products/html/ProductHtmlEditor.d.ts.map +1 -0
- package/dist/common/pages/stores/products/html/ProductHtmlEditor.js +64 -0
- package/dist/common/pages/stores/products/html/ProductHtmlEditor.js.map +1 -0
- package/dist/common/pages/stores/products/html/ProductHtmlEditorPage.d.ts +21 -0
- package/dist/common/pages/stores/products/html/ProductHtmlEditorPage.d.ts.map +1 -0
- package/dist/common/pages/stores/products/html/ProductHtmlEditorPage.js +138 -0
- package/dist/common/pages/stores/products/html/ProductHtmlEditorPage.js.map +1 -0
- package/dist/common/pages/stores/products/html/Specifications.d.ts +2 -0
- package/dist/common/pages/stores/products/html/Specifications.d.ts.map +1 -0
- package/dist/common/pages/stores/products/html/Specifications.js +22 -0
- package/dist/common/pages/stores/products/html/Specifications.js.map +1 -0
- package/dist/common/pages/websites/studio/WebSiteStudioPage.js +1 -1
- package/dist/common/pages/websites/studio/WebSiteStudioPage.js.map +1 -1
- package/dist/model/model.d.ts +21 -2
- package/dist/model/model.d.ts.map +1 -1
- package/dist/model/model.js +90 -11
- package/dist/model/model.js.map +1 -1
- package/dist/public/channel/ChannelView.pack.js +107 -16
- package/dist/public/channel/ChannelView.pack.js.map +1 -1
- package/dist/public/channel/ChannelView.pack.min.js +3 -3
- package/dist/public/channel/ChannelView.pack.min.js.map +1 -1
- package/dist/public/store/Store.pack.js +10729 -10631
- package/dist/public/store/Store.pack.js.map +1 -1
- package/dist/public/store/Store.pack.min.js +149 -288
- package/dist/public/store/Store.pack.min.js.map +1 -1
- package/dist/public/store/StoreApp.d.ts +1 -0
- package/dist/public/store/StoreApp.d.ts.map +1 -1
- package/dist/public/store/StoreApp.js +2 -2
- package/dist/public/store/StoreApp.js.map +1 -1
- package/dist/public/store/StoreApp.pack.js +35 -7
- package/dist/public/store/StoreApp.pack.js.map +1 -1
- package/dist/public/store/StoreApp.pack.min.js +8 -4
- package/dist/public/store/StoreApp.pack.min.js.map +1 -1
- package/dist/public/store/StoreItemDetailView.d.ts +13 -2
- package/dist/public/store/StoreItemDetailView.d.ts.map +1 -1
- package/dist/public/store/StoreItemDetailView.js +147 -7
- package/dist/public/store/StoreItemDetailView.js.map +1 -1
- package/dist/public/store/StoreItemListView.d.ts +2 -2
- package/dist/public/store/StoreItemListView.d.ts.map +1 -1
- package/dist/public/store/StoreItemListView.js +11 -9
- package/dist/public/store/StoreItemListView.js.map +1 -1
- package/dist/public/store/styles/common.d.ts +2 -0
- package/dist/public/store/styles/common.d.ts.map +1 -0
- package/dist/public/store/styles/common.js +18 -0
- package/dist/public/store/styles/common.js.map +1 -0
- package/dist/services/store/StoreItemService.d.ts +5 -0
- package/dist/services/store/StoreItemService.d.ts.map +1 -1
- package/dist/services/store/StoreItemService.js +66 -4
- package/dist/services/store/StoreItemService.js.map +1 -1
- package/dist/site-editor/editor/HtmlPageEditor.d.ts +1 -0
- package/dist/site-editor/editor/HtmlPageEditor.d.ts.map +1 -1
- package/dist/site-editor/editor/HtmlPageEditor.js +1 -0
- package/dist/site-editor/editor/HtmlPageEditor.js.map +1 -1
- package/dist/site-editor/editor/WebSitePageEditor.js +1 -1
- package/dist/site-editor/editor/WebSitePageEditor.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/web/AppIndex.pack.js +717 -76
- package/dist/web/AppIndex.pack.js.map +1 -1
- package/dist/web/AppIndex.pack.min.js +22 -16
- package/dist/web/AppIndex.pack.min.js.map +1 -1
- package/dist/web/page/files/media/ChooseMediaPage.d.ts.map +1 -1
- package/dist/web/page/files/media/ChooseMediaPage.js +5 -1
- package/dist/web/page/files/media/ChooseMediaPage.js.map +1 -1
- package/dist/web/page/files/service/CloudFileService.d.ts +2 -1
- package/dist/web/page/files/service/CloudFileService.d.ts.map +1 -1
- package/dist/web/page/files/service/CloudFileService.js +5 -2
- package/dist/web/page/files/service/CloudFileService.js.map +1 -1
- package/node_modules/@web-atoms/core/dist/services/MockNavigationService.js.map +1 -1
- package/node_modules/@web-atoms/core/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@web-atoms/core/dist/web/controls/AtomControl.js +7 -3
- package/node_modules/@web-atoms/core/dist/web/controls/AtomControl.js.map +1 -1
- package/node_modules/@web-atoms/core/package.json +1 -1
- package/node_modules/@web-atoms/core/src/web/controls/AtomControl.ts +8 -2
- package/node_modules/@web-atoms/email-dom/dist/DomToString.js +10 -2
- package/node_modules/@web-atoms/email-dom/dist/DomToString.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/core/IXStyle.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/Bold.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/Button.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/Cell.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/Div.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/EllipsisText.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/Email.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/EmailFooter.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/FloatingBox.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/HeaderBox.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/Hr.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/Image.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/InlineDiv.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/Link.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/Pre.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/Row.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/Span.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/StyleHelper.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/Table.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/dom/TextBox.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/style/IEmailElementStyle.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/style/mergeStyle.js.map +1 -1
- package/node_modules/@web-atoms/email-dom/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@web-atoms/email-dom/package.json +1 -1
- package/node_modules/@web-atoms/email-dom/src/DomToString.tsx +10 -4
- package/node_modules/@web-atoms/web-controls/dist/basic/PinchZoomView.d.ts.map +1 -1
- package/node_modules/@web-atoms/web-controls/dist/basic/PinchZoomView.js +1 -0
- package/node_modules/@web-atoms/web-controls/dist/basic/PinchZoomView.js.map +1 -1
- package/node_modules/@web-atoms/web-controls/dist/basic/styles/pinch-zoom-view-style.js +1 -0
- package/node_modules/@web-atoms/web-controls/dist/basic/styles/pinch-zoom-view-style.js.map +1 -1
- package/node_modules/@web-atoms/web-controls/dist/mobile-app/MobileApp.d.ts.map +1 -1
- package/node_modules/@web-atoms/web-controls/dist/mobile-app/MobileApp.js +4 -1
- package/node_modules/@web-atoms/web-controls/dist/mobile-app/MobileApp.js.map +1 -1
- package/node_modules/@web-atoms/web-controls/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@web-atoms/web-controls/package.json +1 -1
- package/node_modules/@web-atoms/web-controls/src/basic/PinchZoomView.tsx +1 -0
- package/node_modules/@web-atoms/web-controls/src/basic/styles/pinch-zoom-view-style.ts +1 -0
- package/node_modules/@web-atoms/web-controls/src/mobile-app/MobileApp.tsx +5 -1
- package/package.json +4 -4
- package/src/code-editor/CodeEditorPage.tsx +4 -6
- package/src/common/controls/Loader.tsx +9 -0
- package/src/common/controls/collection-editor/CollectionEditorEx.tsx +27 -13
- package/src/common/controls/reference-editor/ReferenceEditor.tsx +1 -0
- package/src/common/fileUrl.ts +17 -5
- package/src/common/pages/stores/products/EditProductDetailPage.tsx +11 -2
- package/src/common/pages/stores/products/ProductEditor.tsx +179 -33
- package/src/common/pages/stores/products/html/Offsers.tsx +9 -0
- package/src/common/pages/stores/products/html/ProductHtmlEditor.tsx +37 -0
- package/src/common/pages/stores/products/html/ProductHtmlEditorPage.tsx +131 -0
- package/src/common/pages/stores/products/html/Specifications.tsx +41 -0
- package/src/common/pages/websites/studio/WebSiteStudioPage.tsx +1 -1
- package/src/model/model.ts +35 -8
- package/src/public/store/StoreApp.tsx +1 -0
- package/src/public/store/StoreItemDetailView.tsx +160 -3
- package/src/public/store/StoreItemListView.tsx +6 -6
- package/src/public/store/styles/common.ts +7 -0
- package/src/services/store/StoreItemService.ts +68 -2
- package/src/site-editor/editor/HtmlPageEditor.tsx +2 -0
- package/src/site-editor/editor/WebSitePageEditor.tsx +1 -1
- package/src/web/page/files/media/ChooseMediaPage.tsx +5 -1
- package/src/web/page/files/service/CloudFileService.ts +7 -3
package/src/model/model.ts
CHANGED
|
@@ -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
|
-
|
|
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":"
|
|
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,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 = "
|
|
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
|
-
|
|
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
|
|
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(
|
|
138
|
-
.
|
|
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/
|
|
140
|
+
return apiPath(`/api/signed/webp(700)/${file.appFileID}/${file.fileContentID}/${file.signed}/file.webp`);
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
|
|
@@ -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) => [
|
|
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
|
-
|
|
248
|
+
if (includeFilesInFolder || iterator.isFolder) {
|
|
249
|
+
children.add(iterator);
|
|
250
|
+
}
|
|
247
251
|
}
|
|
248
252
|
}
|
|
249
253
|
results.push(iterator);
|