mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-13 12:34:16 +00:00
85 lines
2.6 KiB
JavaScript
Executable File
85 lines
2.6 KiB
JavaScript
Executable File
import React from "react"
|
|
import moment from "moment"
|
|
import * as antd from "antd"
|
|
import classnames from "classnames"
|
|
|
|
import "./index.less"
|
|
|
|
const defaultDateFormat = "DD-MM-YYYY hh:mm"
|
|
|
|
export default class ScheduledProgress extends React.Component {
|
|
isDateReached = (date) => {
|
|
const format = this.props.dateFormat ?? defaultDateFormat
|
|
const now = moment().format(format)
|
|
const result = moment(date, format).isSameOrBefore(moment(now, format))
|
|
|
|
console.debug(`[${date}] is before [${now}] => ${result}`)
|
|
|
|
return result
|
|
}
|
|
|
|
getDiffBetweenDates = (start, end) => {
|
|
// THIS IS NOT COUNTING WITH THE YEAR
|
|
const format = "DD-MM-YYYY"
|
|
|
|
const startDate = moment(start, format)
|
|
const endDate = moment(end, format)
|
|
const now = moment().format(format)
|
|
|
|
// count days will took to complete
|
|
const days = endDate.diff(startDate, "days")
|
|
|
|
const daysLeft = endDate.diff(moment(now, format), "days")
|
|
const daysPassed = moment(now, format).diff(startDate, "days")
|
|
|
|
let percentage = 0
|
|
|
|
switch (daysLeft) {
|
|
case 0: {
|
|
percentage = 99
|
|
break
|
|
}
|
|
case 1: {
|
|
percentage = 95
|
|
break
|
|
}
|
|
default: {
|
|
if (daysPassed > 0 && daysPassed < days) {
|
|
percentage = (daysPassed / days) * 100
|
|
}
|
|
break
|
|
}
|
|
}
|
|
|
|
if (daysPassed > days) {
|
|
percentage = 100
|
|
}
|
|
|
|
return { daysLeft, daysPassed, percentage }
|
|
}
|
|
|
|
render() {
|
|
const startReached = this.isDateReached(this.props.start)
|
|
const finishReached = this.isDateReached(this.props.finish)
|
|
const datesDiff = this.getDiffBetweenDates(this.props.start, this.props.finish)
|
|
|
|
return <div className="scheduled_progress">
|
|
<div className={classnames("scheduled_progress point", "scheduled_progress point left", { ["reached"]: startReached })}>
|
|
{this.props.start}
|
|
</div>
|
|
<antd.Progress
|
|
size="small"
|
|
percent={datesDiff.percentage}
|
|
showInfo={false}
|
|
className={classnames("ant-progress", {
|
|
startReached: startReached,
|
|
finishReached: finishReached,
|
|
})}
|
|
type="line"
|
|
/>
|
|
<div className={classnames("point", "right", { reached: finishReached })}>
|
|
{this.props.finish}
|
|
</div>
|
|
</div>
|
|
}
|
|
} |