import { tr } from "date-fns/locale"; import React, { useEffect, useState, useMemo, useContext } from "react"; import { TaxiOrder_type, TaxiOrder_initial, TaxiOrder_fieldName, TaxiOrder_tableData } from '../types/taxiOrderType'; import { differenceInDays } from 'date-fns'; import { getCsrfToken } from "../../../../../resources/js/services/getCsrfService"; import { Button, TextInput, Select, Option } from '@SharePoint/rencredit_uikit'; import { EntityHistoryProps } from "../../../../../resources/js/components/entityHistory/EntityHistory"; import { HistoryProvider, HistoryContext } from "../../../../../resources/js/contexts/HistoryContext"; import { PopupContext } from "../../../../../resources/js/contexts/PopupContext"; import { PreloaderContext } from "../../../../../resources/js/contexts/PreloaderContext"; import api from "../../../../../resources/js/api"; type EmpSupervisorsData = { emp_login: string, emp_supervisor: string } export default function TaxiHome () { //Массив полей для отображения в таблицах с заяками. Учитывается, в том числе, порядок const rqstTableFields = ['id', 'emp_login', 'emp_supervisor', 'emp_phone', 'taxi_date', 'taxi_time', 'taxi_address_from', 'taxi_address_to', 'cancel_rqst']; //Формируем объект с полями для таблицы const rqstTableHeaderFields: Record = Object.assign({}, ...rqstTableFields.map( field => {return {[field]: TaxiOrder_fieldName[field]}})); const rqstTableHeader:string[] = Object.keys(TaxiOrder_fieldName).map(rqstFieldName => TaxiOrder_fieldName[rqstFieldName]); const [ccEmp, setCcEmp] = useState([]); //Стейт для руководителей сотрудников const [empSupervisors, setEmpSupervisors] = useState([]); const [allOrders, setAllOrders] = useState([]); const [filterOrders, setFilterOrders] = useState([]); const [startSearch, setStartSearch] = useState(false); const [rqstNumber, setRqstNumber] = useState(''); const [rqstTime, setRqstTime] = useState(''); const [rqstLogin, setRqstLogin] = useState(''); const [orderTimePeriods, setOrderTimePeriods] = useState<[{time_period: string}]>([{time_period: ''}]); const popupContext = useContext(PopupContext); const preloaderContext = useContext(PreloaderContext); useEffect ( () => { api.get('/taxi/getTimePeriods', ).then(timePeriods_json => setOrderTimePeriods(timePeriods_json.data)); // fetch('/public/api/taxi/getTimePeriods', { // method: 'GET', // credentials: 'include', // }).then(timePeriods_resp => timePeriods_resp.json().then( timePeriods_json => { // setOrderTimePeriods(timePeriods_json); // })); setTimeout(() => { popupContext.addPopupArrTest([ {message: 'для информации', timeOut: true, type: 'attention'} ]) popupContext.addPopupArrTest([ {message: 'ошибка', timeOut: true, type: 'error'} ]) }, 1000); console.log(Object.keys(TaxiOrder_fieldName)) }, []) //ГАВРИЛОВ //ЕСЛИ ОБЪЕКТ СО ЗНАЧЕНИЯМИ ДЛЯ ПОИСКА ПУСТОЙ - НЕ ВЫПОЛНЯЕМ ПОИСК, ВОЗВРАЩАЕМ ОПОВЕЩЕНИЕ О ПУСТЫХ УСЛОВИЯХ const getFilterOrders = () => { console.log(rqstTime) console.log(rqstNumber) console.log(rqstLogin) setStartSearch(true); // ГАВРИЛОВ. проверь api.post('/taxi/getFilterOrders', { id: rqstNumber, taxi_time: rqstTime, emp_login: rqstLogin }).then(filterOrdersJson => { setFilterOrders(filterOrdersJson.data); }) // fetch('/public/api/taxi/getFilterOrders', { // credentials: 'include', // method: 'POST', // body: JSON.stringify({ // id: rqstNumber, // taxi_time: rqstTime, // emp_login: rqstLogin // }), // headers: { // 'content-type': 'application/json' // } // }).then(filterOrdersRqst => filterOrdersRqst.json()) // .then(filterOrdersJson => { // setFilterOrders(filterOrdersJson); // }) } const timePeriodOptions: Option[] = useMemo(() => { return orderTimePeriods.map((time: {time_period: string}) => { return { caption: time.time_period, value: time.time_period, id: time.time_period } }) }, [orderTimePeriods]) const empLoginOptions: Option[] = useMemo(() => { return ccEmp.map((empLogin: string) => { return { caption: empLogin, value: empLogin, id: empLogin } }) }, [ccEmp]) useEffect ( () => { Promise.all( [ // fetch('/public/api/taxi/getEmpInfo', { // credentials: 'include', // method: 'GET', // }).then( empInfo_resp => empInfo_resp.json() ), api.get('taxi/getEmpInfo'), api.get('taxi/getActiveOrders'), // fetch('/public/api/taxi/getActiveOrders', { // credentials: 'include', // method: 'GET', // }).then( allOrders_resp => allOrders_resp.json() ) ] ).then( ([ {data: empInfo_json}, {data: allOrders_json} ]) => { setCcEmp(empInfo_json.map( (empInfoEl: {emp_login: String}) => empInfoEl.emp_login )); setAllOrders(allOrders_json); setEmpSupervisors(empInfo_json.map( (empInfoEl: {emp_login: String, emp_group: String}) => ({emp_login: empInfoEl.emp_login, emp_supervisor: empInfoEl.emp_group}) )); } ) }, []) const isReady = ccEmp.length > 0 && orderTimePeriods.length > 0; useEffect ( () => { console.log(!isReady) preloaderContext.setPreloaderVisible(!isReady) // setPreloaderProp(!isReady); // console.log(empSupervisors) }, [isReady]) if (!ccEmp.length || !orderTimePeriods.length) { //setIsReady(true); return; } else { //setIsReady(false); // console.log(allOrders); console.log(ccEmp); console.log(orderTimePeriods); } // ГАВРИЛОВ. ОФОРМИ РЕЗУЛЬТАТЫ ПОИСКА. ПОСЛЕ ПОИСКА ПЛАВНО ОПУСКАЙ ДО ТАБЛИЦЫ РЕЗУЛЬТАТЫ ПОИСКА, ТАКЖЕ ВЫВЕДИ ЗОТЯ БЫ ТЕКСТ "РЕЗУЛЬТАТЫ ПОИСКА, СЕЙЧАС ЭТО ПРОСТО ТАБЛИЦА" //Гаврилов //Реализовать подтягивание информации //Реализовать переключение между БД (new and old Magic) //console.log(sanctumToken()) let newDate = new Date('2024-06-05'); newDate.setHours(0, 0, 0); // function callHistory(entityId) { // console.log(entityId) // return fakeObjArr; // } // let resultObj = { // entityId: 1, // entityProps: fakeObjArr // } return (
*/}
{ startSearch ? { rqstTableHeader.map( (headEl, headElIndex) => ) } { filterOrders.length ? filterOrders.map( (rqstData: TaxiOrder_type, rqstIndex: number) => { Object.keys(TaxiOrder_initial).map(initField => ) } ) : }
{headEl}
{initField == 'cancel_rqst' ? (rqstData[initField] ? 'Нет' : 'Да') : rqstData[initField]}
Запросов не найдено
: '' }
) } function RqstTable(props: {allOrders: TaxiOrder_type[], rqstTableHeader: Record, empSupervisors: EmpSupervisorsData[]}){ const historyContext = useContext(HistoryContext); if (!historyContext) { return null; } let newDate = new Date('2024-06-05'); newDate.setHours(0, 0, 0); return ( props.allOrders.length ? { Object.entries(props.rqstTableHeader).map((el, index) => ) } { props.allOrders.map( (rqstData: TaxiOrder_type, rqstIndex: number) => { Object.entries(props.rqstTableHeader).map( el => { return ( // Если поле - руководитель сотрудника - вычисляем значение, ориентируясь на список props.empSupervisors el[0] === 'emp_supervisor' ? : ) }) } ) }
{el[1]}Управление
{ props.empSupervisors.find(empData => empData.emp_login == rqstData.emp_login)?.emp_supervisor }{ rqstData[el[0]] } {/* Можно взаимодействовать только с заявками на такси на сегодняшнюю, либо завтрашнюю дату */} {differenceInDays(new Date(rqstData.taxi_date), new Date()) >= 0 && !rqstData.cancel_rqst ? <>
:
Нет активных заявок
) }