import snarkdown from 'snarkdown' import { createElement, useState, useEffect } from '@wordpress/element' import { dateI18n } from '@wordpress/date' import { __, sprintf } from 'ct-i18n' import classnames from 'classnames' import { Transition, animated } from 'react-spring' let changelog_cache = null const parseChangelog = changelog => changelog .replace(/(\r\n|\r|\n){3,}/g, '$1\n\n') .split('\n\n') .map(versionDescriptor => { let [version, date] = versionDescriptor.split('\n')[0].split(':') return { version, date: dateI18n('F j, Y', new Date(date)), descriptor: versionDescriptor } }) const SingleVersion = ({ versionDescriptor }) => { const [_, ...allReleaseChanges] = versionDescriptor.descriptor.split('\n') return (

Version: {versionDescriptor.version}{' '} Released on {versionDescriptor.date}

' ) .replace( /Improvement:/g, '' ) .replace( /Fix:/g, '' ) }} />
) } export default () => { const [isLoading, setIsLoading] = useState(!changelog_cache) const [changelog, setChangelog] = useState(changelog_cache) const [currentChangelog, setCurrentChangelog] = useState(0) const syncChangelog = async (verbose = false) => { if (verbose) { setIsLoading(true) } const body = new FormData() body.append('action', 'get_latest_changelog') try { const response = await fetch(ctDashboardLocalizations.ajax_url, { method: 'POST', body }) if (response.status === 200) { const { success, data } = await response.json() if (success && data.changelog) { setChangelog(data.changelog) changelog_cache = data.changelog } } } catch (e) {} setIsLoading(false) } useEffect(() => { syncChangelog(!changelog_cache) }, []) return (
{ return phase === 'leave' ? { duration: 300 } : { delay: 300, duration: 300 } }}> {isLoading => { if (isLoading) { return props => ( {__('Loading changelog...', 'blocksy')} ) } return props => (
1 })}> {changelog && changelog.length > 1 && (
    {changelog.map( ({ title }, index) => (
  • setCurrentChangelog( index ) } key={title}> {title}
  • ) )}
)}
  • New
  • Fix
  • Update
{changelog[currentChangelog].changelog ? parseChangelog( changelog[currentChangelog] .changelog ).map(versionDescriptor => ( )) : __( 'No changelog present at the moment.', 'blocksy' )}
) }}
) }