import _ from "lodash/"; const sortByParentId = (arr) => { // return arr.reduce((accumulator, currentValue) => { // //Find the parent item. // let item = accumulator.find((x) => x.id === currentValue.kanbanparent); // //Get index of praent item // let index = accumulator.indexOf(item); // index = index !== -1 ? index + 1 : 0; // accumulator.splice(index, 0, currentValue); // return accumulator; // }, []); var parentId = "-1"; var sortedList = []; var byParentsIdsList = _.groupBy(arr, "kanbanparent"); // Create a new array with objects indexed by parentId //console.log("sortByParentId -> byParentsIdsList", byParentsIdsList); while (byParentsIdsList[parentId]) { sortedList.push(byParentsIdsList[parentId][0]); parentId = byParentsIdsList[parentId][0].id; } if (byParentsIdsList["null"]) byParentsIdsList["null"].map((i) => sortedList.push(i)); //Validate that the 2 arrays are of the same length and no children are missing. if (arr.length !== sortedList.length) { arr.map((origItem) => { if (!!!sortedList.find((s) => s.id === origItem.id)) { sortedList.push(origItem); console.log("DATA CONSISTENCY ERROR: ", origItem.ro_number); } return 1; }); } return sortedList; }; export const createBoardData = (AllStatuses, Jobs, filter) => { const { search, employeeId } = filter; console.log("==========GENERATING BOARD DATA============="); const boardLanes = { columns: AllStatuses.map((s) => { return { id: s, title: s, cards: [], }; }), }; const filteredJobs = (search === "" || !search) && !employeeId ? Jobs : Jobs.filter((j) => { let include = false; if (search && search !== "") { include = CheckSearch(search, j); } if (!!employeeId) { include = include || j.employee_body === employeeId || j.employee_prep === employeeId || j.employee_refinish === employeeId; } return include; }); const DataGroupedByStatus = _.groupBy(filteredJobs, (d) => d.status); Object.keys(DataGroupedByStatus).map((statusGroupKey) => { try { boardLanes.columns.find( (l) => l.id === statusGroupKey ).cards = sortByParentId(DataGroupedByStatus[statusGroupKey]); } catch (error) { console.log("Error while creating board card", error); } return null; }); return boardLanes; }; const CheckSearch = (search, job) => { return ( (job.ro_number || "").toLowerCase().includes(search.toLowerCase()) || (job.ownr_fn || "").toLowerCase().includes(search.toLowerCase()) || (job.ownr_co_nm || "").toLowerCase().includes(search.toLowerCase()) || (job.ownr_ln || "").toLowerCase().includes(search.toLowerCase()) || (job.status || "").toLowerCase().includes(search.toLowerCase()) || (job.v_make_desc || "").toLowerCase().includes(search.toLowerCase()) || (job.v_model_desc || "").toLowerCase().includes(search.toLowerCase()) || (job.clm_no || "").toLowerCase().includes(search.toLowerCase()) || (job.plate_no || "").toLowerCase().includes(search.toLowerCase()) ); }; // export const updateBoardOnMove = (board, card, source, destination) => { // //Slice from source // const sourceCardList = board.columns.find((x) => x.id === source.fromColumnId) // .cards; // sourceCardList.slice(source.fromPosition, 0); // //Splice into destination. // const destCardList = board.columns.find( // (x) => x.id === destination.toColumnId // ).cards; // console.log("updateBoardOnMove -> destCardList", destCardList); // destCardList.splice(destination.toPosition, 0, card); // console.log("updateBoardOnMove -> destCardList", destCardList); // console.log("board", board); // return board; // };