| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- import React from 'react';
- import { withTranslation } from 'react-i18next';
- import dateFnsFormat from 'date-fns/format';
- import { withUnstatedContainers } from './UnstatedUtils';
- import AppContainer from '../services/AppContainer';
- import PageContainer from '../services/PageContainer';
- class ShareLinkForm extends React.Component {
- constructor(props) {
- super(props);
- this.state = {
- expirationType: 'unlimited',
- numberOfDays: 7,
- description: '',
- customExpirationDate: dateFnsFormat(new Date(), 'yyyy-MM-dd'),
- customExpirationTime: dateFnsFormat(new Date(), 'hh:mm:s'),
- };
- this.handleChangeExpirationType = this.handleChangeExpirationType.bind(this);
- this.handleChangeNumberOfDays = this.handleChangeNumberOfDays.bind(this);
- this.handleChangeDescription = this.handleChangeDescription.bind(this);
- this.handleIssueShareLink = this.handleIssueShareLink.bind(this);
- }
- /**
- * change expirationType
- * @param {string} expirationType
- */
- handleChangeExpirationType(expirationType) {
- this.setState({ expirationType });
- }
- /**
- * change numberOfDays
- * @param {number} numberOfDays
- */
- handleChangeNumberOfDays(numberOfDays) {
- this.setState({ numberOfDays });
- }
- /**
- * change description
- * @param {string} description
- */
- handleChangeDescription(description) {
- this.setState({ description });
- }
- /**
- * change customExpirationDate
- * @param {date} customExpirationDate
- */
- handleChangeCustomExpirationDate(customExpirationDate) {
- this.setState({ customExpirationDate });
- }
- /**
- * change customExpirationTime
- * @param {date} customExpirationTime
- */
- handleChangeCustomExpirationTime(customExpirationTime) {
- this.setState({ customExpirationTime });
- }
- handleIssueShareLink() {
- // use these options
- console.log(this.state);
- console.log('発行する!');
- }
- renderExpirationTypeOptions() {
- const { expirationType } = this.state;
- return (
- <div className="form-group">
- <div className="custom-control custom-radio offset-4 mb-2">
- <input
- type="radio"
- className="custom-control-input"
- id="customRadio1"
- name="expirationType"
- value="customRadio1"
- checked={expirationType === 'unlimited'}
- onChange={() => { this.handleChangeExpirationType('unlimited') }}
- />
- <label className="custom-control-label" htmlFor="customRadio1">Unlimited</label>
- </div>
- <div className="custom-control custom-radio offset-4 mb-2">
- <input
- type="radio"
- className="custom-control-input"
- id="customRadio2"
- value="customRadio2"
- checked={expirationType === 'numberOfDays'}
- onChange={() => { this.handleChangeExpirationType('numberOfDays') }}
- name="expirationType"
- />
- <label className="custom-control-label" htmlFor="customRadio2">
- <div className="row align-items-center m-0">
- <input
- type="number"
- min="1"
- className="col-4"
- name="expirationType"
- value={this.state.numberOfDays}
- onFocus={() => { this.handleChangeExpirationType('numberOfDays') }}
- onChange={e => this.handleChangeNumberOfDays(Number(e.target.value))}
- />
- <span className="col-auto">Days</span>
- </div>
- </label>
- </div>
- <div className="custom-control custom-radio offset-4 mb-2">
- <input
- type="radio"
- className="custom-control-input"
- id="customRadio3"
- name="expirationType"
- value="customRadio3"
- checked={expirationType === 'custom'}
- onChange={() => { this.handleChangeExpirationType('custom') }}
- />
- <label className="custom-control-label" htmlFor="customRadio3">
- Custom
- </label>
- <input
- type="date"
- className="ml-3"
- name="customExpirationDate"
- value={this.state.customExpirationDate}
- onFocus={() => { this.handleChangeExpirationType('custom') }}
- onChange={e => this.handleChangeCustomExpirationDate(e.target.value)}
- />
- <input
- type="time"
- className="ml-3"
- name="customExpiration"
- value={this.state.customExpirationTime}
- onFocus={() => { this.handleChangeExpirationType('custom') }}
- onChange={e => this.handleChangeCustomExpirationTime(e.target.value)}
- />
- </div>
- </div>
- );
- }
- renderDescriptionForm() {
- return (
- <div className="form-group row">
- <label htmlFor="inputDesc" className="col-md-4 col-form-label">Description</label>
- <div className="col-md-4">
- <input
- type="text"
- className="form-control"
- id="inputDesc"
- placeholder="Enter description"
- value={this.state.description}
- onChange={e => this.handleChangeDescription(e.target.value)}
- />
- </div>
- </div>
- );
- }
- render() {
- return (
- <div className="share-link-form border p-3">
- <h4>Expiration Date</h4>
- {this.renderExpirationTypeOptions()}
- <hr />
- {this.renderDescriptionForm()}
- <div className="text-right">
- <button type="button" className="btn btn-primary" onClick={this.handleIssueShareLink}>
- Issue
- </button>
- </div>
- </div>
- );
- }
- }
- const ShareLinkFormWrapper = withUnstatedContainers(ShareLinkForm, [AppContainer, PageContainer]);
- export default withTranslation()(ShareLinkFormWrapper);
|