@corva/ui 3.75.0 → 3.76.0-1

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.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/asyncToGenerator"),t=require("@babel/runtime/helpers/classCallCheck"),r=require("@babel/runtime/helpers/createClass"),l=require("@babel/runtime/helpers/assertThisInitialized"),i=require("@babel/runtime/helpers/inherits"),a=require("@babel/runtime/helpers/possibleConstructorReturn"),n=require("@babel/runtime/helpers/getPrototypeOf"),o=require("@babel/runtime/helpers/defineProperty"),s=require("@babel/runtime/regenerator"),u=require("react"),d=require("prop-types"),p=require("react-s3-uploader/s3upload"),c=require("@material-ui/core/CircularProgress"),f=require("@material-ui/icons/PhotoCamera"),h=require("./PostPreviewDialog/index.js"),b=require("./Icons/AttachIcon.js"),g=require("./IconButton/index.js"),F=require("../clients/jsonApi/index.js"),v=require("../utils/mobileDetect.js"),m=require("react/jsx-runtime");function U(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var P=U(e),y=U(t),S=U(r),j=U(l),O=U(i),q=U(a),w=U(n),D=U(o),x=U(s),I=U(d),C=U(p),T=U(c),E=U(f);function N(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,l)}return r}function R(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?N(Object(r),!0).forEach((function(t){D.default(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):N(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function _(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,l=w.default(e);if(t){var i=w.default(this).constructor;r=Reflect.construct(l,arguments,i)}else r=l.apply(this,arguments);return q.default(this,r)}}var k=function(e){O.default(r,e);var t=_(r);function r(e){var l,i;return y.default(this,r),l=t.call(this,e),D.default(j.default(l),"onFinish",P.default(x.default.mark((function e(){var t;return x.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,F.getS3DownloadLink(l.state.s3FileName);case 2:t=e.sent,l.setState({currentUpload:null,uploadingFileToS3:!1,openFileUploadPreviewDialog:l.props.openPreviewDialogOnUpload,s3FileUrl:t.url},(function(){l.props.onFinish&&l.props.onFinish(l.state.s3FileUrl,l.state.s3FileName,l.state.s3FileSize)}));case 4:case"end":return e.stop()}}),e)})))),D.default(j.default(l),"onError",(function(e){l.props.onError&&l.props.onError(e),console.error(e)})),D.default(j.default(l),"getSignedUrl",(i=P.default(x.default.mark((function e(t,r){var i;return x.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,F.getS3SignedUrl(t.name,t.type);case 3:i=e.sent,e.next=10;break;case 6:return e.prev=6,e.t0=e.catch(0),l.setState({uploadingFileToS3:null,currentUpload:null},(function(){l.onError(e.t0.message)})),e.abrupt("return");case 10:l.setState({s3FileUrl:i.signed_url,s3FileName:i.file_name,s3FileSize:t.size}),r(R(R({},i),{},{signedUrl:i.signed_url}));case 12:case"end":return e.stop()}}),e,null,[[0,6]])}))),function(e,t){return i.apply(this,arguments)})),D.default(j.default(l),"preprocess",(function(e,t){t(e)})),D.default(j.default(l),"uploadFile",(function(e){if(e.target.files[0]){l.clearUpload();var t=new C.default({fileElement:l.fileInput.current,getSignedUrl:l.getSignedUrl,preprocess:l.preprocess,onProgress:function(){},onFinishS3Put:l.onFinish,onError:l.onError});l.setState({uploadingFileToS3:!0,currentUpload:{uploader:t}})}})),D.default(j.default(l),"handleCloseFileUploadPreviewDialog",(function(){l.setState({openFileUploadPreviewDialog:!1})})),D.default(j.default(l),"handleShare",(function(e,t,r){l.setState({openFileUploadPreviewDialog:!1},(function(){l.props.handleShare&&l.props.handleShare(e,t,r)}))})),l.state={currentUpload:null,s3FileUrl:null,s3FileName:null,s3FileSize:null,uploadingFileToS3:!1,openFileUploadPreviewDialog:!1},l.fileInput=u.createRef(),l}return S.default(r,[{key:"clearUpload",value:function(){var e=this.state.currentUpload;e&&e.uploader&&e.uploader.abortUpload()}},{key:"renderUploadButton",value:function(){var e=v.isNativeDetected?E.default:b,t=D.default({},"data-file-upload-button","");return m.jsxs("label",R(R({htmlFor:this.props.inputId},t),{},{children:[m.jsx("input",{ref:this.fileInput,id:this.props.inputId,type:"file",disabled:this.props.disabled,onChange:this.uploadFile,style:{display:"none"}}),m.jsx(g,{"data-testid":"".concat("fileUpload","_attachFileButton"),"aria-label":"File Upload",disabled:this.props.disabled,component:this.props.disabled?"button":"span",className:this.props.fileUploadIconClassName,disableRipple:this.props.disableRipple,tooltipProps:this.props.tooltipProps,children:m.jsx(e,{})})]}))}},{key:"render",value:function(){return m.jsxs(m.Fragment,{children:[this.state.uploadingFileToS3?m.jsx(T.default,{"data-testid":"generic_uploadProgress",size:18}):this.renderUploadButton(),this.state.openFileUploadPreviewDialog&&m.jsx(h,{open:this.state.openFileUploadPreviewDialog,fileUrl:this.state.s3FileUrl,fileName:this.state.s3FileName,fileSize:this.state.s3FileSize,handleShare:this.handleShare,handleClose:this.handleCloseFileUploadPreviewDialog,additionalFields:this.props.additionalFields,requiredFields:this.props.requiredFields,message:this.props.message})]})}}]),r}(u.PureComponent);k.propTypes={additionalFields:I.default.arrayOf(I.default.node),classes:I.default.shape({}),tooltipProps:I.default.shape({}),disableRipple:I.default.bool,disabled:I.default.bool,fileUploadIconClassName:I.default.string,handleShare:I.default.func,inputId:I.default.string,message:I.default.string,onError:I.default.func,onFinish:I.default.func,openPreviewDialogOnUpload:I.default.bool,requiredFields:I.default.arrayOf(I.default.string)},k.defaultProps={additionalFields:[],classes:{},disableRipple:!1,disabled:!1,fileUploadIconClassName:void 0,handleShare:void 0,inputId:"icon-button-file",message:void 0,onError:void 0,onFinish:void 0,openPreviewDialogOnUpload:!0,requiredFields:[],tooltipProps:{title:"Attach File"}},exports.FILE_UPLOAD_BUTTON_DATA_ATTR="data-file-upload-button",exports.default=k;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),i=require("react"),t=require("prop-types"),r=require("./useFileUploadIconButton.js"),l=require("@material-ui/core/CircularProgress"),a=require("@material-ui/icons/PhotoCamera"),o=require("./PostPreviewDialog/index.js"),n=require("./Icons/AttachIcon.js"),d=require("./IconButton/index.js"),s=require("../utils/mobileDetect.js"),u=require("react/jsx-runtime");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=p(e),f=p(t),b=p(l),h=p(a);function g(e,i){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);i&&(r=r.filter((function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable}))),t.push.apply(t,r)}return t}function j(e){for(var i=1;i<arguments.length;i++){var t=null!=arguments[i]?arguments[i]:{};i%2?g(Object(t),!0).forEach((function(i){c.default(e,i,t[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):g(Object(t)).forEach((function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(t,i))}))}return e}var v=[],O={title:"Attach File"};function P(e){var i,t,l=e.additionalFields,a=void 0===l?v:l,p=e.tooltipProps,f=void 0===p?O:p,g=e.disableRipple,P=void 0!==g&&g,F=e.disabled,m=void 0!==F&&F,y=e.fileUploadIconClassName,D=e.handleShare,U=e.inputId,q=void 0===U?"icon-button-file":U,w=e.message,x=e.onError,I=e.onFinish,S=e.openPreviewDialogOnUpload,_=void 0===S||S,C=e.requiredFields,N=void 0===C?v:C,T=r({onError:x,onFinish:I,openPreviewDialogOnUpload:_,handleShare:D}),A=T.state,E=T.fileInput,B=T.uploadFile,R=T.handleCloseFileUploadPreviewDialog,z=T.handleShare;return u.jsxs(u.Fragment,{children:[A.uploadingFileToS3?u.jsx(b.default,{"data-testid":"generic_uploadProgress",size:18}):(i=s.isNativeDetected?h.default:n,t=c.default({},"data-file-upload-button",""),u.jsxs("label",j(j({htmlFor:q},t),{},{children:[u.jsx("input",{ref:E,id:q,type:"file",disabled:m,onChange:B,style:{display:"none"}}),u.jsx(d,{"data-testid":"".concat("fileUpload","_attachFileButton"),"aria-label":"File Upload",disabled:m,component:m?"button":"span",className:y,disableRipple:P,tooltipProps:f,children:u.jsx(i,{})})]}))),A.openFileUploadPreviewDialog&&u.jsx(o,{open:A.openFileUploadPreviewDialog,fileUrl:A.s3FileUrl,fileName:A.s3FileName,fileSize:A.s3FileSize,handleShare:z,handleClose:R,additionalFields:a,requiredFields:N,message:w})]})}P.propTypes={additionalFields:f.default.arrayOf(f.default.node),classes:f.default.shape({}),tooltipProps:f.default.shape({}),disableRipple:f.default.bool,disabled:f.default.bool,fileUploadIconClassName:f.default.string,handleShare:f.default.func,inputId:f.default.string,message:f.default.string,onError:f.default.func,onFinish:f.default.func,openPreviewDialogOnUpload:f.default.bool,requiredFields:f.default.arrayOf(f.default.string)};var F=i.memo(P);exports.FILE_UPLOAD_BUTTON_DATA_ATTR="data-file-upload-button",exports.default=F;
2
2
  //# sourceMappingURL=FileUploadIconButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileUploadIconButton.js","sources":["../../../src/components/FileUploadIconButton.js"],"sourcesContent":["import { createRef, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport S3Upload from 'react-s3-uploader/s3upload';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport PhotoCameraIcon from '@material-ui/icons/PhotoCamera';\n\nimport PostPreviewDialog from '~components/PostPreviewDialog';\nimport AttachIcon from '~components/Icons/AttachIcon';\nimport IconButton from '~components/IconButton';\nimport { getS3SignedUrl, getS3DownloadLink } from '~/clients/jsonApi';\nimport { isNativeDetected } from '~/utils/mobileDetect';\n\nconst PAGE_NAME = 'fileUpload';\n\n// Data attr helps to identify the select file action; Is used to prevent the tooltip from closing\nexport const FILE_UPLOAD_BUTTON_DATA_ATTR = 'data-file-upload-button';\n\n/** @extends {PureComponent<any, any, any>} */\nclass FileUploadIconButton extends PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n currentUpload: null,\n\n s3FileUrl: null,\n s3FileName: null,\n s3FileSize: null,\n\n uploadingFileToS3: false,\n\n openFileUploadPreviewDialog: false,\n };\n\n this.fileInput = createRef();\n }\n\n onFinish = async () => {\n const s3DownloadLinkResponse = await getS3DownloadLink(this.state.s3FileName);\n this.setState(\n {\n currentUpload: null,\n uploadingFileToS3: false,\n openFileUploadPreviewDialog: this.props.openPreviewDialogOnUpload,\n s3FileUrl: s3DownloadLinkResponse.url,\n },\n () => {\n if (this.props.onFinish)\n this.props.onFinish(this.state.s3FileUrl, this.state.s3FileName, this.state.s3FileSize);\n }\n );\n };\n\n onError = fileUploadingError => {\n if (this.props.onError) this.props.onError(fileUploadingError);\n console.error(fileUploadingError);\n };\n\n getSignedUrl = async (file, callback) => {\n let data;\n try {\n data = await getS3SignedUrl(file.name, file.type);\n } catch (e) {\n this.setState(\n {\n uploadingFileToS3: null,\n currentUpload: null,\n },\n () => {\n this.onError(e.message);\n }\n );\n return;\n }\n\n this.setState({\n s3FileUrl: data.signed_url,\n s3FileName: data.file_name,\n s3FileSize: file.size,\n });\n\n // NOTE: Add node for 'signedUrl' which is the expected name by uploader component\n callback({\n ...data,\n signedUrl: data.signed_url,\n });\n };\n\n preprocess = (file, next) => {\n next(file);\n };\n\n uploadFile = event => {\n if (!event.target.files[0]) {\n return;\n }\n\n this.clearUpload();\n const uploader = new S3Upload({\n fileElement: this.fileInput.current,\n getSignedUrl: this.getSignedUrl,\n preprocess: this.preprocess,\n onProgress: () => {}, // NOTE: Prevents logging to console\n onFinishS3Put: this.onFinish,\n onError: this.onError,\n });\n\n this.setState({\n uploadingFileToS3: true,\n currentUpload: {\n uploader,\n },\n });\n };\n\n clearUpload() {\n const { currentUpload } = this.state;\n if (currentUpload && currentUpload.uploader) {\n currentUpload.uploader.abortUpload();\n }\n }\n\n handleCloseFileUploadPreviewDialog = () => {\n this.setState({ openFileUploadPreviewDialog: false });\n };\n\n handleShare = (comment, fileName, fileSize) => {\n this.setState({ openFileUploadPreviewDialog: false }, () => {\n if (this.props.handleShare) {\n this.props.handleShare(comment, fileName, fileSize);\n }\n });\n };\n\n renderUploadButton() {\n const Icon = isNativeDetected ? PhotoCameraIcon : AttachIcon;\n const labelDataAttributes = { [FILE_UPLOAD_BUTTON_DATA_ATTR]: '' };\n\n return (\n <label htmlFor={this.props.inputId} {...labelDataAttributes}>\n <input\n ref={this.fileInput}\n id={this.props.inputId}\n type=\"file\"\n disabled={this.props.disabled}\n onChange={this.uploadFile}\n style={{ display: 'none' }}\n />\n <IconButton\n data-testid={`${PAGE_NAME}_attachFileButton`}\n aria-label=\"File Upload\"\n disabled={this.props.disabled}\n component={this.props.disabled ? 'button' : 'span'}\n className={this.props.fileUploadIconClassName}\n disableRipple={this.props.disableRipple}\n tooltipProps={this.props.tooltipProps}\n >\n <Icon />\n </IconButton>\n </label>\n );\n }\n\n render() {\n return (\n <>\n {this.state.uploadingFileToS3 ? (\n <CircularProgress data-testid=\"generic_uploadProgress\" size={18} />\n ) : (\n this.renderUploadButton()\n )}\n\n {this.state.openFileUploadPreviewDialog && (\n <PostPreviewDialog\n open={this.state.openFileUploadPreviewDialog}\n fileUrl={this.state.s3FileUrl}\n fileName={this.state.s3FileName}\n fileSize={this.state.s3FileSize}\n handleShare={this.handleShare}\n handleClose={this.handleCloseFileUploadPreviewDialog}\n additionalFields={this.props.additionalFields}\n requiredFields={this.props.requiredFields}\n message={this.props.message}\n />\n )}\n </>\n );\n }\n}\n\nFileUploadIconButton.propTypes = {\n additionalFields: PropTypes.arrayOf(PropTypes.node),\n classes: PropTypes.shape({}),\n tooltipProps: PropTypes.shape({}),\n disableRipple: PropTypes.bool,\n disabled: PropTypes.bool,\n fileUploadIconClassName: PropTypes.string,\n handleShare: PropTypes.func,\n inputId: PropTypes.string,\n message: PropTypes.string,\n onError: PropTypes.func,\n onFinish: PropTypes.func,\n openPreviewDialogOnUpload: PropTypes.bool,\n requiredFields: PropTypes.arrayOf(PropTypes.string),\n};\n\nFileUploadIconButton.defaultProps = {\n additionalFields: [],\n classes: {},\n disableRipple: false,\n disabled: false,\n fileUploadIconClassName: undefined,\n handleShare: undefined,\n inputId: 'icon-button-file',\n message: undefined,\n onError: undefined,\n onFinish: undefined,\n openPreviewDialogOnUpload: true,\n requiredFields: [],\n tooltipProps: { title: 'Attach File' },\n};\n\nexport default FileUploadIconButton;\n"],"names":["FileUploadIconButton","_PureComponent","_inherits","_super","_createSuper","props","_this","_ref2","_classCallCheck","this","call","_defineProperty","_assertThisInitialized","_asyncToGenerator","_regeneratorRuntime","mark","_callee","s3DownloadLinkResponse","wrap","_context","prev","next","getS3DownloadLink","state","s3FileName","sent","setState","currentUpload","uploadingFileToS3","openFileUploadPreviewDialog","openPreviewDialogOnUpload","s3FileUrl","url","onFinish","s3FileSize","stop","fileUploadingError","onError","console","error","_callee2","file","callback","data","_context2","getS3SignedUrl","name","type","t0","message","abrupt","signed_url","file_name","size","signedUrl","_x","_x2","apply","arguments","event","target","files","clearUpload","uploader","S3Upload","fileElement","fileInput","current","getSignedUrl","preprocess","onProgress","onFinishS3Put","comment","fileName","fileSize","handleShare","createRef","_createClass","key","value","abortUpload","Icon","isNativeDetected","PhotoCameraIcon","AttachIcon","labelDataAttributes","_jsxs","_objectSpread","htmlFor","inputId","children","_jsx","jsx","ref","id","disabled","onChange","uploadFile","style","display","IconButton","concat","component","className","fileUploadIconClassName","disableRipple","tooltipProps","_Fragment","CircularProgress","renderUploadButton","PostPreviewDialog","open","fileUrl","handleClose","handleCloseFileUploadPreviewDialog","additionalFields","requiredFields","PureComponent","propTypes","PropTypes","arrayOf","node","classes","shape","bool","string","func","defaultProps","undefined","title"],"mappings":"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"}
1
+ {"version":3,"file":"FileUploadIconButton.js","sources":["../../../src/components/FileUploadIconButton.js"],"sourcesContent":["import { memo } from 'react';\nimport PropTypes from 'prop-types';\nimport useFileUploadIconButton from './useFileUploadIconButton';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport PhotoCameraIcon from '@material-ui/icons/PhotoCamera';\n\nimport PostPreviewDialog from '~components/PostPreviewDialog';\nimport AttachIcon from '~components/Icons/AttachIcon';\nimport IconButton from '~components/IconButton';\nimport { isNativeDetected } from '~/utils/mobileDetect';\n\nconst PAGE_NAME = 'fileUpload';\n\n// Data attr helps to identify the select file action; Is used to prevent the tooltip from closing\nexport const FILE_UPLOAD_BUTTON_DATA_ATTR = 'data-file-upload-button';\n\nconst emptyFields = [];\nconst defaultTooltipProps = { title: 'Attach File' };\n\n/** @param {any} props Preserve the legacy component's permissive public prop type. */\nfunction FileUploadIconButton({\n additionalFields = emptyFields,\n tooltipProps = defaultTooltipProps,\n disableRipple = false,\n disabled = false,\n fileUploadIconClassName,\n handleShare: onShare,\n inputId = 'icon-button-file',\n message,\n onError,\n onFinish,\n openPreviewDialogOnUpload = true,\n requiredFields = emptyFields,\n}) {\n const { state, fileInput, uploadFile, handleCloseFileUploadPreviewDialog, handleShare } =\n useFileUploadIconButton({ onError, onFinish, openPreviewDialogOnUpload, handleShare: onShare });\n const renderUploadButton = () => {\n const Icon = isNativeDetected ? PhotoCameraIcon : AttachIcon;\n const labelDataAttributes = { [FILE_UPLOAD_BUTTON_DATA_ATTR]: '' };\n\n return (\n <label htmlFor={inputId} {...labelDataAttributes}>\n <input\n ref={fileInput}\n id={inputId}\n type=\"file\"\n disabled={disabled}\n onChange={uploadFile}\n style={{ display: 'none' }}\n />\n <IconButton\n data-testid={`${PAGE_NAME}_attachFileButton`}\n aria-label=\"File Upload\"\n disabled={disabled}\n component={disabled ? 'button' : 'span'}\n className={fileUploadIconClassName}\n disableRipple={disableRipple}\n tooltipProps={tooltipProps}\n >\n <Icon />\n </IconButton>\n </label>\n );\n };\n\n return (\n <>\n {state.uploadingFileToS3 ? (\n <CircularProgress data-testid=\"generic_uploadProgress\" size={18} />\n ) : (\n renderUploadButton()\n )}\n\n {state.openFileUploadPreviewDialog && (\n <PostPreviewDialog\n open={state.openFileUploadPreviewDialog}\n fileUrl={state.s3FileUrl}\n fileName={state.s3FileName}\n fileSize={state.s3FileSize}\n handleShare={handleShare}\n handleClose={handleCloseFileUploadPreviewDialog}\n additionalFields={additionalFields}\n requiredFields={requiredFields}\n message={message}\n />\n )}\n </>\n );\n}\n\nFileUploadIconButton.propTypes = {\n additionalFields: PropTypes.arrayOf(PropTypes.node),\n classes: PropTypes.shape({}),\n tooltipProps: PropTypes.shape({}),\n disableRipple: PropTypes.bool,\n disabled: PropTypes.bool,\n fileUploadIconClassName: PropTypes.string,\n handleShare: PropTypes.func,\n inputId: PropTypes.string,\n message: PropTypes.string,\n onError: PropTypes.func,\n onFinish: PropTypes.func,\n openPreviewDialogOnUpload: PropTypes.bool,\n requiredFields: PropTypes.arrayOf(PropTypes.string),\n};\n\nexport default memo(FileUploadIconButton);\n"],"names":["emptyFields","defaultTooltipProps","title","FileUploadIconButton","_ref","Icon","labelDataAttributes","_ref$additionalFields","additionalFields","_ref$tooltipProps","tooltipProps","_ref$disableRipple","disableRipple","_ref$disabled","disabled","fileUploadIconClassName","onShare","handleShare","_ref$inputId","inputId","message","onError","onFinish","_ref$openPreviewDialo","openPreviewDialogOnUpload","_ref$requiredFields","requiredFields","_useFileUploadIconBut","useFileUploadIconButton","state","fileInput","uploadFile","handleCloseFileUploadPreviewDialog","_jsxs","_Fragment","children","uploadingFileToS3","_jsx","CircularProgress","size","isNativeDetected","PhotoCameraIcon","AttachIcon","_defineProperty","_objectSpread","htmlFor","jsx","ref","id","type","onChange","style","display","IconButton","concat","component","className","openFileUploadPreviewDialog","PostPreviewDialog","open","fileUrl","s3FileUrl","fileName","s3FileName","fileSize","s3FileSize","handleClose","propTypes","PropTypes","arrayOf","node","classes","shape","bool","string","func","memo"],"mappings":"gpCAWA,IAKMA,EAAc,GACdC,EAAsB,CAAEC,MAAO,eAGrC,SAASC,EAaNC,GAAA,IAIOC,EACAC,EALPC,EAAAH,EAZDI,iBAAAA,aAAmBR,EAAWO,EAAAE,EAAAL,EAC9BM,aAAAA,aAAeT,EAAmBQ,EAAAE,EAAAP,EAClCQ,cAAAA,cAAqBD,EAAAE,EAAAT,EACrBU,SAAAA,cAAgBD,EAChBE,IAAAA,wBACaC,IAAbC,YAAWC,EAAAd,EACXe,QAAAA,aAAU,mBAAkBD,EAC5BE,IAAAA,QACAC,IAAAA,QACAC,IAAAA,SAAQC,EAAAnB,EACRoB,0BAAAA,cAAgCD,EAAAE,EAAArB,EAChCsB,eAAAA,aAAiB1B,EAAWyB,EAE5BE,EACEC,EAAwB,CAAEP,QAAAA,EAASC,SAAAA,EAAUE,0BAAAA,EAA2BP,YAAaD,IAD/Ea,IAAAA,MAAOC,IAAAA,UAAWC,IAAAA,WAAYC,IAAAA,mCAAoCf,IAAAA,YA+B1E,OACEgB,EAAAA,KAAAC,EAAAA,SAAA,CAAAC,SAAA,CACGN,EAAMO,kBACLC,EAAAA,IAACC,EAAAA,QAAgB,CAAC,cAAY,yBAAyBC,KAAM,MA/B3DlC,EAAOmC,EAAAA,iBAAmBC,EAAe,QAAGC,EAC5CpC,EAAmBqC,EAAA,QAAA,CAAA,EAxBe,0BAwBsB,IAG5DV,OAAA,QAAAW,EAAAA,EAAA,CAAOC,QAAS1B,GAAab,GAAmB,GAAA,CAAA6B,SAC9C,CAAAE,EAAAS,IAAA,QAAA,CACEC,IAAKjB,EACLkB,GAAI7B,EACJ8B,KAAK,OACLnC,SAAUA,EACVoC,SAAUnB,EACVoB,MAAO,CAAEC,QAAS,UAEpBf,MAACgB,EAAU,CACT,cAAA,GAAAC,OAxCQ,aAwCqC,qBAC7C,aAAW,cACXxC,SAAUA,EACVyC,UAAWzC,EAAW,SAAW,OACjC0C,UAAWzC,EACXH,cAAeA,EACfF,aAAcA,EAAayB,SAE3BE,EAAAA,IAAChC,EAAI,WAcRwB,EAAM4B,6BACLpB,EAAAA,IAACqB,EAAiB,CAChBC,KAAM9B,EAAM4B,4BACZG,QAAS/B,EAAMgC,UACfC,SAAUjC,EAAMkC,WAChBC,SAAUnC,EAAMoC,WAChBhD,YAAaA,EACbiD,YAAalC,EACbxB,iBAAkBA,EAClBkB,eAAgBA,EAChBN,QAASA,MAKnB,CAEAjB,EAAqBgE,UAAY,CAC/B3D,iBAAkB4D,EAAS,QAACC,QAAQD,EAAAA,QAAUE,MAC9CC,QAASH,EAAAA,QAAUI,MAAM,IACzB9D,aAAc0D,EAAAA,QAAUI,MAAM,IAC9B5D,cAAewD,EAAS,QAACK,KACzB3D,SAAUsD,EAAS,QAACK,KACpB1D,wBAAyBqD,EAAS,QAACM,OACnCzD,YAAamD,EAAS,QAACO,KACvBxD,QAASiD,EAAS,QAACM,OACnBtD,QAASgD,EAAS,QAACM,OACnBrD,QAAS+C,EAAS,QAACO,KACnBrD,SAAU8C,EAAS,QAACO,KACpBnD,0BAA2B4C,EAAS,QAACK,KACrC/C,eAAgB0C,EAAS,QAACC,QAAQD,EAAAA,QAAUM,SAG9C,IAAeE,EAAAA,EAAAA,KAAKzE,wCA5FwB"}
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("@babel/runtime/helpers/asyncToGenerator"),r=require("@babel/runtime/helpers/defineProperty"),t=require("@babel/runtime/helpers/toConsumableArray"),n=require("@babel/runtime/helpers/slicedToArray"),o=require("@babel/runtime/regenerator"),l=require("react"),a=require("react-s3-uploader/s3upload"),i=require("../clients/jsonApi/index.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=u(e),p=u(r),c=u(t),f=u(n),d=u(o),g=u(a);function b(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function h(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?b(Object(t),!0).forEach((function(r){p.default(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):b(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}module.exports=function(e){var r=l.useState({currentUpload:null,s3FileUrl:null,s3FileName:null,s3FileSize:null,uploadingFileToS3:!1,openFileUploadPreviewDialog:!1}),t=f.default(r,2),n=t[0],o=t[1],a=l.useRef(null),u=l.useRef({props:e,state:n}),p=l.useRef([]);l.useLayoutEffect((function(){u.current={props:e,state:n};var r=p.current;p.current=[],r.forEach((function(e){var r=u.current;if("finish"===e.type&&r.props.onFinish)r.props.onFinish(r.state.s3FileUrl,r.state.s3FileName,r.state.s3FileSize);else if("error"===e.type)r.props.onError&&r.props.onError(e.message),console.error(e.message);else if("share"===e.type&&r.props.handleShare){var t;(t=r.props).handleShare.apply(t,c.default(e.args))}}))}));var b,y,v=function(e,r){r&&p.current.push(r),o((function(r){return h(h({},r),e)}))},F=function(e){u.current.props.onError&&u.current.props.onError(e),console.error(e)},m=(b=s.default(d.default.mark((function e(r,t){var n;return d.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,i.getS3SignedUrl(r.name,r.type);case 3:n=e.sent,e.next=10;break;case 6:return e.prev=6,e.t0=e.catch(0),v({uploadingFileToS3:null,currentUpload:null},{type:"error",message:e.t0.message}),e.abrupt("return");case 10:v({s3FileUrl:n.signed_url,s3FileName:n.file_name,s3FileSize:r.size}),t(h(h({},n),{},{signedUrl:n.signed_url}));case 12:case"end":return e.stop()}}),e,null,[[0,6]])}))),function(e,r){return b.apply(this,arguments)}),U=(y=s.default(d.default.mark((function e(){var r;return d.default.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,i.getS3DownloadLink(u.current.state.s3FileName);case 2:r=e.sent,v({currentUpload:null,uploadingFileToS3:!1,openFileUploadPreviewDialog:u.current.props.openPreviewDialogOnUpload,s3FileUrl:r.url},{type:"finish"});case 4:case"end":return e.stop()}}),e)}))),function(){return y.apply(this,arguments)});return{state:n,fileInput:a,uploadFile:function(e){if(e.target.files[0]){var r=u.current.state.currentUpload;r&&r.uploader&&r.uploader.abortUpload();var t=new g.default({fileElement:a.current,getSignedUrl:m,preprocess:function(e,r){return r(e)},onProgress:function(){},onFinishS3Put:U,onError:F});v({uploadingFileToS3:!0,currentUpload:{uploader:t}})}},handleCloseFileUploadPreviewDialog:function(){return v({openFileUploadPreviewDialog:!1})},handleShare:function(e,r,t){return v({openFileUploadPreviewDialog:!1},{type:"share",args:[e,r,t]})}}};
2
+ //# sourceMappingURL=useFileUploadIconButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFileUploadIconButton.js","sources":["../../../src/components/useFileUploadIconButton.js"],"sourcesContent":["import { useLayoutEffect, useRef, useState } from 'react';\nimport S3Upload from 'react-s3-uploader/s3upload';\nimport { getS3SignedUrl, getS3DownloadLink } from '~/clients/jsonApi';\n\nexport default function useFileUploadIconButton(props) {\n const [state, setState] = useState({\n currentUpload: null,\n s3FileUrl: null,\n s3FileName: null,\n s3FileSize: null,\n uploadingFileToS3: false,\n openFileUploadPreviewDialog: false,\n });\n const fileInput = useRef(null);\n const latest = useRef({ props, state });\n const notifications = useRef([]);\n\n // The uploader retains callbacks; notify with current data only after the UI commits.\n useLayoutEffect(() => {\n latest.current = { props, state };\n const pending = notifications.current;\n notifications.current = [];\n pending.forEach(notification => {\n const current = latest.current;\n if (notification.type === 'finish' && current.props.onFinish) {\n current.props.onFinish(\n current.state.s3FileUrl,\n current.state.s3FileName,\n current.state.s3FileSize\n );\n } else if (notification.type === 'error') {\n if (current.props.onError) current.props.onError(notification.message);\n console.error(notification.message);\n } else if (notification.type === 'share' && current.props.handleShare) {\n current.props.handleShare(...notification.args);\n }\n });\n });\n\n const update = (patch, notification) => {\n if (notification) notifications.current.push(notification);\n setState(current => ({ ...current, ...patch }));\n };\n\n const onError = error => {\n if (latest.current.props.onError) latest.current.props.onError(error);\n console.error(error);\n };\n\n const getSignedUrl = async (file, callback) => {\n let data;\n try {\n data = await getS3SignedUrl(file.name, file.type);\n } catch (error) {\n update(\n { uploadingFileToS3: null, currentUpload: null },\n { type: 'error', message: error.message }\n );\n return;\n }\n update({ s3FileUrl: data.signed_url, s3FileName: data.file_name, s3FileSize: file.size });\n callback({ ...data, signedUrl: data.signed_url });\n };\n\n const onFinish = async () => {\n const response = await getS3DownloadLink(latest.current.state.s3FileName);\n update(\n {\n currentUpload: null,\n uploadingFileToS3: false,\n openFileUploadPreviewDialog: latest.current.props.openPreviewDialogOnUpload,\n s3FileUrl: response.url,\n },\n { type: 'finish' }\n );\n };\n\n const uploadFile = event => {\n if (!event.target.files[0]) return;\n const { currentUpload } = latest.current.state;\n if (currentUpload && currentUpload.uploader) currentUpload.uploader.abortUpload();\n const uploader = new S3Upload({\n fileElement: fileInput.current,\n getSignedUrl,\n preprocess: (file, next) => next(file),\n onProgress: () => undefined, // Prevent the uploader's default progress logging.\n onFinishS3Put: onFinish,\n onError,\n });\n update({ uploadingFileToS3: true, currentUpload: { uploader } });\n };\n\n return {\n state,\n fileInput,\n uploadFile,\n handleCloseFileUploadPreviewDialog: () => update({ openFileUploadPreviewDialog: false }),\n handleShare: (comment, fileName, fileSize) =>\n update(\n { openFileUploadPreviewDialog: false },\n { type: 'share', args: [comment, fileName, fileSize] }\n ),\n };\n}\n"],"names":["props","_useState","useState","currentUpload","s3FileUrl","s3FileName","s3FileSize","uploadingFileToS3","openFileUploadPreviewDialog","_useState2","_slicedToArray","state","setState","fileInput","useRef","latest","notifications","useLayoutEffect","current","pending","forEach","notification","type","onFinish","onError","message","console","error","handleShare","_current$props","args","_ref","_ref2","update","patch","push","getSignedUrl","_asyncToGenerator","_regeneratorRuntime","mark","_callee","file","callback","data","wrap","_context","prev","next","getS3SignedUrl","name","sent","t0","abrupt","signed_url","file_name","size","signedUrl","stop","_x","_x2","apply","this","arguments","_callee2","response","_context2","getS3DownloadLink","openPreviewDialogOnUpload","url","uploadFile","event","target","files","uploader","abortUpload","S3Upload","fileElement","preprocess","onProgress","onFinishS3Put","handleCloseFileUploadPreviewDialog","comment","fileName","fileSize"],"mappings":"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"}
@@ -1,62 +1,6 @@
1
- import { PureComponent } from 'react';
2
- import PropTypes from 'prop-types';
3
1
  export declare const FILE_UPLOAD_BUTTON_DATA_ATTR = "data-file-upload-button";
4
- /** @extends {PureComponent<any, any, any>} */
5
- declare class FileUploadIconButton extends PureComponent<any, any, any> {
6
- state: {
7
- currentUpload: null;
8
- s3FileUrl: null;
9
- s3FileName: null;
10
- s3FileSize: null;
11
- uploadingFileToS3: boolean;
12
- openFileUploadPreviewDialog: boolean;
13
- };
14
- fileInput: import("react").RefObject<any>;
15
- constructor(props: any);
16
- onFinish: () => Promise<void>;
17
- onError: (fileUploadingError: any) => void;
18
- getSignedUrl: (file: any, callback: any) => Promise<void>;
19
- preprocess: (file: any, next: any) => void;
20
- uploadFile: (event: any) => void;
21
- clearUpload(): void;
22
- handleCloseFileUploadPreviewDialog: () => void;
23
- handleShare: (comment: any, fileName: any, fileSize: any) => void;
24
- renderUploadButton(): import("react").JSX.Element;
25
- render(): import("react").JSX.Element;
26
- }
27
- declare namespace FileUploadIconButton {
28
- var propTypes: {
29
- additionalFields: PropTypes.Requireable<PropTypes.ReactNodeLike[]>;
30
- classes: PropTypes.Requireable<PropTypes.InferProps<{}>>;
31
- tooltipProps: PropTypes.Requireable<PropTypes.InferProps<{}>>;
32
- disableRipple: PropTypes.Requireable<boolean>;
33
- disabled: PropTypes.Requireable<boolean>;
34
- fileUploadIconClassName: PropTypes.Requireable<string>;
35
- handleShare: PropTypes.Requireable<(...args: any[]) => any>;
36
- inputId: PropTypes.Requireable<string>;
37
- message: PropTypes.Requireable<string>;
38
- onError: PropTypes.Requireable<(...args: any[]) => any>;
39
- onFinish: PropTypes.Requireable<(...args: any[]) => any>;
40
- openPreviewDialogOnUpload: PropTypes.Requireable<boolean>;
41
- requiredFields: PropTypes.Requireable<(string | null | undefined)[]>;
42
- };
43
- var defaultProps: {
44
- additionalFields: never[];
45
- classes: {};
46
- disableRipple: boolean;
47
- disabled: boolean;
48
- fileUploadIconClassName: undefined;
49
- handleShare: undefined;
50
- inputId: string;
51
- message: undefined;
52
- onError: undefined;
53
- onFinish: undefined;
54
- openPreviewDialogOnUpload: boolean;
55
- requiredFields: never[];
56
- tooltipProps: {
57
- title: string;
58
- };
59
- };
60
- }
61
- export default FileUploadIconButton;
2
+ /** @param {any} props Preserve the legacy component's permissive public prop type. */
3
+ declare function FileUploadIconButton({ additionalFields, tooltipProps, disableRipple, disabled, fileUploadIconClassName, handleShare: onShare, inputId, message, onError, onFinish, openPreviewDialogOnUpload, requiredFields, }: any): import("react").JSX.Element;
4
+ declare const _default: import("react").MemoExoticComponent<typeof FileUploadIconButton>;
5
+ export default _default;
62
6
  //# sourceMappingURL=FileUploadIconButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileUploadIconButton.d.ts","sourceRoot":"","sources":["../../src/components/FileUploadIconButton.js"],"names":[],"mappings":"AAAA,OAAO,EAAa,aAAa,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,SAAS,MAAM,YAAY,CAAC;AAcnC,eAAO,MAAM,4BAA4B,4BAA4B,CAAC;AAEtE,8CAA8C;AAC9C,cAAM,oBAAqB,SAAQ,aAAa,CADpB,GAAG,EAAE,GAAG,EAAE,GAAG,CACO;IAIvC,KAAK;;;;;;;;IAYL,SAAS;IAfhB,YAAY,KAAK,KAAA,EAgBhB;IAED,QAAQ,sBAcN;IAEF,OAAO,oCAGL;IAEF,YAAY,8CA4BV;IAEF,UAAU,iCAER;IAEF,UAAU,uBAqBR;IAEF,WAAW,SAKV;IAED,kCAAkC,aAEhC;IAEF,WAAW,uDAMT;IAEF,kBAAkB,gCA2BjB;IAED,MAAM,gCAwBL;CACF;kBA1KK,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAyMR,KAAK;;;;eAGR,oBAAoB"}
1
+ {"version":3,"file":"FileUploadIconButton.d.ts","sourceRoot":"","sources":["../../src/components/FileUploadIconButton.js"],"names":[],"mappings":"AAcA,eAAO,MAAM,4BAA4B,4BAA4B,CAAC;AAKtE,sFAAsF;AACtF,iBAAS,oBAAoB,CAAC,EAC5B,gBAA8B,EAC9B,YAAkC,EAClC,aAAqB,EACrB,QAAgB,EAChB,uBAAuB,EACvB,WAAW,EAAE,OAAO,EACpB,OAA4B,EAC5B,OAAO,EACP,OAAO,EACP,QAAQ,EACR,yBAAgC,EAChC,cAA4B,GAC7B,EAdW,GAcX,+BAuDA"}
@@ -1,2 +1,2 @@
1
- import e from"@babel/runtime/helpers/asyncToGenerator";import r from"@babel/runtime/helpers/classCallCheck";import t from"@babel/runtime/helpers/createClass";import o from"@babel/runtime/helpers/assertThisInitialized";import i from"@babel/runtime/helpers/inherits";import n from"@babel/runtime/helpers/possibleConstructorReturn";import l from"@babel/runtime/helpers/getPrototypeOf";import a from"@babel/runtime/helpers/defineProperty";import s from"@babel/runtime/regenerator";import{createRef as p,PureComponent as u}from"react";import d from"prop-types";import c from"react-s3-uploader/s3upload";import f from"@material-ui/core/CircularProgress";import h from"@material-ui/icons/PhotoCamera";import m from"./PostPreviewDialog/index.js";import b from"./Icons/AttachIcon.js";import g from"./IconButton/index.js";import{getS3DownloadLink as F,getS3SignedUrl as v}from"../clients/jsonApi/index.js";import{isNativeDetected as U}from"../utils/mobileDetect.js";import{jsxs as P,jsx as y,Fragment as S}from"react/jsx-runtime";function O(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function w(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?O(Object(t),!0).forEach((function(r){a(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):O(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function j(e){var r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var t,o=l(e);if(r){var i=l(this).constructor;t=Reflect.construct(o,arguments,i)}else t=o.apply(this,arguments);return n(this,t)}}var D="data-file-upload-button",I=function(n){i(d,u);var l=j(d);function d(t){var i,n;return r(this,d),i=l.call(this,t),a(o(i),"onFinish",e(s.mark((function e(){var r;return s.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,F(i.state.s3FileName);case 2:r=e.sent,i.setState({currentUpload:null,uploadingFileToS3:!1,openFileUploadPreviewDialog:i.props.openPreviewDialogOnUpload,s3FileUrl:r.url},(function(){i.props.onFinish&&i.props.onFinish(i.state.s3FileUrl,i.state.s3FileName,i.state.s3FileSize)}));case 4:case"end":return e.stop()}}),e)})))),a(o(i),"onError",(function(e){i.props.onError&&i.props.onError(e),console.error(e)})),a(o(i),"getSignedUrl",(n=e(s.mark((function e(r,t){var o;return s.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,v(r.name,r.type);case 3:o=e.sent,e.next=10;break;case 6:return e.prev=6,e.t0=e.catch(0),i.setState({uploadingFileToS3:null,currentUpload:null},(function(){i.onError(e.t0.message)})),e.abrupt("return");case 10:i.setState({s3FileUrl:o.signed_url,s3FileName:o.file_name,s3FileSize:r.size}),t(w(w({},o),{},{signedUrl:o.signed_url}));case 12:case"end":return e.stop()}}),e,null,[[0,6]])}))),function(e,r){return n.apply(this,arguments)})),a(o(i),"preprocess",(function(e,r){r(e)})),a(o(i),"uploadFile",(function(e){if(e.target.files[0]){i.clearUpload();var r=new c({fileElement:i.fileInput.current,getSignedUrl:i.getSignedUrl,preprocess:i.preprocess,onProgress:function(){},onFinishS3Put:i.onFinish,onError:i.onError});i.setState({uploadingFileToS3:!0,currentUpload:{uploader:r}})}})),a(o(i),"handleCloseFileUploadPreviewDialog",(function(){i.setState({openFileUploadPreviewDialog:!1})})),a(o(i),"handleShare",(function(e,r,t){i.setState({openFileUploadPreviewDialog:!1},(function(){i.props.handleShare&&i.props.handleShare(e,r,t)}))})),i.state={currentUpload:null,s3FileUrl:null,s3FileName:null,s3FileSize:null,uploadingFileToS3:!1,openFileUploadPreviewDialog:!1},i.fileInput=p(),i}return t(d,[{key:"clearUpload",value:function(){var e=this.state.currentUpload;e&&e.uploader&&e.uploader.abortUpload()}},{key:"renderUploadButton",value:function(){var e=U?h:b,r=a({},"data-file-upload-button","");return P("label",w(w({htmlFor:this.props.inputId},r),{},{children:[y("input",{ref:this.fileInput,id:this.props.inputId,type:"file",disabled:this.props.disabled,onChange:this.uploadFile,style:{display:"none"}}),y(g,{"data-testid":"".concat("fileUpload","_attachFileButton"),"aria-label":"File Upload",disabled:this.props.disabled,component:this.props.disabled?"button":"span",className:this.props.fileUploadIconClassName,disableRipple:this.props.disableRipple,tooltipProps:this.props.tooltipProps,children:y(e,{})})]}))}},{key:"render",value:function(){return P(S,{children:[this.state.uploadingFileToS3?y(f,{"data-testid":"generic_uploadProgress",size:18}):this.renderUploadButton(),this.state.openFileUploadPreviewDialog&&y(m,{open:this.state.openFileUploadPreviewDialog,fileUrl:this.state.s3FileUrl,fileName:this.state.s3FileName,fileSize:this.state.s3FileSize,handleShare:this.handleShare,handleClose:this.handleCloseFileUploadPreviewDialog,additionalFields:this.props.additionalFields,requiredFields:this.props.requiredFields,message:this.props.message})]})}}]),d}();I.propTypes={additionalFields:d.arrayOf(d.node),classes:d.shape({}),tooltipProps:d.shape({}),disableRipple:d.bool,disabled:d.bool,fileUploadIconClassName:d.string,handleShare:d.func,inputId:d.string,message:d.string,onError:d.func,onFinish:d.func,openPreviewDialogOnUpload:d.bool,requiredFields:d.arrayOf(d.string)},I.defaultProps={additionalFields:[],classes:{},disableRipple:!1,disabled:!1,fileUploadIconClassName:void 0,handleShare:void 0,inputId:"icon-button-file",message:void 0,onError:void 0,onFinish:void 0,openPreviewDialogOnUpload:!0,requiredFields:[],tooltipProps:{title:"Attach File"}};export{D as FILE_UPLOAD_BUTTON_DATA_ATTR,I as default};
1
+ import e from"@babel/runtime/helpers/defineProperty";import{memo as o}from"react";import i from"prop-types";import r from"./useFileUploadIconButton.js";import t from"@material-ui/core/CircularProgress";import l from"@material-ui/icons/PhotoCamera";import a from"./PostPreviewDialog/index.js";import n from"./Icons/AttachIcon.js";import s from"./IconButton/index.js";import{isNativeDetected as p}from"../utils/mobileDetect.js";import{jsxs as d,Fragment as c,jsx as f}from"react/jsx-runtime";function u(e,o){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);o&&(r=r.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),i.push.apply(i,r)}return i}function m(o){for(var i=1;i<arguments.length;i++){var r=null!=arguments[i]?arguments[i]:{};i%2?u(Object(r),!0).forEach((function(i){e(o,i,r[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(r)):u(Object(r)).forEach((function(e){Object.defineProperty(o,e,Object.getOwnPropertyDescriptor(r,e))}))}return o}var b="data-file-upload-button",h=[],g={title:"Attach File"};function P(o){var i,u,b=o.additionalFields,P=void 0===b?h:b,F=o.tooltipProps,O=void 0===F?g:F,v=o.disableRipple,y=void 0!==v&&v,j=o.disabled,w=void 0!==j&&j,U=o.fileUploadIconClassName,D=o.handleShare,S=o.inputId,I=void 0===S?"icon-button-file":S,C=o.message,E=o.onError,N=o.onFinish,x=o.openPreviewDialogOnUpload,q=void 0===x||x,z=o.requiredFields,B=void 0===z?h:z,R=r({onError:E,onFinish:N,openPreviewDialogOnUpload:q,handleShare:D}),A=R.state,T=R.fileInput,_=R.uploadFile,k=R.handleCloseFileUploadPreviewDialog,G=R.handleShare;return d(c,{children:[A.uploadingFileToS3?f(t,{"data-testid":"generic_uploadProgress",size:18}):(i=p?l:n,u=e({},"data-file-upload-button",""),d("label",m(m({htmlFor:I},u),{},{children:[f("input",{ref:T,id:I,type:"file",disabled:w,onChange:_,style:{display:"none"}}),f(s,{"data-testid":"".concat("fileUpload","_attachFileButton"),"aria-label":"File Upload",disabled:w,component:w?"button":"span",className:U,disableRipple:y,tooltipProps:O,children:f(i,{})})]}))),A.openFileUploadPreviewDialog&&f(a,{open:A.openFileUploadPreviewDialog,fileUrl:A.s3FileUrl,fileName:A.s3FileName,fileSize:A.s3FileSize,handleShare:G,handleClose:k,additionalFields:P,requiredFields:B,message:C})]})}P.propTypes={additionalFields:i.arrayOf(i.node),classes:i.shape({}),tooltipProps:i.shape({}),disableRipple:i.bool,disabled:i.bool,fileUploadIconClassName:i.string,handleShare:i.func,inputId:i.string,message:i.string,onError:i.func,onFinish:i.func,openPreviewDialogOnUpload:i.bool,requiredFields:i.arrayOf(i.string)};var F=o(P);export{b as FILE_UPLOAD_BUTTON_DATA_ATTR,F as default};
2
2
  //# sourceMappingURL=FileUploadIconButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileUploadIconButton.js","sources":["../../src/components/FileUploadIconButton.js"],"sourcesContent":["import { createRef, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport S3Upload from 'react-s3-uploader/s3upload';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport PhotoCameraIcon from '@material-ui/icons/PhotoCamera';\n\nimport PostPreviewDialog from '~components/PostPreviewDialog';\nimport AttachIcon from '~components/Icons/AttachIcon';\nimport IconButton from '~components/IconButton';\nimport { getS3SignedUrl, getS3DownloadLink } from '~/clients/jsonApi';\nimport { isNativeDetected } from '~/utils/mobileDetect';\n\nconst PAGE_NAME = 'fileUpload';\n\n// Data attr helps to identify the select file action; Is used to prevent the tooltip from closing\nexport const FILE_UPLOAD_BUTTON_DATA_ATTR = 'data-file-upload-button';\n\n/** @extends {PureComponent<any, any, any>} */\nclass FileUploadIconButton extends PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n currentUpload: null,\n\n s3FileUrl: null,\n s3FileName: null,\n s3FileSize: null,\n\n uploadingFileToS3: false,\n\n openFileUploadPreviewDialog: false,\n };\n\n this.fileInput = createRef();\n }\n\n onFinish = async () => {\n const s3DownloadLinkResponse = await getS3DownloadLink(this.state.s3FileName);\n this.setState(\n {\n currentUpload: null,\n uploadingFileToS3: false,\n openFileUploadPreviewDialog: this.props.openPreviewDialogOnUpload,\n s3FileUrl: s3DownloadLinkResponse.url,\n },\n () => {\n if (this.props.onFinish)\n this.props.onFinish(this.state.s3FileUrl, this.state.s3FileName, this.state.s3FileSize);\n }\n );\n };\n\n onError = fileUploadingError => {\n if (this.props.onError) this.props.onError(fileUploadingError);\n console.error(fileUploadingError);\n };\n\n getSignedUrl = async (file, callback) => {\n let data;\n try {\n data = await getS3SignedUrl(file.name, file.type);\n } catch (e) {\n this.setState(\n {\n uploadingFileToS3: null,\n currentUpload: null,\n },\n () => {\n this.onError(e.message);\n }\n );\n return;\n }\n\n this.setState({\n s3FileUrl: data.signed_url,\n s3FileName: data.file_name,\n s3FileSize: file.size,\n });\n\n // NOTE: Add node for 'signedUrl' which is the expected name by uploader component\n callback({\n ...data,\n signedUrl: data.signed_url,\n });\n };\n\n preprocess = (file, next) => {\n next(file);\n };\n\n uploadFile = event => {\n if (!event.target.files[0]) {\n return;\n }\n\n this.clearUpload();\n const uploader = new S3Upload({\n fileElement: this.fileInput.current,\n getSignedUrl: this.getSignedUrl,\n preprocess: this.preprocess,\n onProgress: () => {}, // NOTE: Prevents logging to console\n onFinishS3Put: this.onFinish,\n onError: this.onError,\n });\n\n this.setState({\n uploadingFileToS3: true,\n currentUpload: {\n uploader,\n },\n });\n };\n\n clearUpload() {\n const { currentUpload } = this.state;\n if (currentUpload && currentUpload.uploader) {\n currentUpload.uploader.abortUpload();\n }\n }\n\n handleCloseFileUploadPreviewDialog = () => {\n this.setState({ openFileUploadPreviewDialog: false });\n };\n\n handleShare = (comment, fileName, fileSize) => {\n this.setState({ openFileUploadPreviewDialog: false }, () => {\n if (this.props.handleShare) {\n this.props.handleShare(comment, fileName, fileSize);\n }\n });\n };\n\n renderUploadButton() {\n const Icon = isNativeDetected ? PhotoCameraIcon : AttachIcon;\n const labelDataAttributes = { [FILE_UPLOAD_BUTTON_DATA_ATTR]: '' };\n\n return (\n <label htmlFor={this.props.inputId} {...labelDataAttributes}>\n <input\n ref={this.fileInput}\n id={this.props.inputId}\n type=\"file\"\n disabled={this.props.disabled}\n onChange={this.uploadFile}\n style={{ display: 'none' }}\n />\n <IconButton\n data-testid={`${PAGE_NAME}_attachFileButton`}\n aria-label=\"File Upload\"\n disabled={this.props.disabled}\n component={this.props.disabled ? 'button' : 'span'}\n className={this.props.fileUploadIconClassName}\n disableRipple={this.props.disableRipple}\n tooltipProps={this.props.tooltipProps}\n >\n <Icon />\n </IconButton>\n </label>\n );\n }\n\n render() {\n return (\n <>\n {this.state.uploadingFileToS3 ? (\n <CircularProgress data-testid=\"generic_uploadProgress\" size={18} />\n ) : (\n this.renderUploadButton()\n )}\n\n {this.state.openFileUploadPreviewDialog && (\n <PostPreviewDialog\n open={this.state.openFileUploadPreviewDialog}\n fileUrl={this.state.s3FileUrl}\n fileName={this.state.s3FileName}\n fileSize={this.state.s3FileSize}\n handleShare={this.handleShare}\n handleClose={this.handleCloseFileUploadPreviewDialog}\n additionalFields={this.props.additionalFields}\n requiredFields={this.props.requiredFields}\n message={this.props.message}\n />\n )}\n </>\n );\n }\n}\n\nFileUploadIconButton.propTypes = {\n additionalFields: PropTypes.arrayOf(PropTypes.node),\n classes: PropTypes.shape({}),\n tooltipProps: PropTypes.shape({}),\n disableRipple: PropTypes.bool,\n disabled: PropTypes.bool,\n fileUploadIconClassName: PropTypes.string,\n handleShare: PropTypes.func,\n inputId: PropTypes.string,\n message: PropTypes.string,\n onError: PropTypes.func,\n onFinish: PropTypes.func,\n openPreviewDialogOnUpload: PropTypes.bool,\n requiredFields: PropTypes.arrayOf(PropTypes.string),\n};\n\nFileUploadIconButton.defaultProps = {\n additionalFields: [],\n classes: {},\n disableRipple: false,\n disabled: false,\n fileUploadIconClassName: undefined,\n handleShare: undefined,\n inputId: 'icon-button-file',\n message: undefined,\n onError: undefined,\n onFinish: undefined,\n openPreviewDialogOnUpload: true,\n requiredFields: [],\n tooltipProps: { title: 'Attach File' },\n};\n\nexport default FileUploadIconButton;\n"],"names":["FILE_UPLOAD_BUTTON_DATA_ATTR","FileUploadIconButton","_PureComponent","_inherits","PureComponent","_super","_createSuper","props","_this","_ref2","_classCallCheck","this","call","_defineProperty","_assertThisInitialized","_asyncToGenerator","_regeneratorRuntime","mark","_callee","s3DownloadLinkResponse","wrap","_context","prev","next","getS3DownloadLink","state","s3FileName","sent","setState","currentUpload","uploadingFileToS3","openFileUploadPreviewDialog","openPreviewDialogOnUpload","s3FileUrl","url","onFinish","s3FileSize","stop","fileUploadingError","onError","console","error","_callee2","file","callback","data","_context2","getS3SignedUrl","name","type","t0","message","abrupt","signed_url","file_name","size","signedUrl","_x","_x2","apply","arguments","event","target","files","clearUpload","uploader","S3Upload","fileElement","fileInput","current","getSignedUrl","preprocess","onProgress","onFinishS3Put","comment","fileName","fileSize","handleShare","createRef","_createClass","key","value","abortUpload","Icon","isNativeDetected","PhotoCameraIcon","AttachIcon","labelDataAttributes","_jsxs","_objectSpread","htmlFor","inputId","children","_jsx","ref","id","disabled","onChange","uploadFile","style","display","IconButton","concat","component","className","fileUploadIconClassName","disableRipple","tooltipProps","_Fragment","CircularProgress","renderUploadButton","PostPreviewDialog","open","fileUrl","handleClose","handleCloseFileUploadPreviewDialog","additionalFields","requiredFields","propTypes","PropTypes","arrayOf","node","classes","shape","bool","string","func","defaultProps","undefined","title"],"mappings":"k+DAYA,IAGaA,EAA+B,0BAGtCC,EAAoB,SAAAC,GAAAC,EAAAF,EAASG,GAAT,IAAAC,EAAAC,EAAAL,GACxB,SAAAA,EAAYM,GAAO,IAAAC,EAuCJC,EAxBgB,OAfZC,EAAAC,KAAAV,GACjBO,EAAAH,EAAAO,KAAAD,KAAMJ,GAAOM,EAiBJC,EAAAN,GAAA,WAAAO,EAAAC,EAAAC,MAAA,SAAAC,IAAA,IAAAC,EAAA,OAAAH,EAAAI,MAAA,SAAAC,GAAA,OAAA,OAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAAA,OAAAF,EAAAE,KAAA,EAC4BC,EAAkBhB,EAAKiB,MAAMC,YAAW,KAAA,EAAvEP,EAAsBE,EAAAM,KAC5BnB,EAAKoB,SACH,CACEC,cAAe,KACfC,mBAAmB,EACnBC,4BAA6BvB,EAAKD,MAAMyB,0BACxCC,UAAWd,EAAuBe,MAEpC,WACM1B,EAAKD,MAAM4B,UACb3B,EAAKD,MAAM4B,SAAS3B,EAAKiB,MAAMQ,UAAWzB,EAAKiB,MAAMC,WAAYlB,EAAKiB,MAAMW,WAChF,IACA,KAAA,EAAA,IAAA,MAAA,OAAAf,EAAAgB,OAAA,GAAAnB,EACH,MAAAL,EAESC,EAAAN,GAAA,WAAA,SAAA8B,GACJ9B,EAAKD,MAAMgC,SAAS/B,EAAKD,MAAMgC,QAAQD,GAC3CE,QAAQC,MAAMH,MACfzB,EAAAC,EAAAN,GAAA,gBAEcC,EAAAM,EAAAC,EAAAC,MAAA,SAAAyB,EAAOC,EAAMC,GAAQ,IAAAC,EAAA,OAAA7B,EAAAI,MAAA,SAAA0B,GAAA,OAAA,OAAAA,EAAAxB,KAAAwB,EAAAvB,MAAA,KAAA,EAAA,OAAAuB,EAAAxB,KAAA,EAAAwB,EAAAvB,KAAA,EAGnBwB,EAAeJ,EAAKK,KAAML,EAAKM,MAAK,KAAA,EAAjDJ,EAAIC,EAAAnB,KAAAmB,EAAAvB,KAAA,GAAA,MAAA,KAAA,EAUF,OAVEuB,EAAAxB,KAAA,EAAAwB,EAAAI,GAAAJ,EAAA,MAAA,GAEJtC,EAAKoB,SACH,CACEE,kBAAmB,KACnBD,cAAe,OAEjB,WACErB,EAAK+B,QAAQO,EAAEK,GAAAA,QACjB,IACAL,EAAAM,OAAA,UAAA,KAAA,GAIJ5C,EAAKoB,SAAS,CACZK,UAAWY,EAAKQ,WAChB3B,WAAYmB,EAAKS,UACjBlB,WAAYO,EAAKY,OAInBX,SACKC,GAAI,CAAA,EAAA,CACPW,UAAWX,EAAKQ,cACf,KAAA,GAAA,IAAA,MAAA,OAAAP,EAAAT,OAAA,GAAAK,EAAA,KAAA,CAAA,CAAA,EAAA,IACJ,KAAA,SAAAe,EAAAC,GAAA,OAAAjD,EAAAkD,MAAAhD,KAAAiD,UAAA,IAAA/C,EAAAC,EAAAN,GAAA,cAEY,SAACmC,EAAMpB,GAClBA,EAAKoB,MACN9B,EAEYC,EAAAN,GAAA,cAAA,SAAAqD,GACX,GAAKA,EAAMC,OAAOC,MAAM,GAAxB,CAIAvD,EAAKwD,cACL,IAAMC,EAAW,IAAIC,EAAS,CAC5BC,YAAa3D,EAAK4D,UAAUC,QAC5BC,aAAc9D,EAAK8D,aACnBC,WAAY/D,EAAK+D,WACjBC,WAAY,WAAQ,EACpBC,cAAejE,EAAK2B,SACpBI,QAAS/B,EAAK+B,UAGhB/B,EAAKoB,SAAS,CACZE,mBAAmB,EACnBD,cAAe,CACboC,SAAAA,IAfJ,KAkBDpD,EAAAC,EAAAN,GAAA,sCASoC,WACnCA,EAAKoB,SAAS,CAAEG,6BAA6B,OAC9ClB,EAAAC,EAAAN,GAAA,eAEa,SAACkE,EAASC,EAAUC,GAChCpE,EAAKoB,SAAS,CAAEG,6BAA6B,IAAS,WAChDvB,EAAKD,MAAMsE,aACbrE,EAAKD,MAAMsE,YAAYH,EAASC,EAAUC,EAE9C,OA7GApE,EAAKiB,MAAQ,CACXI,cAAe,KAEfI,UAAW,KACXP,WAAY,KACZU,WAAY,KAEZN,mBAAmB,EAEnBC,6BAA6B,GAG/BvB,EAAK4D,UAAYU,IAAYtE,CAC/B,CAwJC,OAxJAuE,EAAA9E,EAAA,CAAA,CAAA+E,IAAA,cAAAC,MAgFD,WACE,IAAQpD,EAAkBlB,KAAKc,MAAvBI,cACJA,GAAiBA,EAAcoC,UACjCpC,EAAcoC,SAASiB,aAE3B,GAAC,CAAAF,IAAA,qBAAAC,MAcD,WACE,IAAME,EAAOC,EAAmBC,EAAkBC,EAC5CC,EAAmB1E,EAAA,CAAA,EAzHe,0BAyHsB,IAE9D,OACE2E,EAAA,QAAAC,EAAAA,EAAA,CAAOC,QAAS/E,KAAKJ,MAAMoF,SAAaJ,GAAmB,GAAA,CAAAK,SACzD,CAAAC,EAAA,QAAA,CACEC,IAAKnF,KAAKyD,UACV2B,GAAIpF,KAAKJ,MAAMoF,QACf1C,KAAK,OACL+C,SAAUrF,KAAKJ,MAAMyF,SACrBC,SAAUtF,KAAKuF,WACfC,MAAO,CAAEC,QAAS,UAEpBP,EAACQ,EAAU,CACT,cAAA,GAAAC,OAzIQ,aAyIqC,qBAC7C,aAAW,cACXN,SAAUrF,KAAKJ,MAAMyF,SACrBO,UAAW5F,KAAKJ,MAAMyF,SAAW,SAAW,OAC5CQ,UAAW7F,KAAKJ,MAAMkG,wBACtBC,cAAe/F,KAAKJ,MAAMmG,cAC1BC,aAAchG,KAAKJ,MAAMoG,aAAaf,SAEtCC,EAACV,EAAI,SAIb,GAAC,CAAAH,IAAA,SAAAC,MAED,WACE,OACEO,EAAAoB,EAAA,CAAAhB,SAAA,CACGjF,KAAKc,MAAMK,kBACV+D,EAACgB,EAAgB,CAAC,cAAY,yBAAyBtD,KAAM,KAE7D5C,KAAKmG,qBAGNnG,KAAKc,MAAMM,6BACV8D,EAACkB,EAAiB,CAChBC,KAAMrG,KAAKc,MAAMM,4BACjBkF,QAAStG,KAAKc,MAAMQ,UACpB0C,SAAUhE,KAAKc,MAAMC,WACrBkD,SAAUjE,KAAKc,MAAMW,WACrByC,YAAalE,KAAKkE,YAClBqC,YAAavG,KAAKwG,mCAClBC,iBAAkBzG,KAAKJ,MAAM6G,iBAC7BC,eAAgB1G,KAAKJ,MAAM8G,eAC3BlE,QAASxC,KAAKJ,MAAM4C,YAK9B,KAAClD,CAAA,CAzKuB,GA4K1BA,EAAqBqH,UAAY,CAC/BF,iBAAkBG,EAAUC,QAAQD,EAAUE,MAC9CC,QAASH,EAAUI,MAAM,IACzBhB,aAAcY,EAAUI,MAAM,IAC9BjB,cAAea,EAAUK,KACzB5B,SAAUuB,EAAUK,KACpBnB,wBAAyBc,EAAUM,OACnChD,YAAa0C,EAAUO,KACvBnC,QAAS4B,EAAUM,OACnB1E,QAASoE,EAAUM,OACnBtF,QAASgF,EAAUO,KACnB3F,SAAUoF,EAAUO,KACpB9F,0BAA2BuF,EAAUK,KACrCP,eAAgBE,EAAUC,QAAQD,EAAUM,SAG9C5H,EAAqB8H,aAAe,CAClCX,iBAAkB,GAClBM,QAAS,CAAE,EACXhB,eAAe,EACfV,UAAU,EACVS,6BAAyBuB,EACzBnD,iBAAamD,EACbrC,QAAS,mBACTxC,aAAS6E,EACTzF,aAASyF,EACT7F,cAAU6F,EACVhG,2BAA2B,EAC3BqF,eAAgB,GAChBV,aAAc,CAAEsB,MAAO"}
1
+ {"version":3,"file":"FileUploadIconButton.js","sources":["../../src/components/FileUploadIconButton.js"],"sourcesContent":["import { memo } from 'react';\nimport PropTypes from 'prop-types';\nimport useFileUploadIconButton from './useFileUploadIconButton';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport PhotoCameraIcon from '@material-ui/icons/PhotoCamera';\n\nimport PostPreviewDialog from '~components/PostPreviewDialog';\nimport AttachIcon from '~components/Icons/AttachIcon';\nimport IconButton from '~components/IconButton';\nimport { isNativeDetected } from '~/utils/mobileDetect';\n\nconst PAGE_NAME = 'fileUpload';\n\n// Data attr helps to identify the select file action; Is used to prevent the tooltip from closing\nexport const FILE_UPLOAD_BUTTON_DATA_ATTR = 'data-file-upload-button';\n\nconst emptyFields = [];\nconst defaultTooltipProps = { title: 'Attach File' };\n\n/** @param {any} props Preserve the legacy component's permissive public prop type. */\nfunction FileUploadIconButton({\n additionalFields = emptyFields,\n tooltipProps = defaultTooltipProps,\n disableRipple = false,\n disabled = false,\n fileUploadIconClassName,\n handleShare: onShare,\n inputId = 'icon-button-file',\n message,\n onError,\n onFinish,\n openPreviewDialogOnUpload = true,\n requiredFields = emptyFields,\n}) {\n const { state, fileInput, uploadFile, handleCloseFileUploadPreviewDialog, handleShare } =\n useFileUploadIconButton({ onError, onFinish, openPreviewDialogOnUpload, handleShare: onShare });\n const renderUploadButton = () => {\n const Icon = isNativeDetected ? PhotoCameraIcon : AttachIcon;\n const labelDataAttributes = { [FILE_UPLOAD_BUTTON_DATA_ATTR]: '' };\n\n return (\n <label htmlFor={inputId} {...labelDataAttributes}>\n <input\n ref={fileInput}\n id={inputId}\n type=\"file\"\n disabled={disabled}\n onChange={uploadFile}\n style={{ display: 'none' }}\n />\n <IconButton\n data-testid={`${PAGE_NAME}_attachFileButton`}\n aria-label=\"File Upload\"\n disabled={disabled}\n component={disabled ? 'button' : 'span'}\n className={fileUploadIconClassName}\n disableRipple={disableRipple}\n tooltipProps={tooltipProps}\n >\n <Icon />\n </IconButton>\n </label>\n );\n };\n\n return (\n <>\n {state.uploadingFileToS3 ? (\n <CircularProgress data-testid=\"generic_uploadProgress\" size={18} />\n ) : (\n renderUploadButton()\n )}\n\n {state.openFileUploadPreviewDialog && (\n <PostPreviewDialog\n open={state.openFileUploadPreviewDialog}\n fileUrl={state.s3FileUrl}\n fileName={state.s3FileName}\n fileSize={state.s3FileSize}\n handleShare={handleShare}\n handleClose={handleCloseFileUploadPreviewDialog}\n additionalFields={additionalFields}\n requiredFields={requiredFields}\n message={message}\n />\n )}\n </>\n );\n}\n\nFileUploadIconButton.propTypes = {\n additionalFields: PropTypes.arrayOf(PropTypes.node),\n classes: PropTypes.shape({}),\n tooltipProps: PropTypes.shape({}),\n disableRipple: PropTypes.bool,\n disabled: PropTypes.bool,\n fileUploadIconClassName: PropTypes.string,\n handleShare: PropTypes.func,\n inputId: PropTypes.string,\n message: PropTypes.string,\n onError: PropTypes.func,\n onFinish: PropTypes.func,\n openPreviewDialogOnUpload: PropTypes.bool,\n requiredFields: PropTypes.arrayOf(PropTypes.string),\n};\n\nexport default memo(FileUploadIconButton);\n"],"names":["FILE_UPLOAD_BUTTON_DATA_ATTR","emptyFields","defaultTooltipProps","title","FileUploadIconButton","_ref","Icon","labelDataAttributes","_ref$additionalFields","additionalFields","_ref$tooltipProps","tooltipProps","_ref$disableRipple","disableRipple","_ref$disabled","disabled","fileUploadIconClassName","onShare","handleShare","_ref$inputId","inputId","message","onError","onFinish","_ref$openPreviewDialo","openPreviewDialogOnUpload","_ref$requiredFields","requiredFields","_useFileUploadIconBut","useFileUploadIconButton","state","fileInput","uploadFile","handleCloseFileUploadPreviewDialog","_jsxs","_Fragment","children","uploadingFileToS3","_jsx","CircularProgress","size","isNativeDetected","PhotoCameraIcon","AttachIcon","_defineProperty","_objectSpread","htmlFor","ref","id","type","onChange","style","display","IconButton","concat","component","className","openFileUploadPreviewDialog","PostPreviewDialog","open","fileUrl","s3FileUrl","fileName","s3FileName","fileSize","s3FileSize","handleClose","propTypes","PropTypes","arrayOf","node","classes","shape","bool","string","func","memo"],"mappings":"yiCAWA,IAGaA,EAA+B,0BAEtCC,EAAc,GACdC,EAAsB,CAAEC,MAAO,eAGrC,SAASC,EAaNC,GAAA,IAIOC,EACAC,EALPC,EAAAH,EAZDI,iBAAAA,aAAmBR,EAAWO,EAAAE,EAAAL,EAC9BM,aAAAA,aAAeT,EAAmBQ,EAAAE,EAAAP,EAClCQ,cAAAA,cAAqBD,EAAAE,EAAAT,EACrBU,SAAAA,cAAgBD,EAChBE,IAAAA,wBACaC,IAAbC,YAAWC,EAAAd,EACXe,QAAAA,aAAU,mBAAkBD,EAC5BE,IAAAA,QACAC,IAAAA,QACAC,IAAAA,SAAQC,EAAAnB,EACRoB,0BAAAA,cAAgCD,EAAAE,EAAArB,EAChCsB,eAAAA,aAAiB1B,EAAWyB,EAE5BE,EACEC,EAAwB,CAAEP,QAAAA,EAASC,SAAAA,EAAUE,0BAAAA,EAA2BP,YAAaD,IAD/Ea,IAAAA,MAAOC,IAAAA,UAAWC,IAAAA,WAAYC,IAAAA,mCAAoCf,IAAAA,YA+B1E,OACEgB,EAAAC,EAAA,CAAAC,SAAA,CACGN,EAAMO,kBACLC,EAACC,EAAgB,CAAC,cAAY,yBAAyBC,KAAM,MA/B3DlC,EAAOmC,EAAmBC,EAAkBC,EAC5CpC,EAAmBqC,EAAA,CAAA,EAxBe,0BAwBsB,IAG5DV,EAAA,QAAAW,EAAAA,EAAA,CAAOC,QAAS1B,GAAab,GAAmB,GAAA,CAAA6B,SAC9C,CAAAE,EAAA,QAAA,CACES,IAAKhB,EACLiB,GAAI5B,EACJ6B,KAAK,OACLlC,SAAUA,EACVmC,SAAUlB,EACVmB,MAAO,CAAEC,QAAS,UAEpBd,EAACe,EAAU,CACT,cAAA,GAAAC,OAxCQ,aAwCqC,qBAC7C,aAAW,cACXvC,SAAUA,EACVwC,UAAWxC,EAAW,SAAW,OACjCyC,UAAWxC,EACXH,cAAeA,EACfF,aAAcA,EAAayB,SAE3BE,EAAChC,EAAI,WAcRwB,EAAM2B,6BACLnB,EAACoB,EAAiB,CAChBC,KAAM7B,EAAM2B,4BACZG,QAAS9B,EAAM+B,UACfC,SAAUhC,EAAMiC,WAChBC,SAAUlC,EAAMmC,WAChB/C,YAAaA,EACbgD,YAAajC,EACbxB,iBAAkBA,EAClBkB,eAAgBA,EAChBN,QAASA,MAKnB,CAEAjB,EAAqB+D,UAAY,CAC/B1D,iBAAkB2D,EAAUC,QAAQD,EAAUE,MAC9CC,QAASH,EAAUI,MAAM,IACzB7D,aAAcyD,EAAUI,MAAM,IAC9B3D,cAAeuD,EAAUK,KACzB1D,SAAUqD,EAAUK,KACpBzD,wBAAyBoD,EAAUM,OACnCxD,YAAakD,EAAUO,KACvBvD,QAASgD,EAAUM,OACnBrD,QAAS+C,EAAUM,OACnBpD,QAAS8C,EAAUO,KACnBpD,SAAU6C,EAAUO,KACpBlD,0BAA2B2C,EAAUK,KACrC9C,eAAgByC,EAAUC,QAAQD,EAAUM,SAG9C,IAAeE,EAAAA,EAAKxE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useFileUploadIconButton.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFileUploadIconButton.test.d.ts","sourceRoot":"","sources":["../../../src/components/__tests__/useFileUploadIconButton.test.js"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ export default function useFileUploadIconButton(props: any): {
2
+ state: {
3
+ currentUpload: null;
4
+ s3FileUrl: null;
5
+ s3FileName: null;
6
+ s3FileSize: null;
7
+ uploadingFileToS3: boolean;
8
+ openFileUploadPreviewDialog: boolean;
9
+ };
10
+ fileInput: import("react").MutableRefObject<null>;
11
+ uploadFile: (event: any) => void;
12
+ handleCloseFileUploadPreviewDialog: () => void;
13
+ handleShare: (comment: any, fileName: any, fileSize: any) => void;
14
+ };
15
+ //# sourceMappingURL=useFileUploadIconButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFileUploadIconButton.d.ts","sourceRoot":"","sources":["../../src/components/useFileUploadIconButton.js"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,KAAK,KAAA;;;;;;;;;;;;;EAmGpD"}
@@ -0,0 +1,2 @@
1
+ import e from"@babel/runtime/helpers/asyncToGenerator";import r from"@babel/runtime/helpers/defineProperty";import n from"@babel/runtime/helpers/toConsumableArray";import t from"@babel/runtime/helpers/slicedToArray";import o from"@babel/runtime/regenerator";import{useState as i,useRef as l,useLayoutEffect as a}from"react";import p from"react-s3-uploader/s3upload";import{getS3SignedUrl as s,getS3DownloadLink as u}from"../clients/jsonApi/index.js";function c(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function f(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?c(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):c(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function d(r){var c=i({currentUpload:null,s3FileUrl:null,s3FileName:null,s3FileSize:null,uploadingFileToS3:!1,openFileUploadPreviewDialog:!1}),d=t(c,2),m=d[0],g=d[1],h=l(null),b=l({props:r,state:m}),y=l([]);a((function(){b.current={props:r,state:m};var e=y.current;y.current=[],e.forEach((function(e){var r=b.current;if("finish"===e.type&&r.props.onFinish)r.props.onFinish(r.state.s3FileUrl,r.state.s3FileName,r.state.s3FileSize);else if("error"===e.type)r.props.onError&&r.props.onError(e.message),console.error(e.message);else if("share"===e.type&&r.props.handleShare){var t;(t=r.props).handleShare.apply(t,n(e.args))}}))}));var F,v,O=function(e,r){r&&y.current.push(r),g((function(r){return f(f({},r),e)}))},U=function(e){b.current.props.onError&&b.current.props.onError(e),console.error(e)},w=(F=e(o.mark((function e(r,n){var t;return o.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,s(r.name,r.type);case 3:t=e.sent,e.next=10;break;case 6:return e.prev=6,e.t0=e.catch(0),O({uploadingFileToS3:null,currentUpload:null},{type:"error",message:e.t0.message}),e.abrupt("return");case 10:O({s3FileUrl:t.signed_url,s3FileName:t.file_name,s3FileSize:r.size}),n(f(f({},t),{},{signedUrl:t.signed_url}));case 12:case"end":return e.stop()}}),e,null,[[0,6]])}))),function(e,r){return F.apply(this,arguments)}),P=(v=e(o.mark((function e(){var r;return o.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u(b.current.state.s3FileName);case 2:r=e.sent,O({currentUpload:null,uploadingFileToS3:!1,openFileUploadPreviewDialog:b.current.props.openPreviewDialogOnUpload,s3FileUrl:r.url},{type:"finish"});case 4:case"end":return e.stop()}}),e)}))),function(){return v.apply(this,arguments)});return{state:m,fileInput:h,uploadFile:function(e){if(e.target.files[0]){var r=b.current.state.currentUpload;r&&r.uploader&&r.uploader.abortUpload();var n=new p({fileElement:h.current,getSignedUrl:w,preprocess:function(e,r){return r(e)},onProgress:function(){},onFinishS3Put:P,onError:U});O({uploadingFileToS3:!0,currentUpload:{uploader:n}})}},handleCloseFileUploadPreviewDialog:function(){return O({openFileUploadPreviewDialog:!1})},handleShare:function(e,r,n){return O({openFileUploadPreviewDialog:!1},{type:"share",args:[e,r,n]})}}}export{d as default};
2
+ //# sourceMappingURL=useFileUploadIconButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFileUploadIconButton.js","sources":["../../src/components/useFileUploadIconButton.js"],"sourcesContent":["import { useLayoutEffect, useRef, useState } from 'react';\nimport S3Upload from 'react-s3-uploader/s3upload';\nimport { getS3SignedUrl, getS3DownloadLink } from '~/clients/jsonApi';\n\nexport default function useFileUploadIconButton(props) {\n const [state, setState] = useState({\n currentUpload: null,\n s3FileUrl: null,\n s3FileName: null,\n s3FileSize: null,\n uploadingFileToS3: false,\n openFileUploadPreviewDialog: false,\n });\n const fileInput = useRef(null);\n const latest = useRef({ props, state });\n const notifications = useRef([]);\n\n // The uploader retains callbacks; notify with current data only after the UI commits.\n useLayoutEffect(() => {\n latest.current = { props, state };\n const pending = notifications.current;\n notifications.current = [];\n pending.forEach(notification => {\n const current = latest.current;\n if (notification.type === 'finish' && current.props.onFinish) {\n current.props.onFinish(\n current.state.s3FileUrl,\n current.state.s3FileName,\n current.state.s3FileSize\n );\n } else if (notification.type === 'error') {\n if (current.props.onError) current.props.onError(notification.message);\n console.error(notification.message);\n } else if (notification.type === 'share' && current.props.handleShare) {\n current.props.handleShare(...notification.args);\n }\n });\n });\n\n const update = (patch, notification) => {\n if (notification) notifications.current.push(notification);\n setState(current => ({ ...current, ...patch }));\n };\n\n const onError = error => {\n if (latest.current.props.onError) latest.current.props.onError(error);\n console.error(error);\n };\n\n const getSignedUrl = async (file, callback) => {\n let data;\n try {\n data = await getS3SignedUrl(file.name, file.type);\n } catch (error) {\n update(\n { uploadingFileToS3: null, currentUpload: null },\n { type: 'error', message: error.message }\n );\n return;\n }\n update({ s3FileUrl: data.signed_url, s3FileName: data.file_name, s3FileSize: file.size });\n callback({ ...data, signedUrl: data.signed_url });\n };\n\n const onFinish = async () => {\n const response = await getS3DownloadLink(latest.current.state.s3FileName);\n update(\n {\n currentUpload: null,\n uploadingFileToS3: false,\n openFileUploadPreviewDialog: latest.current.props.openPreviewDialogOnUpload,\n s3FileUrl: response.url,\n },\n { type: 'finish' }\n );\n };\n\n const uploadFile = event => {\n if (!event.target.files[0]) return;\n const { currentUpload } = latest.current.state;\n if (currentUpload && currentUpload.uploader) currentUpload.uploader.abortUpload();\n const uploader = new S3Upload({\n fileElement: fileInput.current,\n getSignedUrl,\n preprocess: (file, next) => next(file),\n onProgress: () => undefined, // Prevent the uploader's default progress logging.\n onFinishS3Put: onFinish,\n onError,\n });\n update({ uploadingFileToS3: true, currentUpload: { uploader } });\n };\n\n return {\n state,\n fileInput,\n uploadFile,\n handleCloseFileUploadPreviewDialog: () => update({ openFileUploadPreviewDialog: false }),\n handleShare: (comment, fileName, fileSize) =>\n update(\n { openFileUploadPreviewDialog: false },\n { type: 'share', args: [comment, fileName, fileSize] }\n ),\n };\n}\n"],"names":["useFileUploadIconButton","props","_useState","useState","currentUpload","s3FileUrl","s3FileName","s3FileSize","uploadingFileToS3","openFileUploadPreviewDialog","_useState2","_slicedToArray","state","setState","fileInput","useRef","latest","notifications","useLayoutEffect","current","pending","forEach","notification","type","onFinish","onError","message","console","error","handleShare","_current$props","args","_ref","_ref2","update","patch","push","getSignedUrl","_asyncToGenerator","_regeneratorRuntime","mark","_callee","file","callback","data","wrap","_context","prev","next","getS3SignedUrl","name","sent","t0","abrupt","signed_url","file_name","size","signedUrl","stop","_x","_x2","apply","this","arguments","_callee2","response","_context2","getS3DownloadLink","openPreviewDialogOnUpload","url","uploadFile","event","target","files","uploader","abortUpload","S3Upload","fileElement","preprocess","onProgress","onFinishS3Put","handleCloseFileUploadPreviewDialog","comment","fileName","fileSize"],"mappings":"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"}
@@ -248,7 +248,7 @@ const validateDsn = dsn => {
248
248
 
249
249
  const MCP_SERVER_VERSION = '1.5.0';
250
250
 
251
- var version = "3.75.0";
251
+ var version = "3.76.0-1";
252
252
 
253
253
  const CORVA_UI_VERSION = version;
254
254
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@corva/ui",
3
- "version": "3.75.0",
3
+ "version": "3.76.0-1",
4
4
  "license": "UNLICENSED",
5
5
  "description": "Shared components/utils for Corva ui projects",
6
6
  "repository": {