{"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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"}