@social-mail/social-mail-client 1.2.329 → 1.2.331
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 +2 -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/common/controls/drag-drop/FilesDragDrop.js +2 -2
- package/dist/common/controls/drag-drop/FilesDragDrop.js.map +1 -1
- package/dist/public/store/Store.pack.js +3482 -3330
- package/dist/public/store/Store.pack.js.map +1 -1
- package/dist/public/store/Store.pack.min.js +141 -102
- package/dist/public/store/Store.pack.min.js.map +1 -1
- package/dist/public/store/StoreItemDetailView.d.ts +4 -0
- package/dist/public/store/StoreItemDetailView.d.ts.map +1 -1
- package/dist/public/store/StoreItemDetailView.js +63 -15
- package/dist/public/store/StoreItemDetailView.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/web/AppIndex.pack.js +2 -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/common/controls/drag-drop/FilesDragDrop.ts +2 -2
- package/src/public/store/StoreItemDetailView.tsx +54 -11
package/package.json
CHANGED
|
@@ -50,7 +50,7 @@ const eventDrop = (e: DragEvent) => {
|
|
|
50
50
|
.filter((item) => item.kind === "file")
|
|
51
51
|
.map((item) =>
|
|
52
52
|
supportsFileSystemAccessAPI
|
|
53
|
-
? item.getAsFileSystemHandle()
|
|
53
|
+
? item.getAsFileSystemHandle().then((f) => f ?? item.getAsFile())
|
|
54
54
|
: supportsWebkitGetAsEntry
|
|
55
55
|
? item.webkitGetAsEntry()
|
|
56
56
|
: item.getAsFile()
|
|
@@ -79,7 +79,7 @@ const eventDrop = (e: DragEvent) => {
|
|
|
79
79
|
if (handle.kind === "directory" || handle.isDirectory) {
|
|
80
80
|
files.push(... await getFiles(handle));
|
|
81
81
|
} else {
|
|
82
|
-
files.push(await handle.getFile());
|
|
82
|
+
files.push(handle.getFile ? await handle.getFile(): handle);
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
const detail = {
|
|
@@ -12,11 +12,12 @@ import Action from "@web-atoms/core/dist/view-model/Action";
|
|
|
12
12
|
import styled from "@web-atoms/core/dist/style/styled";
|
|
13
13
|
import FetchBuilder from "@web-atoms/core/dist/services/FetchBuilder";
|
|
14
14
|
import { formatCurrency, formatPrice } from "../../common/currency";
|
|
15
|
+
import ToggleButtonBar from "@web-atoms/web-controls/dist/basic/ToggleButtonBar";
|
|
15
16
|
|
|
16
17
|
const url = (window as any).pageUrl as URL;
|
|
17
18
|
|
|
18
19
|
|
|
19
|
-
let {1: storeID = "
|
|
20
|
+
let {1: storeID = "4", 2: itemID = "1w" } = /^\/store\/([^\/]+)\/([^\/]+)\//.exec(url?.pathname) ?? {} as any;
|
|
20
21
|
|
|
21
22
|
storeID = parseInt(storeID, 36);
|
|
22
23
|
itemID = parseInt(itemID, 36);
|
|
@@ -70,6 +71,11 @@ const css = styled.css `
|
|
|
70
71
|
-webkit-user-drag: none;
|
|
71
72
|
}
|
|
72
73
|
}
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
& img {
|
|
78
|
+
max-width: 90vw;
|
|
73
79
|
}
|
|
74
80
|
`.installLocal();
|
|
75
81
|
|
|
@@ -81,13 +87,29 @@ export default class StoreItemDetailView extends AtomControl {
|
|
|
81
87
|
|
|
82
88
|
model: IStoreItem;
|
|
83
89
|
|
|
90
|
+
selectedVarient: IStoreItem = null;
|
|
91
|
+
|
|
92
|
+
selectedSize: IStoreItem = null;
|
|
93
|
+
|
|
84
94
|
selectedFile: IStoreMediaFile = null;
|
|
85
95
|
|
|
96
|
+
images: IStoreMediaFile[] = [];
|
|
97
|
+
|
|
86
98
|
constructor(app, e) {
|
|
87
99
|
super(app, e);
|
|
88
100
|
this.runAfterInit(() => this.app.runAsync(() => this.init()));
|
|
89
101
|
}
|
|
90
102
|
|
|
103
|
+
getFiles(item: IStoreItem, varient: IStoreItem, size: IStoreItem) {
|
|
104
|
+
const varientFiles = varient?.mediaFiles?.filter((x) => x.isPreview);
|
|
105
|
+
const files = varientFiles ?? item.mediaFiles.filter((x) => x.isPreview);
|
|
106
|
+
if (size?.mediaFiles) {
|
|
107
|
+
files.push(... size.mediaFiles.filter((x) => x.isPreview));
|
|
108
|
+
}
|
|
109
|
+
this.selectedFile = files[0];
|
|
110
|
+
return files;
|
|
111
|
+
}
|
|
112
|
+
|
|
91
113
|
async init() {
|
|
92
114
|
|
|
93
115
|
this.renderer = <div>
|
|
@@ -110,25 +132,32 @@ export default class StoreItemDetailView extends AtomControl {
|
|
|
110
132
|
specifications ? FetchBuilder.get(signedUrl(specifications)).responseAsText() : Promise.resolve("")
|
|
111
133
|
]);
|
|
112
134
|
|
|
113
|
-
this.
|
|
135
|
+
this.selectedSize = this.model.sizes?.[0] ?? null;
|
|
136
|
+
this.selectedVarient = this.model.variants?.[0] ?? null;
|
|
137
|
+
|
|
138
|
+
this.renderer = <div
|
|
139
|
+
class={css}
|
|
140
|
+
images={Bind.oneWay(() => this.getFiles(this.model, this.selectedVarient, this.selectedSize))}>
|
|
114
141
|
<h2>{this.model.name}</h2>
|
|
115
142
|
|
|
116
143
|
<section class="photos">
|
|
117
|
-
<
|
|
118
|
-
{
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
144
|
+
<AtomRepeater
|
|
145
|
+
selectOnClick={true}
|
|
146
|
+
items={Bind.oneWay(() => this.images)}
|
|
147
|
+
selectedItem={Bind.twoWaysImmediate(() => this.selectedFile)}
|
|
148
|
+
itemRenderer={(x) => <img
|
|
149
|
+
class="thumbnail"
|
|
150
|
+
data-click-event="change-image"
|
|
151
|
+
data-id={x.appFileID}
|
|
152
|
+
src={signedImageUrl(x, 150)} />}
|
|
153
|
+
class="thumbnails"/>
|
|
125
154
|
<PinchZoomView
|
|
126
155
|
class="preview"
|
|
127
156
|
source={Bind.oneWay(() => signedImageUrl(this.selectedFile, 720))}
|
|
128
157
|
/>
|
|
129
158
|
</section>
|
|
130
159
|
|
|
131
|
-
<section>
|
|
160
|
+
<section data-layout="vertical-flex">
|
|
132
161
|
|
|
133
162
|
{ /* Display Offers */ }
|
|
134
163
|
{
|
|
@@ -143,6 +172,18 @@ export default class StoreItemDetailView extends AtomControl {
|
|
|
143
172
|
<label text={ formatPrice(price) }/>
|
|
144
173
|
</p>
|
|
145
174
|
<button>Buy</button>
|
|
175
|
+
|
|
176
|
+
{ this.model.sizes?.length && <ToggleButtonBar
|
|
177
|
+
items={this.model.sizes}
|
|
178
|
+
selectedItem={Bind.twoWaysImmediate(() => this.selectedSize)}
|
|
179
|
+
itemRenderer={(x: IStoreItem) => <div data-item-type="toggle-button"><label text={x.name}/></div>}
|
|
180
|
+
/>}
|
|
181
|
+
{ this.model.variants?.length && <ToggleButtonBar
|
|
182
|
+
items={this.model.variants}
|
|
183
|
+
selectedItem={Bind.twoWaysImmediate(() => this.selectedVarient)}
|
|
184
|
+
itemRenderer={(x: IStoreItem) => <div data-item-type="toggle-button"><label text={x.name}/></div>}
|
|
185
|
+
/>}
|
|
186
|
+
|
|
146
187
|
</section>
|
|
147
188
|
|
|
148
189
|
{/* This should be html */}
|
|
@@ -165,6 +206,8 @@ export default class StoreItemDetailView extends AtomControl {
|
|
|
165
206
|
.include((x) => [
|
|
166
207
|
x.storeItemPrices,
|
|
167
208
|
x.storeItemTags.forEach((t) => t.tag),
|
|
209
|
+
x.variants.forEach((t) => [ t.mediaFiles, t.storeItemPrices]),
|
|
210
|
+
x.sizes.forEach((t) => [ t.mediaFiles, t.storeItemPrices]),
|
|
168
211
|
x.mediaFiles,
|
|
169
212
|
])
|
|
170
213
|
.firstOrDefault();
|