{"version":3,"file":"photo-loader-b7f45ebc.js","sources":["../../../client/src/javascripts/customer_pages/_photo-loader/photo-loader.jsx"],"sourcesContent":["import createReactClass from 'create-react-class';\n\n// Import Libraries\nimport React from 'react';\nimport classNames from 'classnames';\n\n// Import JS Modules\nimport { WithViewportSize } from '../_utils/hoc/with-viewport-size';\nimport { builderDispatch, WebUI } from '../_utils/ui';\nimport Failures from './failures';\nimport FocusTrap from 'focus-trap-react';\nimport getImageSources from './image-sources';\nimport LoaderBase from './loader-mixins/loader-base';\nimport LoaderFooter from './loader-footer';\nimport LoaderNav from './loader-nav';\nimport UploadErrors from './utils/upload-errors';\nimport LoaderAdditionalOptions from './additional-options';\nimport sendToGoogleAnalytics from '../_prism-builder/desktop/slot-tools/send-to-google-analytics';\nimport ImageUploadFileValidator from '../_utils/image-upload-file-validator';\nimport LoaderSizeMixin from './loader-mixins/loader-size-mixin';\n\n\nconst Loader = createReactClass({\n mixins: [LoaderBase, LoaderSizeMixin],\n getInitialState() {\n const windowSize = this.getWindowSize();\n\n return Object.assign(windowSize, {\n excludeServices: [],\n focus: false,\n hideMenu: false,\n loading: false,\n showUploadErrorsModal: false,\n source: 0,\n target_album: null,\n uploadErrors: [],\n fileUploadValidator: new ImageUploadFileValidator(),\n });\n },\n\n componentDidMount() {\n this.handleResize();\n window.addEventListener('resize', this.handleResize);\n },\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.handleResize);\n },\n\n render() {\n if (!this.state.upload_url) {\n return (\n <div\n aria-hidden=\"true\"\n className=\"modal fade image-loader\"\n role=\"dialog\">\n <div className=\"modal-dialog modal-xl\" role=\"document\" />\n </div>\n );\n }\n\n const {\n viewport: { isMobile },\n } = this.props;\n const imageSources = getImageSources();\n const activeImageSources = imageSources.filter(source => !this.state.excludeServices.includes(source.service))\n const {\n modal: { width: modalWidth, height: modalHeight },\n } = this.loaderDimensions();\n let $failures, $uploadErrorsModal;\n\n const $sources = activeImageSources.map((imageSource, i) => {\n const sourceComponentProps = {\n callToActionButtonText: this.state.callToActionButtonText,\n height: this.state.windowHeight,\n isActive: this.state.source === i,\n isMobile,\n key: i,\n onFilesSelected: this.handleFilesSelected,\n onHideMenu: this.handleHideMenu,\n onTargetAlbumSelected: this.handleTargetAlbumSelected,\n onUploaded: this.handleFileUploaded,\n onUploadError: this.handleFileUploadError,\n optimiseUploadFiles: this.state.optimiseUploadFiles,\n ref: imageSource.service,\n service: imageSource.service,\n targetAlbum: this.state.target_album,\n title: imageSource.title,\n fileValidator: this.state.fileUploadValidator,\n };\n return <imageSource.component {...sourceComponentProps} />;\n });\n\n if (this.state.showFailures) {\n $failures = (\n <Failures\n numberOfFailures={this.number_of_errors}\n shouldRetry\n onIgnore={this.handleAbort}\n onRetry={this.handleAddImages}\n errorMessage={this.errorMessage}\n />\n );\n }\n\n if (this.state.showUploadErrorsModal) {\n $uploadErrorsModal = (\n <UploadErrors\n errors={this.state.uploadErrors}\n isOpen={this.state.showUploadErrorsModal}\n onClose={this.toggleUploadErrorsModal}\n onRemoveAllClick={this.removeAllUploadErrorsClick}\n />\n );\n }\n\n return (\n <div\n aria-hidden=\"true\"\n className=\"modal fade image-loader\"\n id=\"uploader\"\n role=\"dialog\"\n aria-label=\"Upload photos\"\n style={{ height: modalHeight, width: modalWidth, margin: 'auto' }}>\n <div className=\"modal-dialog modal-xl p-0\" role=\"document\">\n <FocusTrap active={this.state.focus}>\n <div className={classNames('modal-content', { mini: $failures })}>\n <div\n className={classNames('modal-header flex-column rounded-0', {\n 'd-none': this.state.hideMenu,\n })}>\n <LoaderNav\n activeSource={this.state.source}\n imgSources={activeImageSources}\n isMobile={this.props.viewport.isMobile}\n onSourceSelect={this.handleSourceSelect}\n />\n </div>\n <div className=\"modal-body justify-content-between\">\n {!$failures && $sources}\n {$failures}\n {$uploadErrorsModal}\n </div>\n <LoaderFooter\n brokenPreviews={this.state.uploadErrors}\n files={this.previews()}\n onAddImages={this.onAddImagesClick}\n onCancelClick={this.handleCancelClick}\n onErrorIconClick={this.toggleUploadErrorsModal}\n onRemoveThumbnail={this.handleRemovePreview}\n onImagePreviewError={this.handleImagePreviewError}\n />\n </div>\n </FocusTrap>\n </div>\n </div>\n );\n },\n\n onAddImagesClick() {\n this.handleAddImages();\n },\n\n handleHideMenu(hideMenu) {\n this.setState({ hideMenu });\n },\n\n handleCancelClick() {\n this.handleAbort();\n\n this.triggerFeatureTracking('Cancel');\n },\n\n triggerFeatureTracking(type) {\n sendToGoogleAnalytics('Loader-nav', `${type}`);\n },\n\n handleAddImages() {\n this.triggerFeatureTracking('Add');\n const { upload_url, target_album, uploadSource } = this.state;\n\n this.filterBrokenImages();\n\n this.performUpload(upload_url, {\n album: target_album?.id || target_album?.title,\n uploadSource,\n });\n this.close();\n builderDispatch.delayedDispatch({\n type: WebUI.UPLOAD_ALL_PHOTOS_REMOVED_FROM_TRAY,\n });\n },\n});\n\nexport default WithViewportSize(Loader);\n"],"names":["Loader","createReactClass","LoaderBase","LoaderSizeMixin","windowSize","ImageUploadFileValidator","React","isMobile","activeImageSources","getImageSources","source","modalWidth","modalHeight","$failures","$uploadErrorsModal","$sources","imageSource","i","sourceComponentProps","Failures","UploadErrors","FocusTrap","classNames","LoaderNav","LoaderFooter","hideMenu","type","sendToGoogleAnalytics","upload_url","target_album","uploadSource","builderDispatch","WebUI","Loader$1","WithViewportSize"],"mappings":"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"}