implementation of dynamic timeline in first page

This commit is contained in:
AmirHossein Mahmoodi
2023-12-11 16:29:27 +03:30
parent 2d73253c10
commit 61d947cac6
5 changed files with 120 additions and 11 deletions

4
.gitignore vendored
View File

@@ -31,4 +31,6 @@ cypress/screenshots
.env
.idea
package-lock.json
ecosystem.config
ecosystem.config
public/config.json

View File

@@ -0,0 +1,36 @@
{
"time_lines": {
"navgan_first_page": [
{
"date": {
"from": "1402/09/01",
"to": "1402/09/10"
},
"label": {
"primary": "ثبت نام متقاضی",
"secondary": "ثبت نام متقاضیان واجد شرایط"
}
},
{
"date": {
"from": "1402/09/15",
"to": "1402/11/10"
},
"label": {
"primary": "صحت سنجی متقاضیان",
"secondary": "بررسی و کارشناسی درخواست ها"
}
},
{
"date": {
"from": "1402/11/10",
"to": "1402/12/20"
},
"label": {
"primary": "ارجاع به بانک",
"secondary": "فرآیند معرفی ضامن و پرداخت"
}
}
]
}
}

View File

@@ -18,6 +18,7 @@
"upload_file_text": "بارگذاری فایل",
"online_message": "شما به اینترنت وصل هستید",
"offline_message": "اتصال شما به اینترنت قطع شده است",
"routing_to": "در حال انتقال به صفحه",
"header": {
"open_profile": "پروفایل",
"edit_profile": "ویرایش پروفایل",

View File

@@ -1,19 +1,73 @@
import {useTranslations} from "next-intl";
import {useEffect, useState} from "react";
import {useRequest} from "@witel/webapp-builder";
import TimelineManager from "@/core/components/timelines/timelineManager";
import moment from "jalali-moment";
import {Timeline} from "@mui/lab";
import OpenTimeLine from "@/core/components/timelines/OpenTimeLine";
import InProgressTimeLine from "@/core/components/timelines/InProgressTimeLine";
const TimeLineDetails = () => {
const t = useTranslations();
const request = useRequest({notification: false, auth: false})
const [timeLineList, setTimeLineList] = useState([])
const [loading, setLoading] = useState(true)
useEffect(() => {
setLoading(true)
request(process.env.NEXT_PUBLIC_CONFIG_APP_URL, 'get').then(res => {
setLoading(false)
let tempArr = []
for (const timeLine of res.data.time_lines.navgan_first_page) {
let temp = {}
temp['label'] = timeLine.label
temp['date'] = moment(timeLine.date.from, 'jYYYY/jMM/jDD').locale('fa').format('jD jMMMM')
const fromDate = moment(timeLine.date.from, 'jYYYY/jMM/jDD')
const toDate = moment(timeLine.date.to, 'jYYYY/jMM/jDD')
const today = moment()
if (today.isBetween(fromDate, toDate, null, '[]')) {
temp['status'] = 'in progress'
} else if (today.isAfter(toDate, null)) {
temp['status'] = 'done'
} else if (today.isBefore(fromDate, null)) {
temp['status'] = 'open'
}
tempArr.push(temp)
}
setTimeLineList(tempArr)
}).catch(() => {
setLoading(false)
})
}, []);
return (
<Timeline position="alternate">
<InProgressTimeLine date={'10 دی'} primaryLabel={'ثبت نام متقاضی'}
secondaryLabel={'ثبت نام متقاضیان واجد شرایط'}/>
<OpenTimeLine date={'10 بهمن'} primaryLabel={'صحت سنجی متقاضیان'}
secondaryLabel={'بررسی و کارشناسی درخواست ها'}/>
<OpenTimeLine position={'end'} date={'10 اسفند'} primaryLabel={'ارجاع به بانک'}
secondaryLabel={'فرآیند معرفی ضامن و پرداخت'}/>
</Timeline>
<>
{loading ? (
<>loading...</>
) : (
<Timeline position="alternate">
{timeLineList.map((timeLine, index) => (
<TimelineManager
key={index}
status={timeLine.status}
date={timeLine.dateLabel}
primaryLabel={timeLine.label.primary}
secondaryLabel={timeLine.label.secondary}
position={index === (timeLineList.length - 1) ? 'end' : ''}
/>
))
}
</Timeline>
)}
</>
)
// return (
// <Timeline position="alternate">
// <InProgressTimeLine date={'10 دی'} primaryLabel={'ثبت نام متقاضی'}
// secondaryLabel={'ثبت نام متقاضیان واجد شرایط'}/>
// <OpenTimeLine date={'10 بهمن'} primaryLabel={'صحت سنجی متقاضیان'}
// secondaryLabel={'بررسی و کارشناسی درخواست ها'}/>
// <OpenTimeLine position={'end'} date={'10 اسفند'} primaryLabel={'ارجاع به بانک'}
// secondaryLabel={'فرآیند معرفی ضامن و پرداخت'}/>
// </Timeline>
// )
}
export default TimeLineDetails

View File

@@ -0,0 +1,16 @@
import OpenTimeLine from "@/core/components/timelines/OpenTimeLine";
import InProgressTimeLine from "@/core/components/timelines/InProgressTimeLine";
import DoneTimeLine from "@/core/components/timelines/DoneTimeLine";
const TimelineManager = (props) => {
switch (props.status) {
case 'open':
return <OpenTimeLine {...props} />
case 'in progress':
return <InProgressTimeLine {...props} />
case 'done':
return <DoneTimeLine {...props} />
}
}
export default TimelineManager