@woopze/react-native-sdk 0.1.0

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 (58) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +66 -0
  3. package/dist/assets/cam-icon.d.ts +2 -0
  4. package/dist/assets/cam-icon.js +7 -0
  5. package/dist/assets/cam-icon.js.map +1 -0
  6. package/dist/assets/cam-icon.png +0 -0
  7. package/dist/assets/chevron-icon.d.ts +2 -0
  8. package/dist/assets/chevron-icon.js +7 -0
  9. package/dist/assets/chevron-icon.js.map +1 -0
  10. package/dist/assets/chevron-icon.png +0 -0
  11. package/dist/assets/close-icon.d.ts +2 -0
  12. package/dist/assets/close-icon.js +7 -0
  13. package/dist/assets/close-icon.js.map +1 -0
  14. package/dist/assets/close-icon.png +0 -0
  15. package/dist/assets/filter-icon.d.ts +2 -0
  16. package/dist/assets/filter-icon.js +7 -0
  17. package/dist/assets/filter-icon.js.map +1 -0
  18. package/dist/assets/filter-icon.png +0 -0
  19. package/dist/assets/search-icon.d.ts +2 -0
  20. package/dist/assets/search-icon.js +7 -0
  21. package/dist/assets/search-icon.js.map +1 -0
  22. package/dist/assets/search-icon.png +0 -0
  23. package/dist/cam-icon-II34AEJC.png +0 -0
  24. package/dist/chevron-icon-7YWXX66A.png +0 -0
  25. package/dist/close-icon-VE65QPHD.png +0 -0
  26. package/dist/comments/AllCommentsModal.d.ts +11 -0
  27. package/dist/comments/AllCommentsModal.js +84 -0
  28. package/dist/comments/AllCommentsModal.js.map +1 -0
  29. package/dist/comments/index.d.ts +9 -0
  30. package/dist/comments/index.js +67 -0
  31. package/dist/comments/index.js.map +1 -0
  32. package/dist/components/ProductCard.d.ts +16 -0
  33. package/dist/components/ProductCard.js +123 -0
  34. package/dist/components/ProductCard.js.map +1 -0
  35. package/dist/components/SearchInput.d.ts +16 -0
  36. package/dist/components/SearchInput.js +186 -0
  37. package/dist/components/SearchInput.js.map +1 -0
  38. package/dist/constants.d.ts +7 -0
  39. package/dist/constants.js +31 -0
  40. package/dist/constants.js.map +1 -0
  41. package/dist/filter-icon-TNVJNKA2.png +0 -0
  42. package/dist/index.d.ts +18 -0
  43. package/dist/index.js +22 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/search/FilterModal.d.ts +28 -0
  46. package/dist/search/FilterModal.js +444 -0
  47. package/dist/search/FilterModal.js.map +1 -0
  48. package/dist/search/index.d.ts +39 -0
  49. package/dist/search/index.js +652 -0
  50. package/dist/search/index.js.map +1 -0
  51. package/dist/search-icon-6SVD6L4Q.png +0 -0
  52. package/dist/tracking.d.ts +11 -0
  53. package/dist/tracking.js +79 -0
  54. package/dist/tracking.js.map +1 -0
  55. package/dist/types.d.ts +14 -0
  56. package/dist/types.js +4 -0
  57. package/dist/types.js.map +1 -0
  58. package/package.json +47 -0
@@ -0,0 +1,444 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var reactNative = require('react-native');
5
+ var reactNativeSlider = require('@miblanchard/react-native-slider');
6
+ var reactNativeSafeAreaContext = require('react-native-safe-area-context');
7
+
8
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
+
10
+ var React__default = /*#__PURE__*/_interopDefault(React);
11
+
12
+ const clamp = (value, min, max) => Math.min(Math.max(value, min), max);
13
+ function FilterModal({
14
+ visible,
15
+ onClose,
16
+ facetDistribution,
17
+ facetConfig,
18
+ defaultMinPrice,
19
+ defaultMaxPrice,
20
+ appliedFilters,
21
+ onApply,
22
+ onReset
23
+ }) {
24
+ const { bottom } = reactNativeSafeAreaContext.useSafeAreaInsets();
25
+ const [isPriceExpanded, setIsPriceExpanded] = React.useState(true);
26
+ const [isCategoryExpanded, setIsCategoryExpanded] = React.useState(true);
27
+ const [expandedFacetSections, setExpandedFacetSections] = React.useState({});
28
+ const [draftCategories, setDraftCategories] = React.useState([]);
29
+ const [draftFacetValues, setDraftFacetValues] = React.useState({});
30
+ const [draftMinPrice, setDraftMinPrice] = React.useState(0);
31
+ const [draftMaxPrice, setDraftMaxPrice] = React.useState(0);
32
+ const [minInputText, setMinInputText] = React.useState("");
33
+ const [maxInputText, setMaxInputText] = React.useState("");
34
+ const categoryOptions = React.useMemo(() => Object.entries(facetDistribution.product_group || {}), [facetDistribution.product_group]);
35
+ const dynamicFacetSections = React.useMemo(
36
+ () => Object.entries(facetDistribution).filter(([facetKey, facetValues]) => {
37
+ var _a;
38
+ if (facetKey === "product_group" || facetKey === "price" || facetKey === "stock" || facetKey === "variations") return false;
39
+ if (facetKey.startsWith("variations.")) return false;
40
+ if (((_a = facetConfig[facetKey]) == null ? void 0 : _a.visible) === false) return false;
41
+ return Object.keys(facetValues || {}).length > 0;
42
+ }).sort(([a], [b]) => {
43
+ var _a, _b, _c, _d;
44
+ return ((_b = (_a = facetConfig[a]) == null ? void 0 : _a.order) != null ? _b : 999) - ((_d = (_c = facetConfig[b]) == null ? void 0 : _c.order) != null ? _d : 999);
45
+ }),
46
+ [facetConfig, facetDistribution]
47
+ );
48
+ const hasPriceFacet = defaultMinPrice > 0 && defaultMaxPrice > 0;
49
+ React.useEffect(() => {
50
+ var _a, _b;
51
+ if (!visible) return;
52
+ setDraftCategories(appliedFilters.categories);
53
+ setDraftFacetValues(appliedFilters.facets);
54
+ const nextMin = (_a = appliedFilters.minPrice) != null ? _a : defaultMinPrice;
55
+ const nextMax = (_b = appliedFilters.maxPrice) != null ? _b : defaultMaxPrice;
56
+ setDraftMinPrice(nextMin);
57
+ setDraftMaxPrice(nextMax);
58
+ setMinInputText(String(nextMin));
59
+ setMaxInputText(String(nextMax));
60
+ }, [
61
+ appliedFilters.categories,
62
+ appliedFilters.facets,
63
+ appliedFilters.maxPrice,
64
+ appliedFilters.minPrice,
65
+ defaultMaxPrice,
66
+ defaultMinPrice,
67
+ visible
68
+ ]);
69
+ const toggleCategory = (category) => {
70
+ setDraftCategories((prev) => prev.includes(category) ? prev.filter((item) => item !== category) : [...prev, category]);
71
+ };
72
+ const toggleFacetValue = (facetKey, value) => {
73
+ setDraftFacetValues((prev) => {
74
+ const currentValues = prev[facetKey] || [];
75
+ const nextValues = currentValues.includes(value) ? currentValues.filter((item) => item !== value) : [...currentValues, value];
76
+ if (nextValues.length === 0) {
77
+ const next = { ...prev };
78
+ delete next[facetKey];
79
+ return next;
80
+ }
81
+ return { ...prev, [facetKey]: nextValues };
82
+ });
83
+ };
84
+ const onPriceSliderChange = (values) => {
85
+ if (!Array.isArray(values) || values.length < 2) return;
86
+ const nextMin = Math.round(values[0]);
87
+ const nextMax = Math.round(values[1]);
88
+ setDraftMinPrice(nextMin);
89
+ setDraftMaxPrice(nextMax);
90
+ setMinInputText(String(nextMin));
91
+ setMaxInputText(String(nextMax));
92
+ };
93
+ const onMinPriceInputChange = (text) => {
94
+ const sanitized = text.replace(/[^\d]/g, "");
95
+ setMinInputText(sanitized);
96
+ if (sanitized === "") return;
97
+ const parsed = Number(sanitized);
98
+ if (!Number.isFinite(parsed)) return;
99
+ setDraftMinPrice(clamp(parsed, defaultMinPrice, draftMaxPrice));
100
+ };
101
+ const onMaxPriceInputChange = (text) => {
102
+ const sanitized = text.replace(/[^\d]/g, "");
103
+ setMaxInputText(sanitized);
104
+ if (sanitized === "") return;
105
+ const parsed = Number(sanitized);
106
+ if (!Number.isFinite(parsed)) return;
107
+ setDraftMaxPrice(clamp(parsed, draftMinPrice, defaultMaxPrice));
108
+ };
109
+ const applyDraft = () => {
110
+ const rawMin = minInputText === "" ? defaultMinPrice : Number(minInputText);
111
+ const rawMax = maxInputText === "" ? defaultMaxPrice : Number(maxInputText);
112
+ const nextMin = clamp(Number.isFinite(rawMin) ? rawMin : defaultMinPrice, defaultMinPrice, defaultMaxPrice);
113
+ const nextMax = clamp(Number.isFinite(rawMax) ? rawMax : defaultMaxPrice, nextMin, defaultMaxPrice);
114
+ setDraftMinPrice(nextMin);
115
+ setDraftMaxPrice(nextMax);
116
+ setMinInputText(String(nextMin));
117
+ setMaxInputText(String(nextMax));
118
+ onApply({
119
+ categories: draftCategories,
120
+ facets: draftFacetValues,
121
+ minPrice: nextMin,
122
+ maxPrice: nextMax
123
+ });
124
+ };
125
+ return /* @__PURE__ */ React__default.default.createElement(reactNative.Modal, { visible, animationType: "slide", transparent: true, onRequestClose: onClose }, /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles.modalOverlay }, /* @__PURE__ */ React__default.default.createElement(reactNative.Pressable, { style: styles.modalBackdrop, onPress: onClose }), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: [styles.modalSheet, { paddingBottom: bottom + 8 }] }, /* @__PURE__ */ React__default.default.createElement(reactNative.ScrollView, { showsVerticalScrollIndicator: false }, /* @__PURE__ */ React__default.default.createElement(reactNative.TouchableOpacity, { activeOpacity: 0.7, style: styles.modalSectionHeader, onPress: () => setIsPriceExpanded((prev) => !prev) }, /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: styles.modalSectionTitle }, "Fiyat"), /* @__PURE__ */ React__default.default.createElement(
126
+ reactNative.Image,
127
+ {
128
+ source: require("../assets/chevron-icon.png"),
129
+ style: [
130
+ styles.modalChevron,
131
+ {
132
+ transform: [{ rotateZ: isPriceExpanded ? "270deg" : "0deg" }]
133
+ }
134
+ ]
135
+ }
136
+ )), isPriceExpanded && hasPriceFacet ? /* @__PURE__ */ React__default.default.createElement(React__default.default.Fragment, null, /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles.sliderWrap }, /* @__PURE__ */ React__default.default.createElement(
137
+ reactNativeSlider.Slider,
138
+ {
139
+ value: [draftMinPrice, draftMaxPrice],
140
+ onValueChange: onPriceSliderChange,
141
+ minimumValue: defaultMinPrice,
142
+ maximumValue: defaultMaxPrice,
143
+ step: 1,
144
+ minimumTrackTintColor: "#000",
145
+ maximumTrackTintColor: "#bdbdbd",
146
+ thumbTintColor: "#000",
147
+ trackStyle: styles.sliderTrack,
148
+ thumbStyle: styles.sliderThumb
149
+ }
150
+ )), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles.priceInputsRow }, /* @__PURE__ */ React__default.default.createElement(
151
+ reactNative.TextInput,
152
+ {
153
+ value: minInputText,
154
+ onChangeText: onMinPriceInputChange,
155
+ keyboardType: "number-pad",
156
+ style: styles.priceInput
157
+ }
158
+ ), /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: styles.priceDash }, "-"), /* @__PURE__ */ React__default.default.createElement(
159
+ reactNative.TextInput,
160
+ {
161
+ value: maxInputText,
162
+ onChangeText: onMaxPriceInputChange,
163
+ keyboardType: "number-pad",
164
+ style: styles.priceInput
165
+ }
166
+ ), /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: styles.priceUnit }, "TL")), /* @__PURE__ */ React__default.default.createElement(
167
+ reactNative.TouchableOpacity,
168
+ {
169
+ activeOpacity: 0.7,
170
+ style: styles.applyButton,
171
+ onPress: () => {
172
+ applyDraft();
173
+ onClose();
174
+ }
175
+ },
176
+ /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: styles.applyButtonText }, "Filtrele")
177
+ )) : null, categoryOptions.length > 0 ? /* @__PURE__ */ React__default.default.createElement(React__default.default.Fragment, null, /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles.sectionDivider }), /* @__PURE__ */ React__default.default.createElement(
178
+ reactNative.TouchableOpacity,
179
+ {
180
+ activeOpacity: 0.7,
181
+ style: styles.modalSectionHeader,
182
+ onPress: () => setIsCategoryExpanded((prev) => !prev)
183
+ },
184
+ /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: styles.modalSectionTitle }, "Kategoriler"),
185
+ /* @__PURE__ */ React__default.default.createElement(
186
+ reactNative.Image,
187
+ {
188
+ source: require("../assets/chevron-icon.png"),
189
+ style: [
190
+ styles.modalChevron,
191
+ {
192
+ transform: [{ rotateZ: isCategoryExpanded ? "270deg" : "0deg" }]
193
+ }
194
+ ]
195
+ }
196
+ )
197
+ ), isCategoryExpanded ? /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles.categoryList }, categoryOptions.map(([category, count]) => {
198
+ const checked = draftCategories.includes(category);
199
+ return /* @__PURE__ */ React__default.default.createElement(
200
+ reactNative.TouchableOpacity,
201
+ {
202
+ activeOpacity: 0.7,
203
+ key: category,
204
+ style: styles.categoryRow,
205
+ onPress: () => toggleCategory(category)
206
+ },
207
+ /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: [styles.checkbox, checked && styles.checkboxChecked] }, checked && /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles.checkboxCheckedInner })),
208
+ /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: styles.categoryLabel }, category),
209
+ /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles.countBadge }, /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: styles.countText }, count))
210
+ );
211
+ })) : null) : null, dynamicFacetSections.map(([facetKey, facetValues]) => {
212
+ var _a, _b;
213
+ const isExpanded = (_a = expandedFacetSections[facetKey]) != null ? _a : false;
214
+ const sectionLabel = ((_b = facetConfig[facetKey]) == null ? void 0 : _b.label) || facetKey;
215
+ const options = Object.entries(facetValues);
216
+ return /* @__PURE__ */ React__default.default.createElement(reactNative.View, { key: facetKey }, /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles.sectionDivider }), /* @__PURE__ */ React__default.default.createElement(
217
+ reactNative.TouchableOpacity,
218
+ {
219
+ activeOpacity: 0.7,
220
+ style: styles.modalSectionHeader,
221
+ onPress: () => setExpandedFacetSections((prev) => {
222
+ var _a2;
223
+ return { ...prev, [facetKey]: !((_a2 = prev[facetKey]) != null ? _a2 : false) };
224
+ })
225
+ },
226
+ /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: styles.modalSectionTitle }, sectionLabel),
227
+ /* @__PURE__ */ React__default.default.createElement(
228
+ reactNative.Image,
229
+ {
230
+ source: require("../assets/chevron-icon.png"),
231
+ style: [
232
+ styles.modalChevron,
233
+ {
234
+ transform: [{ rotateZ: isExpanded ? "270deg" : "0deg" }]
235
+ }
236
+ ]
237
+ }
238
+ )
239
+ ), isExpanded ? /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles.categoryList }, options.map(([value, count]) => {
240
+ const checked = (draftFacetValues[facetKey] || []).includes(value);
241
+ return /* @__PURE__ */ React__default.default.createElement(
242
+ reactNative.Pressable,
243
+ {
244
+ key: `${facetKey}-${value}`,
245
+ style: styles.categoryRow,
246
+ onPress: () => toggleFacetValue(facetKey, value)
247
+ },
248
+ /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: [styles.checkbox, checked && styles.checkboxChecked] }, checked && /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles.checkboxCheckedInner })),
249
+ /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: styles.categoryLabel }, value),
250
+ /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles.countBadge }, /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: styles.countText }, count))
251
+ );
252
+ })) : null);
253
+ })), /* @__PURE__ */ React__default.default.createElement(reactNative.View, { style: styles.modalBottomActions }, /* @__PURE__ */ React__default.default.createElement(
254
+ reactNative.TouchableOpacity,
255
+ {
256
+ activeOpacity: 0.7,
257
+ style: styles.resetButton,
258
+ onPress: () => {
259
+ onReset();
260
+ onClose();
261
+ }
262
+ },
263
+ /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: styles.resetButtonText }, "Temizle")
264
+ ), /* @__PURE__ */ React__default.default.createElement(
265
+ reactNative.TouchableOpacity,
266
+ {
267
+ activeOpacity: 0.7,
268
+ style: styles.showProductsButton,
269
+ onPress: () => {
270
+ applyDraft();
271
+ onClose();
272
+ }
273
+ },
274
+ /* @__PURE__ */ React__default.default.createElement(reactNative.Text, { style: styles.showProductsButtonText }, "\xDCR\xDCNLER\u0130 G\xD6R")
275
+ )))));
276
+ }
277
+ const styles = reactNative.StyleSheet.create({
278
+ modalOverlay: {
279
+ flex: 1,
280
+ justifyContent: "flex-end"
281
+ },
282
+ modalBackdrop: {
283
+ ...reactNative.StyleSheet.absoluteFillObject,
284
+ backgroundColor: "rgba(0,0,0,0.52)"
285
+ },
286
+ modalSheet: {
287
+ backgroundColor: "#fff",
288
+ maxHeight: "78%",
289
+ borderTopLeftRadius: 0,
290
+ borderTopRightRadius: 0,
291
+ paddingHorizontal: 18,
292
+ paddingTop: 18,
293
+ paddingBottom: 14
294
+ },
295
+ modalSectionHeader: {
296
+ flexDirection: "row",
297
+ alignItems: "center",
298
+ justifyContent: "space-between",
299
+ paddingVertical: 8
300
+ },
301
+ modalSectionTitle: {
302
+ fontSize: 14,
303
+ color: "#333",
304
+ fontWeight: "600"
305
+ },
306
+ modalChevron: {
307
+ height: 10,
308
+ width: 10
309
+ },
310
+ sliderWrap: {
311
+ marginTop: 8,
312
+ marginBottom: 14,
313
+ paddingHorizontal: 4
314
+ },
315
+ sliderTrack: {
316
+ height: 4,
317
+ borderRadius: 2
318
+ },
319
+ sliderThumb: {
320
+ width: 24,
321
+ height: 24,
322
+ borderRadius: 12,
323
+ borderWidth: 2,
324
+ borderColor: "#fff"
325
+ },
326
+ priceInputsRow: {
327
+ flexDirection: "row",
328
+ alignItems: "center",
329
+ marginBottom: 18
330
+ },
331
+ priceInput: {
332
+ flex: 1,
333
+ borderWidth: 1,
334
+ borderColor: "#cfcfcf",
335
+ borderRadius: 6,
336
+ backgroundColor: "#fff",
337
+ textAlign: "center",
338
+ fontSize: 15,
339
+ color: "#111",
340
+ paddingVertical: 6
341
+ },
342
+ priceDash: {
343
+ fontSize: 18,
344
+ color: "#555",
345
+ marginHorizontal: 14
346
+ },
347
+ priceUnit: {
348
+ fontSize: 13,
349
+ color: "#8a8a8a",
350
+ marginLeft: 8
351
+ },
352
+ applyButton: {
353
+ backgroundColor: "#000",
354
+ height: 34,
355
+ alignItems: "center",
356
+ justifyContent: "center"
357
+ },
358
+ applyButtonText: {
359
+ color: "#fff",
360
+ fontSize: 13,
361
+ fontWeight: "600"
362
+ },
363
+ sectionDivider: {
364
+ height: 1,
365
+ backgroundColor: "#ddd",
366
+ marginVertical: 10
367
+ },
368
+ categoryList: {
369
+ marginTop: 6,
370
+ marginBottom: 8,
371
+ gap: 12
372
+ },
373
+ categoryRow: {
374
+ flexDirection: "row",
375
+ alignItems: "center"
376
+ },
377
+ checkbox: {
378
+ width: 16,
379
+ height: 16,
380
+ borderWidth: 1,
381
+ borderColor: "#ccc",
382
+ borderRadius: 2,
383
+ backgroundColor: "#fff",
384
+ marginRight: 8,
385
+ alignItems: "center",
386
+ justifyContent: "center"
387
+ },
388
+ checkboxChecked: {
389
+ borderColor: "#111"
390
+ },
391
+ checkboxCheckedInner: {
392
+ backgroundColor: "black",
393
+ height: 9,
394
+ width: 9
395
+ },
396
+ categoryLabel: {
397
+ flex: 1,
398
+ fontSize: 15,
399
+ color: "#3a3a3a"
400
+ },
401
+ countBadge: {
402
+ borderRadius: 12,
403
+ paddingHorizontal: 8,
404
+ paddingVertical: 2,
405
+ backgroundColor: "#f0f0f0",
406
+ alignItems: "center"
407
+ },
408
+ countText: {
409
+ fontSize: 11,
410
+ color: "#999",
411
+ fontWeight: "400"
412
+ },
413
+ modalBottomActions: {
414
+ marginTop: 12,
415
+ gap: 10
416
+ },
417
+ resetButton: {
418
+ height: 42,
419
+ alignItems: "center",
420
+ justifyContent: "center",
421
+ borderWidth: 1,
422
+ borderColor: "#1f1f1f"
423
+ },
424
+ resetButtonText: {
425
+ fontSize: 14,
426
+ color: "#1f1f1f",
427
+ fontWeight: "600"
428
+ },
429
+ showProductsButton: {
430
+ height: 48,
431
+ backgroundColor: "#000",
432
+ alignItems: "center",
433
+ justifyContent: "center"
434
+ },
435
+ showProductsButtonText: {
436
+ color: "#fff",
437
+ fontSize: 14,
438
+ fontWeight: "700"
439
+ }
440
+ });
441
+
442
+ module.exports = FilterModal;
443
+ //# sourceMappingURL=FilterModal.js.map
444
+ //# sourceMappingURL=FilterModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/search/FilterModal.tsx"],"names":["useSafeAreaInsets","useState","useMemo","useEffect","React","Modal","View","Pressable","ScrollView","TouchableOpacity","Text","Image","Slider","TextInput","_a","StyleSheet"],"mappings":"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","file":"FilterModal.js","sourcesContent":["import React, {useEffect, useMemo, useState} from 'react';\nimport {Image, Modal, Pressable, ScrollView, StyleSheet, Text, TextInput, TouchableOpacity, View} from 'react-native';\nimport {Slider} from '@miblanchard/react-native-slider';\nimport {useSafeAreaInsets} from 'react-native-safe-area-context';\n\ntype FacetConfigItem = {\n type: string;\n label: string;\n order: number;\n visible: boolean;\n};\n\nexport type AppliedFilters = {\n categories: string[];\n facets: Record<string, string[]>;\n minPrice: number | null;\n maxPrice: number | null;\n};\n\ntype FilterModalProps = {\n visible: boolean;\n onClose: () => void;\n facetDistribution: Record<string, Record<string, number>>;\n facetConfig: Record<string, FacetConfigItem>;\n defaultMinPrice: number;\n defaultMaxPrice: number;\n appliedFilters: AppliedFilters;\n onApply: (filters: AppliedFilters) => void;\n onReset: () => void;\n};\n\nconst clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);\n\nexport default function FilterModal({\n visible,\n onClose,\n facetDistribution,\n facetConfig,\n defaultMinPrice,\n defaultMaxPrice,\n appliedFilters,\n onApply,\n onReset,\n}: FilterModalProps) {\n const {bottom} = useSafeAreaInsets();\n const [isPriceExpanded, setIsPriceExpanded] = useState(true);\n const [isCategoryExpanded, setIsCategoryExpanded] = useState(true);\n const [expandedFacetSections, setExpandedFacetSections] = useState<Record<string, boolean>>({});\n const [draftCategories, setDraftCategories] = useState<string[]>([]);\n const [draftFacetValues, setDraftFacetValues] = useState<Record<string, string[]>>({});\n const [draftMinPrice, setDraftMinPrice] = useState(0);\n const [draftMaxPrice, setDraftMaxPrice] = useState(0);\n const [minInputText, setMinInputText] = useState('');\n const [maxInputText, setMaxInputText] = useState('');\n\n const categoryOptions = useMemo(() => Object.entries(facetDistribution.product_group || {}), [facetDistribution.product_group]);\n const dynamicFacetSections = useMemo(\n () =>\n Object.entries(facetDistribution)\n .filter(([facetKey, facetValues]) => {\n if (facetKey === 'product_group' || facetKey === 'price' || facetKey === 'stock' || facetKey === 'variations') return false;\n if (facetKey.startsWith('variations.')) return false;\n if (facetConfig[facetKey]?.visible === false) return false;\n return Object.keys(facetValues || {}).length > 0;\n })\n .sort(([a], [b]) => (facetConfig[a]?.order ?? 999) - (facetConfig[b]?.order ?? 999)),\n [facetConfig, facetDistribution],\n );\n const hasPriceFacet = defaultMinPrice > 0 && defaultMaxPrice > 0;\n\n useEffect(() => {\n if (!visible) return;\n\n setDraftCategories(appliedFilters.categories);\n setDraftFacetValues(appliedFilters.facets);\n const nextMin = appliedFilters.minPrice ?? defaultMinPrice;\n const nextMax = appliedFilters.maxPrice ?? defaultMaxPrice;\n setDraftMinPrice(nextMin);\n setDraftMaxPrice(nextMax);\n setMinInputText(String(nextMin));\n setMaxInputText(String(nextMax));\n }, [\n appliedFilters.categories,\n appliedFilters.facets,\n appliedFilters.maxPrice,\n appliedFilters.minPrice,\n defaultMaxPrice,\n defaultMinPrice,\n visible,\n ]);\n\n const toggleCategory = (category: string) => {\n setDraftCategories(prev => (prev.includes(category) ? prev.filter(item => item !== category) : [...prev, category]));\n };\n\n const toggleFacetValue = (facetKey: string, value: string) => {\n setDraftFacetValues(prev => {\n const currentValues = prev[facetKey] || [];\n const nextValues = currentValues.includes(value) ? currentValues.filter(item => item !== value) : [...currentValues, value];\n if (nextValues.length === 0) {\n const next = {...prev};\n delete next[facetKey];\n return next;\n }\n return {...prev, [facetKey]: nextValues};\n });\n };\n\n const onPriceSliderChange = (values: number | number[]) => {\n if (!Array.isArray(values) || values.length < 2) return;\n const nextMin = Math.round(values[0]);\n const nextMax = Math.round(values[1]);\n setDraftMinPrice(nextMin);\n setDraftMaxPrice(nextMax);\n setMinInputText(String(nextMin));\n setMaxInputText(String(nextMax));\n };\n\n const onMinPriceInputChange = (text: string) => {\n const sanitized = text.replace(/[^\\d]/g, '');\n setMinInputText(sanitized);\n\n if (sanitized === '') return;\n const parsed = Number(sanitized);\n if (!Number.isFinite(parsed)) return;\n setDraftMinPrice(clamp(parsed, defaultMinPrice, draftMaxPrice));\n };\n\n const onMaxPriceInputChange = (text: string) => {\n const sanitized = text.replace(/[^\\d]/g, '');\n setMaxInputText(sanitized);\n\n if (sanitized === '') return;\n const parsed = Number(sanitized);\n if (!Number.isFinite(parsed)) return;\n setDraftMaxPrice(clamp(parsed, draftMinPrice, defaultMaxPrice));\n };\n\n const applyDraft = () => {\n const rawMin = minInputText === '' ? defaultMinPrice : Number(minInputText);\n const rawMax = maxInputText === '' ? defaultMaxPrice : Number(maxInputText);\n const nextMin = clamp(Number.isFinite(rawMin) ? rawMin : defaultMinPrice, defaultMinPrice, defaultMaxPrice);\n const nextMax = clamp(Number.isFinite(rawMax) ? rawMax : defaultMaxPrice, nextMin, defaultMaxPrice);\n\n setDraftMinPrice(nextMin);\n setDraftMaxPrice(nextMax);\n setMinInputText(String(nextMin));\n setMaxInputText(String(nextMax));\n\n onApply({\n categories: draftCategories,\n facets: draftFacetValues,\n minPrice: nextMin,\n maxPrice: nextMax,\n });\n };\n\n return (\n <Modal visible={visible} animationType=\"slide\" transparent onRequestClose={onClose}>\n <View style={styles.modalOverlay}>\n <Pressable style={styles.modalBackdrop} onPress={onClose} />\n <View style={[styles.modalSheet, {paddingBottom: bottom + 8}]}>\n <ScrollView showsVerticalScrollIndicator={false}>\n <TouchableOpacity activeOpacity={0.7} style={styles.modalSectionHeader} onPress={() => setIsPriceExpanded(prev => !prev)}>\n <Text style={styles.modalSectionTitle}>Fiyat</Text>\n <Image\n source={require('../assets/chevron-icon.png')}\n style={[\n styles.modalChevron,\n {\n transform: [{rotateZ: isPriceExpanded ? '270deg' : '0deg'}],\n },\n ]}\n />\n </TouchableOpacity>\n\n {isPriceExpanded && hasPriceFacet ? (\n <>\n <View style={styles.sliderWrap}>\n <Slider\n value={[draftMinPrice, draftMaxPrice]}\n onValueChange={onPriceSliderChange}\n minimumValue={defaultMinPrice}\n maximumValue={defaultMaxPrice}\n step={1}\n minimumTrackTintColor=\"#000\"\n maximumTrackTintColor=\"#bdbdbd\"\n thumbTintColor=\"#000\"\n trackStyle={styles.sliderTrack}\n thumbStyle={styles.sliderThumb}\n />\n </View>\n <View style={styles.priceInputsRow}>\n <TextInput\n value={minInputText}\n onChangeText={onMinPriceInputChange}\n keyboardType=\"number-pad\"\n style={styles.priceInput}\n />\n <Text style={styles.priceDash}>-</Text>\n <TextInput\n value={maxInputText}\n onChangeText={onMaxPriceInputChange}\n keyboardType=\"number-pad\"\n style={styles.priceInput}\n />\n <Text style={styles.priceUnit}>TL</Text>\n </View>\n <TouchableOpacity\n activeOpacity={0.7}\n style={styles.applyButton}\n onPress={() => {\n applyDraft();\n onClose();\n }}>\n <Text style={styles.applyButtonText}>Filtrele</Text>\n </TouchableOpacity>\n </>\n ) : null}\n\n {categoryOptions.length > 0 ? (\n <>\n <View style={styles.sectionDivider} />\n <TouchableOpacity\n activeOpacity={0.7}\n style={styles.modalSectionHeader}\n onPress={() => setIsCategoryExpanded(prev => !prev)}>\n <Text style={styles.modalSectionTitle}>Kategoriler</Text>\n <Image\n source={require('../assets/chevron-icon.png')}\n style={[\n styles.modalChevron,\n {\n transform: [{rotateZ: isCategoryExpanded ? '270deg' : '0deg'}],\n },\n ]}\n />\n </TouchableOpacity>\n\n {isCategoryExpanded ? (\n <View style={styles.categoryList}>\n {categoryOptions.map(([category, count]) => {\n const checked = draftCategories.includes(category);\n return (\n <TouchableOpacity\n activeOpacity={0.7}\n key={category}\n style={styles.categoryRow}\n onPress={() => toggleCategory(category)}>\n <View style={[styles.checkbox, checked && styles.checkboxChecked]}>\n {checked && <View style={styles.checkboxCheckedInner} />}\n </View>\n <Text style={styles.categoryLabel}>{category}</Text>\n <View style={styles.countBadge}>\n <Text style={styles.countText}>{count}</Text>\n </View>\n </TouchableOpacity>\n );\n })}\n </View>\n ) : null}\n </>\n ) : null}\n\n {dynamicFacetSections.map(([facetKey, facetValues]) => {\n const isExpanded = expandedFacetSections[facetKey] ?? false;\n const sectionLabel = facetConfig[facetKey]?.label || facetKey;\n const options = Object.entries(facetValues);\n\n return (\n <View key={facetKey}>\n <View style={styles.sectionDivider} />\n <TouchableOpacity\n activeOpacity={0.7}\n style={styles.modalSectionHeader}\n onPress={() => setExpandedFacetSections(prev => ({...prev, [facetKey]: !(prev[facetKey] ?? false)}))}>\n <Text style={styles.modalSectionTitle}>{sectionLabel}</Text>\n <Image\n source={require('../assets/chevron-icon.png')}\n style={[\n styles.modalChevron,\n {\n transform: [{rotateZ: isExpanded ? '270deg' : '0deg'}],\n },\n ]}\n />\n </TouchableOpacity>\n\n {isExpanded ? (\n <View style={styles.categoryList}>\n {options.map(([value, count]) => {\n const checked = (draftFacetValues[facetKey] || []).includes(value);\n return (\n <Pressable\n key={`${facetKey}-${value}`}\n style={styles.categoryRow}\n onPress={() => toggleFacetValue(facetKey, value)}>\n <View style={[styles.checkbox, checked && styles.checkboxChecked]}>\n {checked && <View style={styles.checkboxCheckedInner} />}\n </View>\n <Text style={styles.categoryLabel}>{value}</Text>\n <View style={styles.countBadge}>\n <Text style={styles.countText}>{count}</Text>\n </View>\n </Pressable>\n );\n })}\n </View>\n ) : null}\n </View>\n );\n })}\n </ScrollView>\n\n <View style={styles.modalBottomActions}>\n <TouchableOpacity\n activeOpacity={0.7}\n style={styles.resetButton}\n onPress={() => {\n onReset();\n onClose();\n }}>\n <Text style={styles.resetButtonText}>Temizle</Text>\n </TouchableOpacity>\n <TouchableOpacity\n activeOpacity={0.7}\n style={styles.showProductsButton}\n onPress={() => {\n applyDraft();\n onClose();\n }}>\n <Text style={styles.showProductsButtonText}>ÜRÜNLERİ GÖR</Text>\n </TouchableOpacity>\n </View>\n </View>\n </View>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n modalOverlay: {\n flex: 1,\n justifyContent: 'flex-end',\n },\n modalBackdrop: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0,0,0,0.52)',\n },\n modalSheet: {\n backgroundColor: '#fff',\n maxHeight: '78%',\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n paddingHorizontal: 18,\n paddingTop: 18,\n paddingBottom: 14,\n },\n modalSectionHeader: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingVertical: 8,\n },\n modalSectionTitle: {\n fontSize: 14,\n color: '#333',\n fontWeight: '600',\n },\n modalChevron: {\n height: 10,\n width: 10,\n },\n sliderWrap: {\n marginTop: 8,\n marginBottom: 14,\n paddingHorizontal: 4,\n },\n sliderTrack: {\n height: 4,\n borderRadius: 2,\n },\n sliderThumb: {\n width: 24,\n height: 24,\n borderRadius: 12,\n borderWidth: 2,\n borderColor: '#fff',\n },\n priceInputsRow: {\n flexDirection: 'row',\n alignItems: 'center',\n marginBottom: 18,\n },\n priceInput: {\n flex: 1,\n borderWidth: 1,\n borderColor: '#cfcfcf',\n borderRadius: 6,\n backgroundColor: '#fff',\n textAlign: 'center',\n fontSize: 15,\n color: '#111',\n paddingVertical: 6,\n },\n priceDash: {\n fontSize: 18,\n color: '#555',\n marginHorizontal: 14,\n },\n priceUnit: {\n fontSize: 13,\n color: '#8a8a8a',\n marginLeft: 8,\n },\n applyButton: {\n backgroundColor: '#000',\n height: 34,\n alignItems: 'center',\n justifyContent: 'center',\n },\n applyButtonText: {\n color: '#fff',\n fontSize: 13,\n fontWeight: '600',\n },\n sectionDivider: {\n height: 1,\n backgroundColor: '#ddd',\n marginVertical: 10,\n },\n categoryList: {\n marginTop: 6,\n marginBottom: 8,\n gap: 12,\n },\n categoryRow: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n checkbox: {\n width: 16,\n height: 16,\n borderWidth: 1,\n borderColor: '#ccc',\n borderRadius: 2,\n backgroundColor: '#fff',\n marginRight: 8,\n alignItems: 'center',\n justifyContent: 'center',\n },\n checkboxChecked: {\n borderColor: '#111',\n },\n checkboxCheckedInner: {\n backgroundColor: 'black',\n height: 9,\n width: 9,\n },\n categoryLabel: {\n flex: 1,\n fontSize: 15,\n color: '#3a3a3a',\n },\n countBadge: {\n borderRadius: 12,\n paddingHorizontal: 8,\n paddingVertical: 2,\n backgroundColor: '#f0f0f0',\n alignItems: 'center',\n },\n countText: {\n fontSize: 11,\n color: '#999',\n fontWeight: '400',\n },\n modalBottomActions: {\n marginTop: 12,\n gap: 10,\n },\n resetButton: {\n height: 42,\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: 1,\n borderColor: '#1f1f1f',\n },\n resetButtonText: {\n fontSize: 14,\n color: '#1f1f1f',\n fontWeight: '600',\n },\n showProductsButton: {\n height: 48,\n backgroundColor: '#000',\n alignItems: 'center',\n justifyContent: 'center',\n },\n showProductsButtonText: {\n color: '#fff',\n fontSize: 14,\n fontWeight: '700',\n },\n});\n"]}
@@ -0,0 +1,39 @@
1
+ import React__default from 'react';
2
+ import { ViewStyle } from 'react-native';
3
+
4
+ type WoopzeSearchTheme = {
5
+ backgroundColor: string;
6
+ inputBackgroundColor: string;
7
+ borderColor: string;
8
+ textPrimaryColor: string;
9
+ textSecondaryColor: string;
10
+ mutedTextColor: string;
11
+ chipBackgroundColor: string;
12
+ buttonTextColor: string;
13
+ accentColor: string;
14
+ dangerColor: string;
15
+ iconTintColor: string;
16
+ cameraButtonBackgroundColor: string;
17
+ };
18
+ type WoopzeSearchProps = {
19
+ apiKey: string;
20
+ uid: string;
21
+ originDomain: string;
22
+ onProductPressed?: (product: {
23
+ id: string;
24
+ url: string;
25
+ }) => void;
26
+ onClosePress?: () => void;
27
+ hideHeaderCloseIcon?: boolean;
28
+ hideRecentSearchCloseIcon?: boolean;
29
+ theme?: Partial<WoopzeSearchTheme>;
30
+ containerStyle?: ViewStyle;
31
+ route?: {
32
+ params?: {
33
+ model_code?: string;
34
+ };
35
+ };
36
+ };
37
+ declare function WoopzeSearchScreen({ apiKey, uid, originDomain, onProductPressed, onClosePress, hideHeaderCloseIcon, hideRecentSearchCloseIcon, theme, containerStyle, route, }: WoopzeSearchProps): React__default.JSX.Element;
38
+
39
+ export { type WoopzeSearchProps, type WoopzeSearchTheme, WoopzeSearchScreen as default };