aport-tools 4.2.6 → 4.2.7

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.js CHANGED
@@ -1,9 +1,29 @@
1
- /*! aport-tools v4.2.6 | ISC */
1
+ /*! aport-tools v4.2.7 | ISC */
2
2
  'use strict';
3
3
 
4
4
  var React = require('react');
5
5
  var reactNative = require('react-native');
6
6
  var aportThemes = require('aport-themes');
7
+ var ImagePicker = require('expo-image-picker');
8
+
9
+ function _interopNamespaceDefault(e) {
10
+ var n = Object.create(null);
11
+ if (e) {
12
+ Object.keys(e).forEach(function (k) {
13
+ if (k !== 'default') {
14
+ var d = Object.getOwnPropertyDescriptor(e, k);
15
+ Object.defineProperty(n, k, d.get ? d : {
16
+ enumerable: true,
17
+ get: function () { return e[k]; }
18
+ });
19
+ }
20
+ });
21
+ }
22
+ n.default = e;
23
+ return Object.freeze(n);
24
+ }
25
+
26
+ var ImagePicker__namespace = /*#__PURE__*/_interopNamespaceDefault(ImagePicker);
7
27
 
8
28
  /******************************************************************************
9
29
  Copyright (c) Microsoft Corporation.
@@ -232,23 +252,23 @@ var ErrorList = function ErrorList(_a) {
232
252
  var theme = React.useContext(aportThemes.ThemeContext).theme;
233
253
  var colors = theme.colors;
234
254
  return /*#__PURE__*/React.createElement(reactNative.View, {
235
- style: styles$6.container
255
+ style: styles$7.container
236
256
  }, errors.map(function (error, index) {
237
257
  return /*#__PURE__*/React.createElement(reactNative.View, {
238
258
  key: index,
239
- style: styles$6.errorItem
259
+ style: styles$7.errorItem
240
260
  }, /*#__PURE__*/React.createElement(Text, {
241
- style: [styles$6.bullet, {
261
+ style: [styles$7.bullet, {
242
262
  color: colors.error.hex
243
263
  }]
244
264
  }, "\u2022"), /*#__PURE__*/React.createElement(Text, {
245
- style: [styles$6.errorText, {
265
+ style: [styles$7.errorText, {
246
266
  color: colors.error.hex
247
267
  }]
248
268
  }, error));
249
269
  }));
250
270
  };
251
- var styles$6 = reactNative.StyleSheet.create({
271
+ var styles$7 = reactNative.StyleSheet.create({
252
272
  container: {
253
273
  marginTop: 4
254
274
  },
@@ -326,13 +346,13 @@ var Input = function Input(_a) {
326
346
  setFormValue(name, formattedText);
327
347
  };
328
348
  return /*#__PURE__*/React.createElement(reactNative.View, {
329
- style: styles$5.container
349
+ style: styles$6.container
330
350
  }, /*#__PURE__*/React.createElement(Text, {
331
- style: [styles$5.label, {
351
+ style: [styles$6.label, {
332
352
  color: colors.text.hex
333
353
  }]
334
354
  }, label), /*#__PURE__*/React.createElement(reactNative.TextInput, __assign({
335
- style: [styles$5.input, {
355
+ style: [styles$6.input, {
336
356
  backgroundColor: colors.body.hex,
337
357
  borderColor: formErrors[name] ? colors.error.hex : "#CCC",
338
358
  color: colors.text.hex
@@ -345,7 +365,7 @@ var Input = function Input(_a) {
345
365
  errors: formErrors[name]
346
366
  })));
347
367
  };
348
- var styles$5 = reactNative.StyleSheet.create({
368
+ var styles$6 = reactNative.StyleSheet.create({
349
369
  container: {
350
370
  marginBottom: 16
351
371
  },
@@ -376,11 +396,11 @@ var TextArea = function TextArea(_a) {
376
396
  setFormValue(name, text);
377
397
  };
378
398
  return /*#__PURE__*/React.createElement(reactNative.View, {
379
- style: styles$4.container
399
+ style: styles$5.container
380
400
  }, /*#__PURE__*/React.createElement(Text, {
381
- style: styles$4.label
401
+ style: styles$5.label
382
402
  }, label), /*#__PURE__*/React.createElement(reactNative.TextInput, __assign({
383
- style: [styles$4.textArea, style],
403
+ style: [styles$5.textArea, style],
384
404
  value: formValues[name] || '',
385
405
  onChangeText: handleChange,
386
406
  placeholder: label,
@@ -393,7 +413,7 @@ var TextArea = function TextArea(_a) {
393
413
  errors: formErrors[name]
394
414
  })));
395
415
  };
396
- var styles$4 = reactNative.StyleSheet.create({
416
+ var styles$5 = reactNative.StyleSheet.create({
397
417
  container: {
398
418
  marginBottom: 16
399
419
  },
@@ -422,12 +442,12 @@ var Label = function Label(_a) {
422
442
  var theme = React.useContext(aportThemes.ThemeContext).theme;
423
443
  var colors = theme.colors;
424
444
  return /*#__PURE__*/React.createElement(Text, {
425
- style: [styles$3.label, style, {
445
+ style: [styles$4.label, style, {
426
446
  color: colors.text.hex
427
447
  }]
428
448
  }, text);
429
449
  };
430
- var styles$3 = reactNative.StyleSheet.create({
450
+ var styles$4 = reactNative.StyleSheet.create({
431
451
  label: {
432
452
  marginBottom: 4,
433
453
  fontWeight: '500'
@@ -540,9 +560,9 @@ var InputList = function InputList(_a) {
540
560
  });
541
561
  };
542
562
  return /*#__PURE__*/React.createElement(reactNative.View, {
543
- style: [styles$2.container, style]
563
+ style: [styles$3.container, style]
544
564
  }, /*#__PURE__*/React.createElement(reactNative.TouchableOpacity, {
545
- style: styles$2.inputContainer,
565
+ style: styles$3.inputContainer,
546
566
  onPress: toggleDropdown,
547
567
  disabled: disabled
548
568
  }, /*#__PURE__*/React.createElement(reactNative.Text, {
@@ -554,10 +574,10 @@ var InputList = function InputList(_a) {
554
574
  transparent: true,
555
575
  animationType: "fade"
556
576
  }, /*#__PURE__*/React.createElement(reactNative.Pressable, {
557
- style: styles$2.overlay,
577
+ style: styles$3.overlay,
558
578
  onPress: handleCloseDropdown
559
579
  }), /*#__PURE__*/React.createElement(reactNative.View, {
560
- style: [styles$2.dropdownContainer, {
580
+ style: [styles$3.dropdownContainer, {
561
581
  backgroundColor: colors.body.hex
562
582
  }]
563
583
  }, /*#__PURE__*/React.createElement(reactNative.FlatList, {
@@ -575,7 +595,7 @@ var InputList = function InputList(_a) {
575
595
  onPress: function onPress() {
576
596
  return handleSelectOption(item);
577
597
  },
578
- style: [styles$2.optionItem, isSelected ? {
598
+ style: [styles$3.optionItem, isSelected ? {
579
599
  backgroundColor: colors.primary.hex
580
600
  } : {}, isDisabled ? {
581
601
  backgroundColor: colors.placeHolder.hex
@@ -586,18 +606,18 @@ var InputList = function InputList(_a) {
586
606
  color: colors.background.hex
587
607
  } : {
588
608
  color: colors.text.hex
589
- }, isDisabled ? styles$2.disabledText : {}]
609
+ }, isDisabled ? styles$3.disabledText : {}]
590
610
  }, item.label));
591
611
  },
592
612
  ItemSeparatorComponent: function ItemSeparatorComponent() {
593
613
  return separator ? /*#__PURE__*/React.createElement(reactNative.View, {
594
- style: styles$2.separator
614
+ style: styles$3.separator
595
615
  }) : null;
596
616
  },
597
617
  scrollEnabled: !closeOnScroll
598
618
  }))));
599
619
  };
600
- var styles$2 = reactNative.StyleSheet.create({
620
+ var styles$3 = reactNative.StyleSheet.create({
601
621
  container: {
602
622
  padding: 8
603
623
  },
@@ -635,6 +655,175 @@ var styles$2 = reactNative.StyleSheet.create({
635
655
  }
636
656
  });
637
657
 
658
+ // src/components/InputAttach.tsx
659
+ var InputAttach = function InputAttach(_a) {
660
+ var name = _a.name,
661
+ _b = _a.type,
662
+ type = _b === void 0 ? ["png", "jpg", "jpeg"] : _b,
663
+ _c = _a.amount,
664
+ amount = _c === void 0 ? 1 : _c,
665
+ _d = _a.disabled,
666
+ disabled = _d === void 0 ? false : _d,
667
+ _e = _a.placeholder,
668
+ placeholder = _e === void 0 ? "Upload an image" : _e;
669
+ var _f = useFormContext(),
670
+ setFormValue = _f.setFormValue;
671
+ _f.formValues;
672
+ var errors = _f.errors;
673
+ var _g = React.useState([]),
674
+ selectedFiles = _g[0],
675
+ setSelectedFiles = _g[1];
676
+ var pickImage = function pickImage() {
677
+ return __awaiter(void 0, void 0, void 0, function () {
678
+ var permissionResult, result, selectedAssets, newFiles, invalidFiles, updatedFiles;
679
+ return __generator(this, function (_a) {
680
+ switch (_a.label) {
681
+ case 0:
682
+ if (disabled) return [2 /*return*/];
683
+ return [4 /*yield*/, ImagePicker__namespace.requestMediaLibraryPermissionsAsync()];
684
+ case 1:
685
+ permissionResult = _a.sent();
686
+ if (!permissionResult.granted) {
687
+ reactNative.Alert.alert("Permission Required", "We need access to your photos to upload images.");
688
+ return [2 /*return*/];
689
+ }
690
+ return [4 /*yield*/, ImagePicker__namespace.launchImageLibraryAsync({
691
+ mediaTypes: ImagePicker__namespace.MediaTypeOptions.Images,
692
+ allowsMultipleSelection: amount > 1,
693
+ quality: 1
694
+ })];
695
+ case 2:
696
+ result = _a.sent();
697
+ if (!result.canceled) {
698
+ selectedAssets = result.assets || [result];
699
+ newFiles = selectedAssets.map(function (asset) {
700
+ return {
701
+ uri: asset.uri,
702
+ name: asset.fileName || "unknown.jpg",
703
+ type: asset.mimeType || "image/jpeg"
704
+ };
705
+ });
706
+ invalidFiles = newFiles.filter(function (file) {
707
+ return !type.some(function (ext) {
708
+ return file.name.toLowerCase().endsWith(ext);
709
+ });
710
+ });
711
+ if (invalidFiles.length > 0) {
712
+ reactNative.Alert.alert("Invalid File Type", "Please upload files of type: ".concat(type.join(", ")));
713
+ return [2 /*return*/];
714
+ }
715
+ // Check max amount
716
+ if (selectedFiles.length + newFiles.length > amount) {
717
+ reactNative.Alert.alert("Limit Exceeded", "You can upload up to ".concat(amount, " files."));
718
+ return [2 /*return*/];
719
+ }
720
+ updatedFiles = __spreadArray(__spreadArray([], selectedFiles, true), newFiles, true).slice(0, amount);
721
+ setSelectedFiles(updatedFiles);
722
+ setFormValue(name, updatedFiles); // Update form context
723
+ }
724
+ return [2 /*return*/];
725
+ }
726
+ });
727
+ });
728
+ };
729
+ var removeFile = function removeFile(index) {
730
+ var updatedFiles = selectedFiles.filter(function (_, i) {
731
+ return i !== index;
732
+ });
733
+ setSelectedFiles(updatedFiles);
734
+ setFormValue(name, updatedFiles); // Update form context
735
+ };
736
+ return /*#__PURE__*/React.createElement(reactNative.View, {
737
+ style: styles$2.container
738
+ }, /*#__PURE__*/React.createElement(reactNative.Text, {
739
+ style: styles$2.label
740
+ }, placeholder), /*#__PURE__*/React.createElement(reactNative.View, {
741
+ style: styles$2.fileContainer
742
+ }, selectedFiles.map(function (file, index) {
743
+ return /*#__PURE__*/React.createElement(reactNative.View, {
744
+ key: index,
745
+ style: styles$2.fileItem
746
+ }, /*#__PURE__*/React.createElement(reactNative.Image, {
747
+ source: {
748
+ uri: file.uri
749
+ },
750
+ style: styles$2.imagePreview
751
+ }), /*#__PURE__*/React.createElement(reactNative.TouchableOpacity, {
752
+ onPress: function onPress() {
753
+ return removeFile(index);
754
+ },
755
+ style: styles$2.removeButton
756
+ }, /*#__PURE__*/React.createElement(reactNative.Text, {
757
+ style: styles$2.removeButtonText
758
+ }, "X")));
759
+ }), selectedFiles.length < amount && (/*#__PURE__*/React.createElement(reactNative.TouchableOpacity, {
760
+ onPress: pickImage,
761
+ style: styles$2.addButton,
762
+ disabled: disabled
763
+ }, /*#__PURE__*/React.createElement(reactNative.Text, {
764
+ style: styles$2.addButtonText
765
+ }, "+")))), errors[name] && /*#__PURE__*/React.createElement(reactNative.Text, {
766
+ style: styles$2.error
767
+ }, errors[name].join(", ")));
768
+ };
769
+ var styles$2 = reactNative.StyleSheet.create({
770
+ container: {
771
+ marginVertical: 10
772
+ },
773
+ label: {
774
+ fontSize: 16,
775
+ marginBottom: 5,
776
+ color: "#333"
777
+ },
778
+ fileContainer: {
779
+ flexDirection: "row",
780
+ flexWrap: "wrap",
781
+ gap: 10
782
+ },
783
+ fileItem: {
784
+ position: "relative",
785
+ width: 100,
786
+ height: 100,
787
+ marginRight: 10
788
+ },
789
+ imagePreview: {
790
+ width: "100%",
791
+ height: "100%",
792
+ borderRadius: 5
793
+ },
794
+ removeButton: {
795
+ position: "absolute",
796
+ top: 0,
797
+ right: 0,
798
+ backgroundColor: "red",
799
+ width: 20,
800
+ height: 20,
801
+ justifyContent: "center",
802
+ alignItems: "center",
803
+ borderRadius: 10
804
+ },
805
+ removeButtonText: {
806
+ color: "#fff",
807
+ fontWeight: "bold"
808
+ },
809
+ addButton: {
810
+ width: 100,
811
+ height: 100,
812
+ justifyContent: "center",
813
+ alignItems: "center",
814
+ backgroundColor: "#f0f0f0",
815
+ borderRadius: 5
816
+ },
817
+ addButtonText: {
818
+ fontSize: 24,
819
+ color: "#aaa"
820
+ },
821
+ error: {
822
+ color: "red",
823
+ marginTop: 5
824
+ }
825
+ });
826
+
638
827
  // src/components/Button.tsx
639
828
  /**
640
829
  * Determines the styles based on the button type and whether it is disabled.
@@ -818,6 +1007,7 @@ exports.Card = Card;
818
1007
  exports.ErrorList = ErrorList;
819
1008
  exports.Form = Form;
820
1009
  exports.Input = Input;
1010
+ exports.InputAttach = InputAttach;
821
1011
  exports.InputList = InputList;
822
1012
  exports.Label = Label;
823
1013
  exports.Text = Text;