@bigbinary/neeto-image-uploader-frontend 1.5.23 → 1.5.24

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/README.md CHANGED
@@ -2,15 +2,24 @@
2
2
  The `neeto-image-uploader-nano` manages assets across neeto products. The nano exports the `@bigbinary/neeto-image-uploader-frontend` NPM package and `neeto-image-uploader-engine` Rails engine for development.
3
3
 
4
4
  # Contents
5
- 1. [Development with Host Application](#development-with-host-application)
6
- - [Engine](#engine)
7
- - [Installation](#installation)
8
- - [Frontend package](#frontend-package)
9
- - [Installation](#installation-1)
10
- - [Components](#components)
11
- - [Hooks](#hooks)
12
- - [Upload Config](#upload-config)
13
- 2. [Instructions for Publishing](#instructions-for-publishing)
5
+ - [neeto-image-uploader-nano](#neeto-image-uploader-nano)
6
+ - [Contents](#contents)
7
+ - [Development with Host Application](#development-with-host-application)
8
+ - [Engine](#engine)
9
+ - [Installation](#installation)
10
+ - [Frontend package](#frontend-package)
11
+ - [Installation](#installation-1)
12
+ - [Components](#components)
13
+ - [1. `AssetLibrary` (source code)](#1-assetlibrary-source-code)
14
+ - [2. `ImageUploader` (source code)](#2-imageuploader-source-code)
15
+ - [3. `BasicImageUploader` (source code)](#3-basicimageuploader-source-code)
16
+ - [Hooks](#hooks)
17
+ - [1. `useImageUpload` (source code)](#1-useimageupload-source-code)
18
+ - [Import the hook](#import-the-hook)
19
+ - [Invoke the hook](#invoke-the-hook)
20
+ - [Call uploadImage to Upload an Image](#call-uploadimage-to-upload-an-image)
21
+ - [Upload Config](#upload-config)
22
+ - [Instructions for Publishing](#instructions-for-publishing)
14
23
 
15
24
  # Development with Host Application
16
25
  ## Engine
@@ -96,6 +105,7 @@ export default App;
96
105
  - `className`: Additional classes to be applied to the component.
97
106
  - `src`: The source URL of the image to be displayed initially.
98
107
  - `uploadConfig`: Configuration object for image uploads.
108
+ - `fixedAspectRatio`: An option to maintain a specific aspect ratio for the image. Expected input format is {height: number, width: number}.
99
109
 
100
110
  **Usage**
101
111
  ```jsx
package/dist/index.cjs.js CHANGED
@@ -2103,7 +2103,7 @@ var ImageDirectUpload = function ImageDirectUpload(_ref) {
2103
2103
  })
2104
2104
  }), /*#__PURE__*/React__default["default"].createElement("div", {
2105
2105
  className: "flex flex-col space-y-1"
2106
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2106
+ }, !isDisabled && /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
2107
2107
  className: "neeto-ui-text-gray-800 text-center leading-4",
2108
2108
  style: "body2"
2109
2109
  }, /*#__PURE__*/React__default["default"].createElement(reactI18next.Trans, {
@@ -2842,11 +2842,12 @@ var isNotNilOrEmpty = function isNotNilOrEmpty(value) {
2842
2842
  };
2843
2843
  var onImageLoaded = function onImageLoaded(_ref3) {
2844
2844
  var image = _ref3.image,
2845
- setCrop = _ref3.setCrop;
2845
+ setCrop = _ref3.setCrop,
2846
+ _ref3$cropAspectRatio = _ref3.cropAspectRatio,
2847
+ cropAspectRatio = _ref3$cropAspectRatio === void 0 ? 16 / 9 : _ref3$cropAspectRatio;
2846
2848
  var width = image.width,
2847
2849
  height = image.height;
2848
2850
  var imageAspectRatio = width / height;
2849
- var cropAspectRatio = 16 / 9;
2850
2851
  var maxCropWidth = 250;
2851
2852
  var maxCropHeight = maxCropWidth / cropAspectRatio;
2852
2853
  var cropWidth, cropHeight;
@@ -3639,7 +3640,9 @@ var Controls = function Controls(_ref) {
3639
3640
  setCrop = _ref.setCrop,
3640
3641
  imageRef = _ref.imageRef,
3641
3642
  isFullImage = _ref.isFullImage,
3642
- setIsFullImage = _ref.setIsFullImage;
3643
+ setIsFullImage = _ref.setIsFullImage,
3644
+ _ref$hideControls = _ref.hideControls,
3645
+ hideControls = _ref$hideControls === void 0 ? false : _ref$hideControls;
3643
3646
  var _useTranslation = reactI18next.useTranslation(),
3644
3647
  t = _useTranslation.t;
3645
3648
  var _useState = React.useState(crop.height.toFixed(0)),
@@ -3680,7 +3683,7 @@ var Controls = function Controls(_ref) {
3680
3683
  }, [crop]);
3681
3684
  return /*#__PURE__*/React__default["default"].createElement("div", {
3682
3685
  className: "flex flex-col p-4 md:w-2/6 "
3683
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Switch, {
3686
+ }, !hideControls && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Switch, {
3684
3687
  checked: isFullImage,
3685
3688
  className: "flex-grow-0",
3686
3689
  label: t("neetoImageUploader.labels.selectOriginalImage"),
@@ -3714,7 +3717,7 @@ var Controls = function Controls(_ref) {
3714
3717
  type: "number",
3715
3718
  value: aspectRatio.height,
3716
3719
  onChange: utils.withEventTargetValue(handleAspectHeightChange)
3717
- })), /*#__PURE__*/React__default["default"].createElement(neetoui.Input, {
3720
+ }))), /*#__PURE__*/React__default["default"].createElement(neetoui.Input, {
3718
3721
  className: "mt-4 flex-grow-0",
3719
3722
  disabled: isFullImage,
3720
3723
  label: t("neetoImageUploader.labels.width"),
@@ -3743,7 +3746,9 @@ var ImageEditor = function ImageEditor(_ref) {
3743
3746
  _ref$handleImageEditC = _ref.handleImageEditComplete,
3744
3747
  handleImageEditComplete = _ref$handleImageEditC === void 0 ? neetoCist.noop : _ref$handleImageEditC,
3745
3748
  _ref$signedId = _ref.signedId,
3746
- signedId = _ref$signedId === void 0 ? "" : _ref$signedId;
3749
+ signedId = _ref$signedId === void 0 ? "" : _ref$signedId,
3750
+ _ref$fixedAspectRatio = _ref.fixedAspectRatio,
3751
+ fixedAspectRatio = _ref$fixedAspectRatio === void 0 ? {} : _ref$fixedAspectRatio;
3747
3752
  var _useState = React.useState(true),
3748
3753
  _useState2 = _slicedToArray$2(_useState, 2),
3749
3754
  isAspectRatioLocked = _useState2[0],
@@ -3753,8 +3758,8 @@ var ImageEditor = function ImageEditor(_ref) {
3753
3758
  isFullImage = _useState4[0],
3754
3759
  setIsFullImage = _useState4[1];
3755
3760
  var _useState5 = React.useState({
3756
- width: 16,
3757
- height: 9
3761
+ width: (fixedAspectRatio === null || fixedAspectRatio === void 0 ? void 0 : fixedAspectRatio.width) || 16,
3762
+ height: (fixedAspectRatio === null || fixedAspectRatio === void 0 ? void 0 : fixedAspectRatio.height) || 9
3758
3763
  }),
3759
3764
  _useState6 = _slicedToArray$2(_useState5, 2),
3760
3765
  aspectRatio = _useState6[0],
@@ -3769,6 +3774,7 @@ var ImageEditor = function ImageEditor(_ref) {
3769
3774
  cropImage = _useCropImage.mutate;
3770
3775
  var imageRef = React.useRef(null);
3771
3776
  var wrapperRef = React.useRef(null);
3777
+ var cropAspectRatio = neetoCist.isPresent(fixedAspectRatio === null || fixedAspectRatio === void 0 ? void 0 : fixedAspectRatio.width) && neetoCist.isPresent(fixedAspectRatio.height) ? (fixedAspectRatio === null || fixedAspectRatio === void 0 ? void 0 : fixedAspectRatio.width) / (fixedAspectRatio === null || fixedAspectRatio === void 0 ? void 0 : fixedAspectRatio.height) : 16 / 9;
3772
3778
  var processCrop = function processCrop() {
3773
3779
  if (isFullImage) {
3774
3780
  handleImageEditComplete(image);
@@ -3812,7 +3818,7 @@ var ImageEditor = function ImageEditor(_ref) {
3812
3818
  style: "text",
3813
3819
  onClick: handleReset
3814
3820
  }), /*#__PURE__*/React__default["default"].createElement("div", {
3815
- className: "flex h-full w-full flex-col gap-2 overflow-y-scroll md:flex-row md:overflow-y-auto"
3821
+ className: "flex h-full w-full flex-col gap-2 overflow-y-scroll md:flex-row md:overflow-y-auto"
3816
3822
  }, /*#__PURE__*/React__default["default"].createElement("div", {
3817
3823
  id: "imageEditor",
3818
3824
  ref: wrapperRef,
@@ -3836,7 +3842,8 @@ var ImageEditor = function ImageEditor(_ref) {
3836
3842
  onLoad: function onLoad(e) {
3837
3843
  return onImageLoaded({
3838
3844
  image: e.target,
3839
- setCrop: setCrop
3845
+ setCrop: setCrop,
3846
+ cropAspectRatio: cropAspectRatio
3840
3847
  });
3841
3848
  }
3842
3849
  }))), /*#__PURE__*/React__default["default"].createElement(Controls, {
@@ -3849,6 +3856,7 @@ var ImageEditor = function ImageEditor(_ref) {
3849
3856
  setAspectRatio: setAspectRatio,
3850
3857
  setCrop: setCrop,
3851
3858
  setIsFullImage: setIsFullImage,
3859
+ hideControls: neetoCist.isPresent(fixedAspectRatio),
3852
3860
  setAspectRatioLocked: setIsAspectRatioLocked
3853
3861
  })));
3854
3862
  };
@@ -5036,7 +5044,9 @@ var Modal = function Modal(_ref) {
5036
5044
  _ref$onUploadComplete = _ref.onUploadComplete,
5037
5045
  onUploadComplete = _ref$onUploadComplete === void 0 ? neetoCist.noop : _ref$onUploadComplete,
5038
5046
  _ref$uploadConfig = _ref.uploadConfig,
5039
- uploadConfig = _ref$uploadConfig === void 0 ? {} : _ref$uploadConfig;
5047
+ uploadConfig = _ref$uploadConfig === void 0 ? {} : _ref$uploadConfig,
5048
+ _ref$fixedAspectRatio = _ref.fixedAspectRatio,
5049
+ fixedAspectRatio = _ref$fixedAspectRatio === void 0 ? {} : _ref$fixedAspectRatio;
5040
5050
  var _useState = React.useState(TABS[0].key),
5041
5051
  _useState2 = _slicedToArray$2(_useState, 2),
5042
5052
  activeTab = _useState2[0],
@@ -5119,6 +5129,7 @@ var Modal = function Modal(_ref) {
5119
5129
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Spinner, null)), isNilOrEmpty(selectedImage) && isDragActive && /*#__PURE__*/React__default["default"].createElement("div", _extends$1({
5120
5130
  className: "neeto-ui-rounded-xl neeto-ui-bg-gray-400 absolute flex h-full w-full flex-col items-center justify-around border-4 border-dashed border-gray-900 opacity-40"
5121
5131
  }, getRootProps()), /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, null, t("neetoImageUploader.common.dropHere"))), !isNilOrEmpty(selectedImage) ? /*#__PURE__*/React__default["default"].createElement(ImageEditor, {
5132
+ fixedAspectRatio: fixedAspectRatio,
5122
5133
  handleImageEditComplete: handleImageEditComplete,
5123
5134
  handleReset: function handleReset() {
5124
5135
  return setSelectedImage({});
@@ -5191,7 +5202,9 @@ var ImageUploader = function ImageUploader(_ref) {
5191
5202
  _ref$src = _ref.src,
5192
5203
  src = _ref$src === void 0 ? "" : _ref$src,
5193
5204
  _ref$uploadConfig = _ref.uploadConfig,
5194
- uploadConfig = _ref$uploadConfig === void 0 ? {} : _ref$uploadConfig;
5205
+ uploadConfig = _ref$uploadConfig === void 0 ? {} : _ref$uploadConfig,
5206
+ _ref$fixedAspectRatio = _ref.fixedAspectRatio,
5207
+ fixedAspectRatio = _ref$fixedAspectRatio === void 0 ? {} : _ref$fixedAspectRatio;
5195
5208
  var _useState = React.useState(false),
5196
5209
  _useState2 = _slicedToArray$2(_useState, 2),
5197
5210
  isAssetLibraryOpen = _useState2[0],
@@ -5304,9 +5317,11 @@ var ImageUploader = function ImageUploader(_ref) {
5304
5317
  }), label);
5305
5318
  })))) : /*#__PURE__*/React__default["default"].createElement(ImageDirectUpload, {
5306
5319
  setIsAssetLibraryOpen: setIsAssetLibraryOpen,
5320
+ isDisabled: neetoCist.isPresent(fixedAspectRatio),
5307
5321
  uploadConfig: uploadConfigWithDefaults,
5308
5322
  onDrop: uploadFile
5309
5323
  }), /*#__PURE__*/React__default["default"].createElement(Modal, {
5324
+ fixedAspectRatio: fixedAspectRatio,
5310
5325
  isOpen: isAssetLibraryOpen,
5311
5326
  uploadConfig: uploadConfigWithDefaults,
5312
5327
  onClose: function onClose() {