Home > Blockchain >  Convert Class Component to a function and return values
Convert Class Component to a function and return values

Time:01-31

i have this component, that calls this other component DateTimeCore, which is a component, where inside there are "BlackMagic" with scripts, and return 4 variables: formattedTime, formattedDate, timeZoneAbbreviation, timeZone.

I would like to convert this DateTime component in a function, and put in a helper.js, pass some parameteres, and return this 4 variables.

class DateTime extends Component {
  render() {
    const {
      date,
      dateFormat,
      render,
    } = this.props;
    const {
      languageCode = 'es-ES',
      timezone = 'Europe/Madrid',
    } = getSiteProperties(this.props);
    return (<DateTimeCore
      date={date}
      dateFormat={dateFormat}
      outputType="amp"
      render={render}
      languageCode={languageCode}
      timezone={timezone}
    />);
  }
}

someone can help me to see how i convert this in a function? to use inside html attributes like:

 <time dateTime={here pass the function(parameters) and return that i need from the component <DateTimeCore />}> </time>

More Info: DateTimeCore component, has inside this:index.d.ts

declare function DateTime(props: any): any;
declare namespace DateTime {
    export namespace propTypes {
        export const date: any;
        export const dateFormat: any;
        export const outputType: any;
        export const languageCode: any;
        export const render: any;
        export const siteProperties: any;
        export const timezone: any;
    }
}
export default DateTime;

And this index.d.ts has this index.js file with this code inside:

 "use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = DateTime;

var _propTypes = _interopRequireDefault(require("prop-types"));

var _dateFnsTz = require("date-fns-tz");

var _timeZoneHelper = require("./time-zone-helper");

var _localeHelper = require("./locale-helper");

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function DateTime(props) {
  var date = props.date,
      dateFormat = props.dateFormat,
      countrycode = props.countrycode,
      _props$languageCode = props.languageCode,
      languageCode = _props$languageCode === void 0 ? 'es-ES' : _props$languageCode,
      outputType = props.outputType,
      render = props.render,
      _props$timezone = props.timezone,
      timezone = _props$timezone === void 0 ? 'Europe/Madrid' : _props$timezone;
  var formattedTime = '';
  var timeZoneAbbreviation = '';
  var now = date ? new Date(date) : new Date();
  var localeTZ = (0, _timeZoneHelper.getTimezoneByTimezone)(timezone);
  var timeZone = localeTZ.name;
  var offset = (0, _dateFnsTz.format)(now, 'z', {
    timeZone: timeZone
  }); // cookie provide, use countrycode to use selected timezone

  if (countrycode) {
    localeTZ = (0, _timeZoneHelper.getTimezoneByCountryCode)(countrycode);
    timeZone = localeTZ.name;
    offset = (0, _dateFnsTz.format)(now, 'z', {
      timeZone: timeZone
    });
  }

  now = (0, _dateFnsTz.utcToZonedTime)(now, timeZone);

  if (localeTZ.timezone) {
    timeZoneAbbreviation = localeTZ.timezone[offset];
  } else {
    timeZoneAbbreviation = offset;
  }

  formattedTime = (0, _dateFnsTz.format)(now, 'HH:mm', {
    timeZone: timeZone
  });

  if (outputType === 'amp') {
    now = (0, _dateFnsTz.format)(now, 'yyyy-MM-dd HH:mm:ss', {
      timeZone: timeZone,
      locale: (0, _localeHelper.getLocale)(languageCode)
    });
  }

  var formattedDate = function () {
    var formattedDateTmp = '';
    now = typeof now === 'string' ? new Date(now) : now;

    if (dateFormat) {
      formattedDateTmp = (0, _dateFnsTz.format)(now, dateFormat, {
        timeZone: timeZone,
        locale: (0, _localeHelper.getLocale)(languageCode)
      });
    } else {
      // Day of the story
      var leadingZeroDay = (0, _dateFnsTz.format)(now, 'dd'); // Calculate month with short format: Spanish: ENE, FEB, ... English: JAN, FEB,...

      var localeMonth = (0, _dateFnsTz.format)(now, 'MMM', {
        timeZone: timeZone,
        locale: (0, _localeHelper.getLocale)(languageCode)
      });
      var localeYear = (0, _dateFnsTz.format)(now, 'yyyy');
      formattedDateTmp = "".concat(leadingZeroDay, " ").concat(localeMonth, " ").concat(localeYear);
    }

    return formattedDateTmp;
  }();

  return render({
    formattedDate: formattedDate,
    formattedTime: formattedTime,
    timeZone: timeZone,
    timeZoneAbbreviation: timeZoneAbbreviation
  });
}

DateTime.propTypes = {
  date: _propTypes.default.string,
  dateFormat: _propTypes.default.string,
  outputType: _propTypes.default.string,
  languageCode: _propTypes.default.string,
  render: _propTypes.default.func.isRequired,
  siteProperties: _propTypes.default.object,
  timezone: _propTypes.default.string
};
//# sourceMappingURL=index.js.map

Thanks

CodePudding user response:

const DateTime = props => { // everyrhing inside your render method }

CodePudding user response:

So if I understand correctly, you want to have a JS function that computes and returns what you get from the component?

You could write a function getDateTime(date, dateFormat, ...) in a utils.js or similar file and import in any component that needs it.

import { getDateTime } from './utils.js';

class DateTime extends Component {
  render() {
    const {
      date,
      dateFormat,
      render,
    } = this.props;
    const {
      languageCode = 'es-ES',
      timezone = 'Europe/Madrid',
    } = getSiteProperties(this.props);
    return (
       <div>
        `Calculated: ${getDateTime(date, dateFormat, ...)`
       </div>
    );
  }
}

Something like this?

  •  Tags:  
  • Related