@social-mail/social-mail-client 1.2.331 → 1.2.333
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 +122 -2
- package/dist/admin/AdminAppIndex.pack.js.map +1 -1
- package/dist/admin/AdminAppIndex.pack.min.js +1 -1
- package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
- package/dist/model/model.d.ts +27 -1
- package/dist/model/model.d.ts.map +1 -1
- package/dist/model/model.js +122 -2
- package/dist/model/model.js.map +1 -1
- package/dist/public/channel/ChannelView.pack.js +122 -2
- package/dist/public/channel/ChannelView.pack.js.map +1 -1
- package/dist/public/channel/ChannelView.pack.min.js +1 -1
- package/dist/public/channel/ChannelView.pack.min.js.map +1 -1
- package/dist/public/store/Store.pack.js +187 -14
- package/dist/public/store/Store.pack.js.map +1 -1
- package/dist/public/store/Store.pack.min.js +38 -10
- package/dist/public/store/Store.pack.min.js.map +1 -1
- package/dist/public/store/StoreItemDetailView.d.ts.map +1 -1
- package/dist/public/store/StoreItemDetailView.js +5 -6
- package/dist/public/store/StoreItemDetailView.js.map +1 -1
- package/dist/public/store/StoreItemListView.d.ts +2 -1
- package/dist/public/store/StoreItemListView.d.ts.map +1 -1
- package/dist/public/store/StoreItemListView.js +60 -6
- package/dist/public/store/StoreItemListView.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/web/AppIndex.pack.js +122 -2
- package/dist/web/AppIndex.pack.js.map +1 -1
- package/dist/web/AppIndex.pack.min.js +1 -1
- package/dist/web/AppIndex.pack.min.js.map +1 -1
- package/package.json +1 -1
- package/src/model/model.ts +49 -7
- package/src/public/store/StoreItemDetailView.tsx +5 -7
- package/src/public/store/StoreItemListView.tsx +58 -5
package/package.json
CHANGED
package/src/model/model.ts
CHANGED
|
@@ -925,6 +925,7 @@ export interface IStore extends IClrEntity {
|
|
|
925
925
|
insights?: ICollection<IStoreInsight>;
|
|
926
926
|
ledgers?: ICollection<IStoreLedger>;
|
|
927
927
|
journals?: ICollection<IStoreJournal>;
|
|
928
|
+
tags?: ICollection<IStoreTag>;
|
|
928
929
|
storeWebsites?: ICollection<IWebSiteStore>;
|
|
929
930
|
}
|
|
930
931
|
|
|
@@ -932,7 +933,7 @@ export const Store: IModel<IStore> = new Model<IStore>(
|
|
|
932
933
|
"Store",
|
|
933
934
|
["storeID"],
|
|
934
935
|
{ name: "" },
|
|
935
|
-
{"name":"stores","keys":[{"name":"storeID","type":"number","generated":"identity"}],"properties":[{"name":"name","type":"string","default":["name","\"\""]},{"name":"sellerID","type":"number"},{"name":"folderID","type":"number"}],"relations":[{"name":"seller","fkMap":[{"fk":"sellerID","relatedKey":"contactID"}],"relatedName":"Contact"},{"name":"folder","fkMap":[{"fk":"folderID","relatedKey":"appFileID"}],"relatedName":"AppFile"},{"name":"storeUsers","isCollection":true,"isInverse":true,"relatedName":"StoreUser"},{"name":"configs","isCollection":true,"isInverse":true,"relatedName":"StoreConfig"},{"name":"storeItems","isCollection":true,"isInverse":true,"relatedName":"StoreItem"},{"name":"itemFolders","isCollection":true,"isInverse":true,"relatedName":"StoreItemFolder"},{"name":"insights","isCollection":true,"isInverse":true,"relatedName":"StoreInsight"},{"name":"ledgers","isCollection":true,"isInverse":true,"relatedName":"StoreLedger"},{"name":"journals","isCollection":true,"isInverse":true,"relatedName":"StoreJournal"},{"name":"storeWebsites","isCollection":true,"isInverse":true,"relatedName":"WebSiteStore"}]}
|
|
936
|
+
{"name":"stores","keys":[{"name":"storeID","type":"number","generated":"identity"}],"properties":[{"name":"name","type":"string","default":["name","\"\""]},{"name":"sellerID","type":"number"},{"name":"folderID","type":"number"}],"relations":[{"name":"seller","fkMap":[{"fk":"sellerID","relatedKey":"contactID"}],"relatedName":"Contact"},{"name":"folder","fkMap":[{"fk":"folderID","relatedKey":"appFileID"}],"relatedName":"AppFile"},{"name":"storeUsers","isCollection":true,"isInverse":true,"relatedName":"StoreUser"},{"name":"configs","isCollection":true,"isInverse":true,"relatedName":"StoreConfig"},{"name":"storeItems","isCollection":true,"isInverse":true,"relatedName":"StoreItem"},{"name":"itemFolders","isCollection":true,"isInverse":true,"relatedName":"StoreItemFolder"},{"name":"insights","isCollection":true,"isInverse":true,"relatedName":"StoreInsight"},{"name":"ledgers","isCollection":true,"isInverse":true,"relatedName":"StoreLedger"},{"name":"journals","isCollection":true,"isInverse":true,"relatedName":"StoreJournal"},{"name":"tags","isCollection":true,"isInverse":true,"relatedName":"StoreTag"},{"name":"storeWebsites","isCollection":true,"isInverse":true,"relatedName":"WebSiteStore"}]}
|
|
936
937
|
);
|
|
937
938
|
modelEntitySchemas["Store"] = Store;
|
|
938
939
|
|
|
@@ -1024,16 +1025,33 @@ export interface IStoreItemFolder extends IClrEntity {
|
|
|
1024
1025
|
parent?: IStoreItemFolder;
|
|
1025
1026
|
children?: ICollection<IStoreItemFolder>;
|
|
1026
1027
|
items?: ICollection<IStoreItem>;
|
|
1028
|
+
tags?: ICollection<IStoreItemFolderTag>;
|
|
1027
1029
|
}
|
|
1028
1030
|
|
|
1029
1031
|
export const StoreItemFolder: IModel<IStoreItemFolder> = new Model<IStoreItemFolder>(
|
|
1030
1032
|
"StoreItemFolder",
|
|
1031
1033
|
["itemFolderID"],
|
|
1032
1034
|
{ name: "",path: "" },
|
|
1033
|
-
{"name":"store_item_folders","keys":[{"name":"itemFolderID","type":"number","generated":"identity"}],"properties":[{"name":"storeID","type":"number"},{"name":"name","type":"string","default":["name","\"\""]},{"name":"path","type":"string","default":["path","\"\""]},{"name":"parentID","type":"number"}],"relations":[{"name":"store","fkMap":[{"fk":"storeID","relatedKey":"storeID"}],"relatedName":"Store"},{"name":"parent","fkMap":[{"fk":"parentID","relatedKey":"itemFolderID"}],"relatedName":"StoreItemFolder"},{"name":"children","isCollection":true,"isInverse":true,"relatedName":"StoreItemFolder"},{"name":"items","isCollection":true,"isInverse":true,"relatedName":"StoreItem"}]}
|
|
1035
|
+
{"name":"store_item_folders","keys":[{"name":"itemFolderID","type":"number","generated":"identity"}],"properties":[{"name":"storeID","type":"number"},{"name":"name","type":"string","default":["name","\"\""]},{"name":"path","type":"string","default":["path","\"\""]},{"name":"parentID","type":"number"}],"relations":[{"name":"store","fkMap":[{"fk":"storeID","relatedKey":"storeID"}],"relatedName":"Store"},{"name":"parent","fkMap":[{"fk":"parentID","relatedKey":"itemFolderID"}],"relatedName":"StoreItemFolder"},{"name":"children","isCollection":true,"isInverse":true,"relatedName":"StoreItemFolder"},{"name":"items","isCollection":true,"isInverse":true,"relatedName":"StoreItem"},{"name":"tags","isCollection":true,"isInverse":true,"relatedName":"StoreItemFolderTag"}]}
|
|
1034
1036
|
);
|
|
1035
1037
|
modelEntitySchemas["StoreItemFolder"] = StoreItemFolder;
|
|
1036
1038
|
|
|
1039
|
+
export interface IStoreItemFolderTag extends IClrEntity {
|
|
1040
|
+
itemFolderID?: number;
|
|
1041
|
+
tagID?: number;
|
|
1042
|
+
count?: number;
|
|
1043
|
+
itemFolder?: IStoreItemFolder;
|
|
1044
|
+
tag?: ITag;
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
export const StoreItemFolderTag: IModel<IStoreItemFolderTag> = new Model<IStoreItemFolderTag>(
|
|
1048
|
+
"StoreItemFolderTag",
|
|
1049
|
+
["itemFolderID","tagID"],
|
|
1050
|
+
{ count: 0 },
|
|
1051
|
+
{"name":"store_item_folder_tags","keys":[{"name":"itemFolderID","type":"number"},{"name":"tagID","type":"number"}],"properties":[{"name":"count","type":"number","default":["count","0"]}],"relations":[{"name":"itemFolder","fkMap":[{"fk":"itemFolderID","relatedKey":"itemFolderID"}],"relatedName":"StoreItemFolder"},{"name":"tag","fkMap":[{"fk":"tagID","relatedKey":"tagID"}],"relatedName":"Tag"}]}
|
|
1052
|
+
);
|
|
1053
|
+
modelEntitySchemas["StoreItemFolderTag"] = StoreItemFolderTag;
|
|
1054
|
+
|
|
1037
1055
|
export interface IStoreItemPrice extends IClrEntity {
|
|
1038
1056
|
readonly priceID?: number;
|
|
1039
1057
|
storeItemID?: number;
|
|
@@ -1236,6 +1254,22 @@ export const StoreItemTax: IModel<IStoreItemTax> = new Model<IStoreItemTax>(
|
|
|
1236
1254
|
);
|
|
1237
1255
|
modelEntitySchemas["StoreItemTax"] = StoreItemTax;
|
|
1238
1256
|
|
|
1257
|
+
export interface IStoreTag extends IClrEntity {
|
|
1258
|
+
storeID?: number;
|
|
1259
|
+
tagID?: number;
|
|
1260
|
+
count?: number;
|
|
1261
|
+
store?: IStore;
|
|
1262
|
+
tag?: ITag;
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1265
|
+
export const StoreTag: IModel<IStoreTag> = new Model<IStoreTag>(
|
|
1266
|
+
"StoreTag",
|
|
1267
|
+
["storeID","tagID"],
|
|
1268
|
+
{ count: 0 },
|
|
1269
|
+
{"name":"store_tags","keys":[{"name":"storeID","type":"number"},{"name":"tagID","type":"number"}],"properties":[{"name":"count","type":"number","default":["count","0"]}],"relations":[{"name":"store","fkMap":[{"fk":"storeID","relatedKey":"storeID"}],"relatedName":"Store"},{"name":"tag","fkMap":[{"fk":"tagID","relatedKey":"tagID"}],"relatedName":"Tag"}]}
|
|
1270
|
+
);
|
|
1271
|
+
modelEntitySchemas["StoreTag"] = StoreTag;
|
|
1272
|
+
|
|
1239
1273
|
export interface IStoreItemTag extends IClrEntity {
|
|
1240
1274
|
storeItemID?: number;
|
|
1241
1275
|
tagID?: number;
|
|
@@ -1263,11 +1297,17 @@ export interface IUser extends IClrEntity {
|
|
|
1263
1297
|
dateUpdated?: DateTime;
|
|
1264
1298
|
readonly storage?: number;
|
|
1265
1299
|
maxStorage?: number;
|
|
1300
|
+
maxWebSites?: number;
|
|
1301
|
+
maxExternalInboxes?: number;
|
|
1302
|
+
maxChildUsers?: number;
|
|
1303
|
+
parentID?: number | null;
|
|
1266
1304
|
/** Save this to change password */
|
|
1267
1305
|
changePassword?: { oldPassword?: string;newPassword?: string;forceChangePasswordOnLogin?: boolean };
|
|
1268
1306
|
createFolder?: boolean;
|
|
1269
1307
|
createWebSite?: boolean;
|
|
1270
1308
|
autoEnableMF?: boolean;
|
|
1309
|
+
parent?: IUser;
|
|
1310
|
+
children?: ICollection<IUser>;
|
|
1271
1311
|
createdFiles?: ICollection<IAppFile>;
|
|
1272
1312
|
sentEmails?: ICollection<IEmail>;
|
|
1273
1313
|
accessTokens?: ICollection<IAccessToken>;
|
|
@@ -1290,8 +1330,8 @@ export const UserStatusArray = [{"label":"active","value":"active"},{"label":"bl
|
|
|
1290
1330
|
export const User: IModel<IUser> = new Model<IUser>(
|
|
1291
1331
|
"User",
|
|
1292
1332
|
["userID"],
|
|
1293
|
-
{ userName: "",displayName: "",status: "active",isExternal: false,multiFactor: false,dateUpdated: new DefaultFactory(() => new DateTime()),storage: 0,maxStorage: 0 },
|
|
1294
|
-
{"name":"users","keys":[{"name":"userID","type":"number","generated":"identity"}],"properties":[{"name":"userName","type":"string","default":["userName","\"\""]},{"name":"displayName","type":"string","default":["displayName","\"\""]},{"name":"passwordHash","type":"string","default":["passwordHash","\"\""]},{"name":"passwordSalt","type":"string","default":["passwordSalt","\"\""]},{"name":"status","type":"string","default":["status","\"active\""]},{"name":"isExternal","type":"boolean","default":["isExternal","false"]},{"name":"multiFactor","type":"boolean","default":["multiFactor","false"]},{"name":"dateUpdated","type":"DateTime","default":["dateUpdated","new DefaultFactory(() => new DateTime())"]},{"name":"storage","type":"number","default":["storage","0"]},{"name":"maxStorage","type":"number","default":["maxStorage","0"]}],"relations":[{"name":"createdFiles","isCollection":true,"isInverse":true,"relatedName":"AppFile"},{"name":"sentEmails","isCollection":true,"isInverse":true,"relatedName":"Email"},{"name":"accessTokens","isCollection":true,"isInverse":true,"relatedName":"AccessToken"},{"name":"versions","isCollection":true,"isInverse":true,"relatedName":"AppFileVersion"},{"name":"sessions","isCollection":true,"isInverse":true,"relatedName":"LoginSession"},{"name":"fileAccessList","isCollection":true,"isInverse":true,"relatedName":"AppFileAccess"},{"name":"contacts","isCollection":true,"isInverse":true,"relatedName":"Contact"},{"name":"domainUsers","isCollection":true,"isInverse":true,"relatedName":"DomainUser"},{"name":"stores","isCollection":true,"isInverse":true,"relatedName":"StoreUser"},{"name":"pins","isCollection":true,"isInverse":true,"relatedName":"UserPin"},{"name":"userPushSubscriptions","isCollection":true,"isInverse":true,"relatedName":"UserPushSubscription"},{"name":"roles","isCollection":true,"isInverse":true,"relatedName":"UserRole"},{"name":"userMailboxes","isCollection":true,"isInverse":true,"relatedName":"UserMailbox"},{"name":"authFactors","isCollection":true,"isInverse":true,"relatedName":"UserAuthFactor"},{"name":"publishedWebSiteVersions","isCollection":true,"isInverse":true,"relatedName":"WebSiteFolderVersion"}]}
|
|
1333
|
+
{ userName: "",displayName: "",status: "active",isExternal: false,multiFactor: false,dateUpdated: new DefaultFactory(() => new DateTime()),storage: 0,maxStorage: 0,maxWebSites: 0,maxExternalInboxes: 0,maxChildUsers: 0 },
|
|
1334
|
+
{"name":"users","keys":[{"name":"userID","type":"number","generated":"identity"}],"properties":[{"name":"userName","type":"string","default":["userName","\"\""]},{"name":"displayName","type":"string","default":["displayName","\"\""]},{"name":"passwordHash","type":"string","default":["passwordHash","\"\""]},{"name":"passwordSalt","type":"string","default":["passwordSalt","\"\""]},{"name":"status","type":"string","default":["status","\"active\""]},{"name":"isExternal","type":"boolean","default":["isExternal","false"]},{"name":"multiFactor","type":"boolean","default":["multiFactor","false"]},{"name":"dateUpdated","type":"DateTime","default":["dateUpdated","new DefaultFactory(() => new DateTime())"]},{"name":"storage","type":"number","default":["storage","0"]},{"name":"maxStorage","type":"number","default":["maxStorage","0"]},{"name":"maxWebSites","type":"number","default":["maxWebSites","0"]},{"name":"maxExternalInboxes","type":"number","default":["maxExternalInboxes","0"]},{"name":"maxChildUsers","type":"number","default":["maxChildUsers","0"]},{"name":"parentID","type":"number"}],"relations":[{"name":"parent","fkMap":[{"fk":"parentID","relatedKey":"userID"}],"relatedName":"User"},{"name":"children","isCollection":true,"isInverse":true,"relatedName":"User"},{"name":"createdFiles","isCollection":true,"isInverse":true,"relatedName":"AppFile"},{"name":"sentEmails","isCollection":true,"isInverse":true,"relatedName":"Email"},{"name":"accessTokens","isCollection":true,"isInverse":true,"relatedName":"AccessToken"},{"name":"versions","isCollection":true,"isInverse":true,"relatedName":"AppFileVersion"},{"name":"sessions","isCollection":true,"isInverse":true,"relatedName":"LoginSession"},{"name":"fileAccessList","isCollection":true,"isInverse":true,"relatedName":"AppFileAccess"},{"name":"contacts","isCollection":true,"isInverse":true,"relatedName":"Contact"},{"name":"domainUsers","isCollection":true,"isInverse":true,"relatedName":"DomainUser"},{"name":"stores","isCollection":true,"isInverse":true,"relatedName":"StoreUser"},{"name":"pins","isCollection":true,"isInverse":true,"relatedName":"UserPin"},{"name":"userPushSubscriptions","isCollection":true,"isInverse":true,"relatedName":"UserPushSubscription"},{"name":"roles","isCollection":true,"isInverse":true,"relatedName":"UserRole"},{"name":"userMailboxes","isCollection":true,"isInverse":true,"relatedName":"UserMailbox"},{"name":"authFactors","isCollection":true,"isInverse":true,"relatedName":"UserAuthFactor"},{"name":"publishedWebSiteVersions","isCollection":true,"isInverse":true,"relatedName":"WebSiteFolderVersion"}]}
|
|
1295
1335
|
);
|
|
1296
1336
|
modelEntitySchemas["User"] = User;
|
|
1297
1337
|
|
|
@@ -1546,13 +1586,13 @@ modelEntitySchemas["IncomingSmsSource"] = IncomingSmsSource;
|
|
|
1546
1586
|
export interface IVerificationToken extends IClrEntity {
|
|
1547
1587
|
readonly verificationID?: number;
|
|
1548
1588
|
externalID?: string | null;
|
|
1549
|
-
externalConfig?: string | null;
|
|
1550
1589
|
dateCreated?: DateTime;
|
|
1551
1590
|
expiry?: DateTime;
|
|
1552
1591
|
verified?: boolean;
|
|
1553
1592
|
code?: string;
|
|
1554
1593
|
accessCode?: string;
|
|
1555
1594
|
ipAddress?: string | null;
|
|
1595
|
+
externalConfig?: string | null;
|
|
1556
1596
|
smsConfig?: Object;
|
|
1557
1597
|
loginSessions?: ICollection<ILoginSession>;
|
|
1558
1598
|
authFactors?: ICollection<IUserAuthFactor>;
|
|
@@ -1563,7 +1603,7 @@ export const VerificationToken: IModel<IVerificationToken> = new Model<IVerifica
|
|
|
1563
1603
|
"VerificationToken",
|
|
1564
1604
|
["verificationID"],
|
|
1565
1605
|
{ dateCreated: new DefaultFactory(() => new DateTime()),expiry: new DefaultFactory(() => new DateTime()),verified: false,code: "",accessCode: "" },
|
|
1566
|
-
{"name":"verification_tokens","keys":[{"name":"verificationID","type":"number","generated":"identity"}],"properties":[{"name":"externalID","type":"string","default":["externalID","\"\""]},{"name":"dateCreated","type":"DateTime","default":["dateCreated","new DefaultFactory(() => new DateTime())"]},{"name":"expiry","type":"DateTime","default":["expiry","new DefaultFactory(() => new DateTime())"]},{"name":"verified","type":"boolean","default":["verified","false"]},{"name":"code","type":"string","default":["code","\"\""]},{"name":"accessCode","type":"string","default":["accessCode","\"\""]},{"name":"ipAddress","type":"string","default":["ipAddress","\"\""]}],"relations":[{"name":"loginSessions","isCollection":true,"isInverse":true,"relatedName":"LoginSession"},{"name":"authFactors","isCollection":true,"isInverse":true,"relatedName":"UserAuthFactor"},{"name":"addresses","isCollection":true,"isInverse":true,"relatedName":"VerificationTokenAddress"}]}
|
|
1606
|
+
{"name":"verification_tokens","keys":[{"name":"verificationID","type":"number","generated":"identity"}],"properties":[{"name":"externalID","type":"string","default":["externalID","\"\""]},{"name":"dateCreated","type":"DateTime","default":["dateCreated","new DefaultFactory(() => new DateTime())"]},{"name":"expiry","type":"DateTime","default":["expiry","new DefaultFactory(() => new DateTime())"]},{"name":"verified","type":"boolean","default":["verified","false"]},{"name":"code","type":"string","default":["code","\"\""]},{"name":"accessCode","type":"string","default":["accessCode","\"\""]},{"name":"ipAddress","type":"string","default":["ipAddress","\"\""]},{"name":"externalConfig","type":"string","default":["externalConfig","\"\""]}],"relations":[{"name":"loginSessions","isCollection":true,"isInverse":true,"relatedName":"LoginSession"},{"name":"authFactors","isCollection":true,"isInverse":true,"relatedName":"UserAuthFactor"},{"name":"addresses","isCollection":true,"isInverse":true,"relatedName":"VerificationTokenAddress"}]}
|
|
1567
1607
|
);
|
|
1568
1608
|
modelEntitySchemas["VerificationToken"] = VerificationToken;
|
|
1569
1609
|
|
|
@@ -1594,6 +1634,8 @@ export interface ITag extends IClrEntity {
|
|
|
1594
1634
|
fileTags?: ICollection<IAppFileTag>;
|
|
1595
1635
|
emailTags?: ICollection<IEmailTag>;
|
|
1596
1636
|
mailboxContactTags?: ICollection<IMailboxContactTag>;
|
|
1637
|
+
storeItemFolderTags?: ICollection<IStoreItemFolderTag>;
|
|
1638
|
+
storeTags?: ICollection<IStoreTag>;
|
|
1597
1639
|
storeItemTags?: ICollection<IStoreItemTag>;
|
|
1598
1640
|
}
|
|
1599
1641
|
|
|
@@ -1601,7 +1643,7 @@ export const Tag: IModel<ITag> = new Model<ITag>(
|
|
|
1601
1643
|
"Tag",
|
|
1602
1644
|
["tagID"],
|
|
1603
1645
|
{ name: "",isSystemTag: false },
|
|
1604
|
-
{"name":"tags","keys":[{"name":"tagID","type":"number","generated":"identity"}],"properties":[{"name":"name","type":"string","default":["name","\"\""]},{"name":"lowerCaseName","type":"string","generated":"computed"},{"name":"path","type":"string","default":["path","\"\""]},{"name":"isSystemTag","type":"boolean","default":["isSystemTag","false"]},{"name":"contentTypes","type":"string","default":["contentTypes","\"\""]},{"name":"parentID","type":"number"}],"relations":[{"name":"parent","fkMap":[{"fk":"parentID","relatedKey":"tagID"}],"relatedName":"Tag"},{"name":"children","isCollection":true,"isInverse":true,"relatedName":"Tag"},{"name":"fileTags","isCollection":true,"isInverse":true,"relatedName":"AppFileTag"},{"name":"emailTags","isCollection":true,"isInverse":true,"relatedName":"EmailTag"},{"name":"mailboxContactTags","isCollection":true,"isInverse":true,"relatedName":"MailboxContactTag"},{"name":"storeItemTags","isCollection":true,"isInverse":true,"relatedName":"StoreItemTag"}]}
|
|
1646
|
+
{"name":"tags","keys":[{"name":"tagID","type":"number","generated":"identity"}],"properties":[{"name":"name","type":"string","default":["name","\"\""]},{"name":"lowerCaseName","type":"string","generated":"computed"},{"name":"path","type":"string","default":["path","\"\""]},{"name":"isSystemTag","type":"boolean","default":["isSystemTag","false"]},{"name":"contentTypes","type":"string","default":["contentTypes","\"\""]},{"name":"parentID","type":"number"}],"relations":[{"name":"parent","fkMap":[{"fk":"parentID","relatedKey":"tagID"}],"relatedName":"Tag"},{"name":"children","isCollection":true,"isInverse":true,"relatedName":"Tag"},{"name":"fileTags","isCollection":true,"isInverse":true,"relatedName":"AppFileTag"},{"name":"emailTags","isCollection":true,"isInverse":true,"relatedName":"EmailTag"},{"name":"mailboxContactTags","isCollection":true,"isInverse":true,"relatedName":"MailboxContactTag"},{"name":"storeItemFolderTags","isCollection":true,"isInverse":true,"relatedName":"StoreItemFolderTag"},{"name":"storeTags","isCollection":true,"isInverse":true,"relatedName":"StoreTag"},{"name":"storeItemTags","isCollection":true,"isInverse":true,"relatedName":"StoreItemTag"}]}
|
|
1605
1647
|
);
|
|
1606
1648
|
modelEntitySchemas["Tag"] = Tag;
|
|
1607
1649
|
|
|
@@ -17,7 +17,7 @@ import ToggleButtonBar from "@web-atoms/web-controls/dist/basic/ToggleButtonBar"
|
|
|
17
17
|
const url = (window as any).pageUrl as URL;
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
let {1: storeID = "4", 2: itemID = "
|
|
20
|
+
let {1: storeID = "4", 2: itemID = "23" } = /^\/store\/([^\/]+)\/([^\/]+)\//.exec(url?.pathname) ?? {} as any;
|
|
21
21
|
|
|
22
22
|
storeID = parseInt(storeID, 36);
|
|
23
23
|
itemID = parseInt(itemID, 36);
|
|
@@ -53,6 +53,7 @@ const css = styled.css `
|
|
|
53
53
|
display: flex;
|
|
54
54
|
flex-direction: column;
|
|
55
55
|
overflow: auto;
|
|
56
|
+
max-height: 500px;
|
|
56
57
|
& > img {
|
|
57
58
|
cursor: pointer;
|
|
58
59
|
margin: 5px;
|
|
@@ -65,8 +66,8 @@ const css = styled.css `
|
|
|
65
66
|
& > .preview {
|
|
66
67
|
grid-row: 1;
|
|
67
68
|
grid-column: 2;
|
|
68
|
-
height:
|
|
69
|
-
min-width:
|
|
69
|
+
height: 60%;
|
|
70
|
+
min-width: 50%;
|
|
70
71
|
& img {
|
|
71
72
|
-webkit-user-drag: none;
|
|
72
73
|
}
|
|
@@ -75,7 +76,7 @@ const css = styled.css `
|
|
|
75
76
|
}
|
|
76
77
|
|
|
77
78
|
& img {
|
|
78
|
-
max-width:
|
|
79
|
+
max-width: 90%;
|
|
79
80
|
}
|
|
80
81
|
`.installLocal();
|
|
81
82
|
|
|
@@ -118,9 +119,6 @@ export default class StoreItemDetailView extends AtomControl {
|
|
|
118
119
|
|
|
119
120
|
this.model = await this.getItem();
|
|
120
121
|
|
|
121
|
-
const images = this.model.mediaFiles.where((x) => x.isPreview);
|
|
122
|
-
this.selectedFile = images[0];
|
|
123
|
-
|
|
124
122
|
const offer = this.model.mediaFiles.find((x) => x.title === "offer.html");
|
|
125
123
|
const specifications = this.model.mediaFiles.find((x) => x.title === "specs.html");
|
|
126
124
|
|
|
@@ -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, StoreMediaFile } from "../../model/model";
|
|
9
|
+
import { AppFile, IStoreItem, IStoreTag, ITag, StoreItem, StoreMediaFile, StoreTag } from "../../model/model";
|
|
10
10
|
import { Sql } from "../../common/Sql";
|
|
11
11
|
import { apiPath } from "../../common/apiPath";
|
|
12
12
|
import SocialMailApp from "../../common/SocialMailApp";
|
|
@@ -23,14 +23,33 @@ import { storeItemLink } from "./storeItemLink";
|
|
|
23
23
|
grid-row:1;
|
|
24
24
|
padding: 10px;
|
|
25
25
|
display: flex;
|
|
26
|
-
flex-
|
|
27
|
-
|
|
26
|
+
flex-direction: column;
|
|
28
27
|
gap: 10px;
|
|
28
|
+
& > .tags {
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-wrap: wrap;
|
|
31
|
+
gap: 5px;
|
|
32
|
+
& > * {
|
|
33
|
+
cursor: pointer;
|
|
34
|
+
border-radius: 5px;
|
|
35
|
+
padding: 2px;
|
|
36
|
+
padding-left: 5px;
|
|
37
|
+
padding-right: 5px;
|
|
38
|
+
&:hover {
|
|
39
|
+
color: highlight;
|
|
40
|
+
text-decoration: underline;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
29
44
|
}
|
|
30
45
|
|
|
31
46
|
& > section {
|
|
32
47
|
grid-row: 2;
|
|
33
48
|
padding: 10px;
|
|
49
|
+
display: flex;
|
|
50
|
+
flex-direction: row;
|
|
51
|
+
flex-wrap: wrap;
|
|
52
|
+
gap: 10px;
|
|
34
53
|
|
|
35
54
|
& .store-item {
|
|
36
55
|
display: inline-grid;
|
|
@@ -43,6 +62,10 @@ import { storeItemLink } from "./storeItemLink";
|
|
|
43
62
|
& > .name {
|
|
44
63
|
grid-column: 1 / span 2;
|
|
45
64
|
grid-row: 1;
|
|
65
|
+
max-width:200px;
|
|
66
|
+
overflow: hidden;
|
|
67
|
+
text-overflow: ellipsis;
|
|
68
|
+
white-space: nowrap;
|
|
46
69
|
}
|
|
47
70
|
& > img {
|
|
48
71
|
grid-column: 1 / span 2;
|
|
@@ -55,6 +78,10 @@ import { storeItemLink } from "./storeItemLink";
|
|
|
55
78
|
grid-column: 1 / span 2;
|
|
56
79
|
grid-row: 3;
|
|
57
80
|
max-width: 200px;
|
|
81
|
+
height: 3ch;
|
|
82
|
+
overflow: hidden;
|
|
83
|
+
text-overflow: ellipsis;
|
|
84
|
+
white-space: nowrap;
|
|
58
85
|
}
|
|
59
86
|
& > .buy {
|
|
60
87
|
grid-column: 2;
|
|
@@ -95,6 +122,11 @@ export default class StoreItemListView extends AtomControl {
|
|
|
95
122
|
this.render(<div data-shopping-cart-list="shopping-cart-list">
|
|
96
123
|
<header>
|
|
97
124
|
<input type="search" value={Bind.twoWaysImmediate(() => this.search)}/>
|
|
125
|
+
<AtomRepeater
|
|
126
|
+
class="tags"
|
|
127
|
+
items={Bind.oneWayAsync((c, e, cancelToken) => this.searchTags(this.search, cancelToken), { default: [] })}
|
|
128
|
+
itemRenderer={(x: IStoreTag) => <label text={x.tag.name}/>}
|
|
129
|
+
/>
|
|
98
130
|
</header>
|
|
99
131
|
<AtomRepeater
|
|
100
132
|
for="section"
|
|
@@ -135,6 +167,25 @@ export default class StoreItemListView extends AtomControl {
|
|
|
135
167
|
|
|
136
168
|
}
|
|
137
169
|
|
|
170
|
+
async searchTags(search: string, cancelToken): Promise<any> {
|
|
171
|
+
let q = this.entityService.query(StoreTag);
|
|
172
|
+
if (search) {
|
|
173
|
+
search = search.trim().toLocaleLowerCase() + "%";
|
|
174
|
+
q = q.where({ search }, (p) => (x) =>
|
|
175
|
+
Sql.text.like(x.tag.lowerCaseName, p.search)
|
|
176
|
+
|| Sql.text.like(x.tag.parent.lowerCaseName, p.search)
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
const tags = await q
|
|
180
|
+
.orderByDescending((x) => x.count)
|
|
181
|
+
.include((x) => x.tag)
|
|
182
|
+
.toPagedList({
|
|
183
|
+
size: 20,
|
|
184
|
+
cancelToken
|
|
185
|
+
});
|
|
186
|
+
return tags.items;
|
|
187
|
+
}
|
|
188
|
+
|
|
138
189
|
async downloadImage(item: IStoreItem) {
|
|
139
190
|
const file = await this.entityService.query(StoreMediaFile, "storeQuery", item.storeItemID, item.signed)
|
|
140
191
|
.orderBy((x) => x.sortOrder)
|
|
@@ -145,7 +196,7 @@ export default class StoreItemListView extends AtomControl {
|
|
|
145
196
|
|
|
146
197
|
async searchItems({
|
|
147
198
|
start,
|
|
148
|
-
search,
|
|
199
|
+
search = "",
|
|
149
200
|
size = 50,
|
|
150
201
|
cancelToken
|
|
151
202
|
}) {
|
|
@@ -157,11 +208,13 @@ export default class StoreItemListView extends AtomControl {
|
|
|
157
208
|
);
|
|
158
209
|
if (search) {
|
|
159
210
|
search = search + "%";
|
|
160
|
-
|
|
211
|
+
const searchLower = search.trim().toLocaleLowerCase();
|
|
212
|
+
q = q.where({ search, searchLower }, (p) => (x) =>
|
|
161
213
|
(Sql.text.iLike(x.name, p.search)
|
|
162
214
|
|| Sql.text.iLike(x.description, p.search)
|
|
163
215
|
|| x.sizes.some((s) => Sql.text.iLike(s.name, p.search) || Sql.text.iLike(s.description, p.search))
|
|
164
216
|
|| x.variants.some((s) => Sql.text.iLike(s.name, p.search) || Sql.text.iLike(s.description, p.search))
|
|
217
|
+
|| x.storeItemTags.some((t) => Sql.text.like(t.tag.lowerCaseName, p.searchLower))
|
|
165
218
|
)
|
|
166
219
|
&& x.sizeForID === null
|
|
167
220
|
&& x.variantForID === null
|