@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@social-mail/social-mail-client",
3
- "version": "1.2.329",
3
+ "version": "1.2.331",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -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 = "1", 2: itemID = "5" } = /^\/store\/([^\/]+)\/([^\/]+)\//.exec(url?.pathname) ?? {} as any;
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.renderer = <div class={css}>
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
- <div class="thumbnails">
118
- { ... images.map((x) =>
119
- <img
120
- class="thumbnail"
121
- data-click-event="change-image"
122
- data-id={x.appFileID}
123
- src={signedImageUrl(x, 150)} />)}
124
- </div>
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();