/* * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ * Copyright © 2017-2021 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============LICENSE_END========================================================= */ import React, {Component} from 'react'; import Modal from 'react-bootstrap/lib/Modal'; import {GlobalExtConstants} from 'utils/GlobalExtConstants.js'; import Row from 'react-bootstrap/lib/Row'; import Button from 'react-bootstrap/lib/Button'; import Spinner from 'utils/SpinnerContainer.jsx'; let PAGINATION_CONSTANT = GlobalExtConstants.PAGINATION_CONSTANT; let PAGINATION_RESULTS = PAGINATION_CONSTANT.RESULTS_PER_PAGE; class DownloadRangeModel extends Component { constructor(props){ super(props); let totalPages = Math.ceil(this.props.totalResults/PAGINATION_RESULTS); let defaultCount = (totalPages < 10)? totalPages : 10; let defaultPageRange = defaultCount*PAGINATION_RESULTS; this.state = { defaultPageCount : defaultCount, downloadType: 'defaultPage', totalPages:totalPages, limitTotalPages:defaultCount, startPageCount:'', endPageCount:'', defaultPageError:false, downloadPageRangeError:false, defaultPageErrorMsg:'', downloadPageRangeErrorMsg:'', showDownloadResultsModal:this.props.showDownloadResultsModal, triggerDownload:this.props.triggerDownload, triggerClose:this.props.triggerClose, totalResults: this.props.totalResults, errorDownloadResults:this.props.errorDownloadResults, downloadErrorMsg:this.props.downloadErrorMsg, pageRange:defaultPageRange, enableBusyFeedback: this.props.enableModelBusyFeedback }; }; componentDidMount(){ console.log('DownloadRange component mount'); }; componentWillReceiveProps(nextProps){ console.log('DownloadRange component componentWillReceiveProps',nextProps); let totalPages = Math.ceil(nextProps.totalResults/PAGINATION_RESULTS); let defaultCount = (totalPages < 10)? totalPages : 10; let defaultPageRange = defaultCount*PAGINATION_RESULTS; this.setState({ showDownloadResultsModal:nextProps.showDownloadResultsModal, errorDownloadResults:nextProps.errorDownloadResults, downloadErrorMsg:nextProps.downloadErrorMsg, enableBusyFeedback: nextProps.enableModelBusyFeedback, totalPages:totalPages, limitTotalPages:defaultCount, defaultPageCount: defaultCount }); } renderError = (errorMsg) => { return( Error: {errorMsg} ); }; onInputDataChange = (event) =>{ let name=event.target.name; let value= (event.target.value !== '')? parseInt(event.target.value): ''; this.onDataValidate(name,value); } onDataValidate =(name,value) =>{ console.log('DownloadRangeModel onDataValidate>>>>>>',this.state); let pageCount=1; let msg=''; let totalCount = 0; let totalResultsCount=0; if(name === 'defaultPageCount'){ if(isNaN(value)){ msg = 'Please enter valid input as Number'; }else if(value <= 0){ msg = 'Please enter valid page count From 1 to ' + this.state.limitTotalPages; }else if(value > this.state.limitTotalPages ){ msg = 'Please enter valid page count From 1 to ' + this.state.limitTotalPages+'.The maximum download is limited to '+this.state.limitTotalPages +' pages at a time'; } if(msg === ''){ pageCount=value*PAGINATION_RESULTS; console.log('Before setting state defaultPageCount>>>>>',value); this.setState({defaultPageCount:value,pageRange:pageCount,defaultPageError:false,defaultPageErrorMsg:'',disableDownloadBtn:false}); }else if(msg !== ''){ this.setState({defaultPageCount:event.target.value,defaultPageError:true,defaultPageErrorMsg:msg,disableDownloadBtn:true}); } }else if(name === 'startPageCount'){ if(isNaN(value)){ msg = 'Please enter valid input as Number'; } if(msg === ''){ console.log('Before setting state startPageCount>>>>>',value); this.setState({startPageCount:value,downloadPageRangeError:false,downloadPageRangeErrorMsg:'',disableDownloadBtn:false},function(){this.onDataValidate('rangeValidation')}.bind(this)); }else{ this.setState({downloadPageRangeError:true,downloadPageRangeErrorMsg:msg,disableDownloadBtn:true}); } }else if(name === 'endPageCount'){ if(isNaN(value)){ msg = 'Please enter valid input as Number'; } if(msg === ''){ console.log('Before setting state endPageCount>>>>>',value); this.setState({endPageCount: value,downloadPageRangeError: false, downloadPageRangeErrorMsg: '',disableDownloadBtn:false},function(){this.onDataValidate('rangeValidation')}.bind(this)); }else{ this.setState({downloadPageRangeError:true,downloadPageRangeErrorMsg:msg,disableDownloadBtn:true}); } } if(name === 'rangeValidation'){ let startCount = this.state.startPageCount; startCount=(startCount === '')? 0:parseInt(startCount); let endCount = this.state.endPageCount; endCount=(endCount === '')? 0:parseInt(endCount); if(startCount <= 0 || endCount <= 0 || startCount > this.state.totalPages || endCount > this.state.totalPages || startCount > endCount || endCount < startCount){ msg = 'Please enter a valid page range from 1 to '+ this.state.totalPages +'.The maximum download is limited to '+ this.state.limitTotalPages +' pages at a time'; }else{ totalCount = this.state.endPageCount - this.state.startPageCount + 1; totalResultsCount=totalCount*PAGINATION_RESULTS; if(totalCount > 10){ msg = 'The maximum download is limited to '+ this.state.limitTotalPages +' pages at a time. Please adjust your input to continue'; } } if(msg !== ''){ this.setState({downloadPageRangeError:true,downloadPageRangeErrorMsg:msg,disableDownloadBtn:true}); }else{ pageCount=this.state.startPageCount + '-' + this.state.endPageCount; this.setState({disableDownloadBtn: false, pageRange: pageCount}); } } }; setSelectTypeOfDownload = (event) =>{ console.log('DownloadRange:setSelectTypeOfDownload',event.target.value); let totalPages=parseInt(this.state.totalPages); let pageCount=0; if (event.target.value === 'downloadPageRange'){ this.setState( {defaultPageCount : (totalPages < 10)? totalPages : 10,startPageCount:'',endPageCount:'',downloadType:event.target.value,downloadPageRangeError:false,defaultPageError:false,disableDownloadBtn:true, downloadErrorMsg:'', errorDownloadResults:false} ); }else{ pageCount= (totalPages < 10)? totalPages*PAGINATION_RESULTS : 10*PAGINATION_RESULTS; this.setState({defaultPageCount : (totalPages < 10)? totalPages : 10, startPageCount:'',endPageCount:'',pageRange:pageCount,downloadType:event.target.value,downloadPageRangeError:false,defaultPageError:false,disableDownloadBtn:false, downloadErrorMsg:'',errorDownloadResults:false}); } } submitDownloadResults = () =>{ console.log('DownloadRange:submitDonwloadResults',this.state); this.props.triggerDownload(this.state.pageRange,true); } closeDownloadResults = () =>{ console.log('DownloadRange:closeDownloadReults'); this.props.triggerClose(); } render(){ console.log('downloadRange:this.state>>>>>>>>>>>*',this.state); return(
Download Results

Your result set has {this.state.totalPages} pages

{this.state.errorDownloadResults && (
{this.renderError(this.state.downloadErrorMsg)}
)}
{this.state.defaultPageError && (
{this.renderError(this.state.defaultPageErrorMsg)}
)}
{this.state.downloadPageRangeError && (
{this.renderError(this.state.downloadPageRangeErrorMsg)}
)}
); } } export default DownloadRangeModel;