userManagement, add note exam process | 255

main
alireza khaji 2 years ago
parent 3e3bea6402
commit bf4aef4e90
  1. 1
      package.json
  2. 111
      src/components/AnswerSheet/index.js
  3. 4
      src/redux/actions/book.js
  4. 105
      src/redux/reducers/book.js
  5. 22
      src/view/addExam/views/ViewExam.js
  6. 133
      src/view/addExam/views/ViewExamNote.js
  7. 25
      src/view/addExam/views/addQuestionnaireExam.js
  8. 37
      src/view/user-management/index.js
  9. 66
      yarn.lock

@ -26,6 +26,7 @@
"react-indiana-drag-scroll": "^2.1.0",
"react-leaflet": "^3.2.5",
"react-multi-date-picker": "^3.3.0",
"react-pdf": "^5.7.2",
"react-redux": "^7.2.6",
"react-router-dom": "^6.2.1",
"react-scripts": "5.0.0",

@ -1,99 +1,106 @@
import React, { useEffect, useState } from "react";
import { connect } from "react-redux";
const AnswerSheet = ({ questionStart, questionEnd, optionsQuantity, selectedCourseId, passAnswers,selectedQId, addExamState }) => {
const AnswerSheet = ({
questionStart,
questionEnd,
optionsQuantity,
selectedCourseId,
passAnswers,
selectedQId,
addExamState,
selectedCourse,
}) => {
const [data, setData] = useState([]);
const [options, setOptions] = useState([]);
const [success, setSuccess] = useState(selectedCourseId);
useEffect(() => {
let array = [];
let optionsArray = [];
for (var i = questionStart; i <= questionEnd; i++) {
for (var i = Number(questionStart); i <= Number(questionEnd); i++) {
array.push({
questionId:i,
questionId: i,
answer: null,
courseId: selectedCourseId,
questionnaierId: selectedQId
questionnaierId: selectedQId,
});
}
for (var i = 1; optionsQuantity ? i <= optionsQuantity : i <=4 ; i++) {
for (var i = 1; optionsQuantity ? i <= optionsQuantity : i <= 4; i++) {
optionsArray.push({
id: i,
active: false,
})
});
}
setOptions(optionsArray);
setData(array)
setData(array);
// passAnswers(data)
// console.log(data, options)
}, [selectedCourseId])
console.log(selectedCourseId)
return (success == selectedCourseId && success !== undefined?
}, [selectedCourseId]);
console.log(selectedCourseId);
console.log("yyyyyyyyyyyyyyyyyyyyy");
console.log(data);
console.log(selectedCourse);
return success == selectedCourseId && success !== undefined ? (
<div className="w-full flex justify-center">
<button className="bg-green-600 text-white p-4 mt-40 rounded-md font-bold" onClick={() => setSuccess(!selectedCourseId)}>ویرایش پاسخ ها</button>
<button
className="bg-green-600 text-white p-4 mt-40 rounded-md font-bold"
onClick={() => setSuccess(!selectedCourseId)}
>
ویرایش پاسخ ها
</button>
</div>
:
) : (
<div className="w-full flex flex-col border border-gray-200 rounded-xl bg-white">
{
data.map((item, index) => (
{data.map((item, index) => (
<div className="w-full flex items-center justify-between h-14 border-b border-gray-200">
<p className="w-14 flex items-center h-full justify-center border-l border-gray-200">
{item.questionId}
</p>
<form className="flex w-full h-full px-8 items-center justify-between border-l border-gray-200">
{
options.map(
(option) => (
<p type='radio' value={option.id} className={`w-8 h-6 rounded-full border border-gray-400 cursor-pointer ${option.id == item.answer ? 'bg-green-500' : 'bg-white'}`}
{options.map((option) => (
<p
type="radio"
value={option.id}
className={`w-8 h-6 rounded-full border border-gray-400 cursor-pointer ${
option.id == item.answer ? "bg-green-500" : "bg-white"
}`}
onClick={() => {
var newArray = [...data];
newArray[index].answer = option.id;
setData(newArray)
setData(newArray);
// console.log(data)
}} >
</p>
)
)
}
}}
></p>
))}
</form>
<div className="w-32 ">
نمره : ۱
</div>
<div className="w-32 ">نمره : ۱</div>
</div>
))
}
))}
{data.length > 0 &&
{data.length > 0 && (
<div className="w-full flex justify-center">
<button className="my-2 py-2 px-4 rounded-md text-white bg-green-500 w-1/4"
onClick={() => {passAnswers(data); setSuccess(selectedCourseId);}}
>تایید پاسخ ها</button>
</div>}
<button
className="my-2 py-2 px-4 rounded-md text-white bg-green-500 w-1/4"
onClick={() => {
passAnswers(data);
setSuccess(selectedCourseId);
}}
>
تایید پاسخ ها
</button>
</div>
)}
</div>
)
}
);
};
const mapStateToProps = (state) => ({
grades: state.publicApi.grades,
addExamState: state.addExamReduser
})
addExamState: state.addExamReduser,
});
export default connect(mapStateToProps)(AnswerSheet);

@ -4,6 +4,10 @@ const book = {
(data = {}) =>
async (dispatch) =>
await proxy.get("product/list", data, { dispatch }),
schoolUser:
(data = {}) =>
async (dispatch) =>
await proxy.get("product/schoolUsers", data, { dispatch }),
info:
(data = {}) =>
async (dispatch) =>

@ -3,107 +3,8 @@ import { toast } from "react-toastify";
const initialState = {
loading: false,
error: null,
list: [
{
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
}, {
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
}, {
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
}, {
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
}, {
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
}, {
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
}, {
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
}, {
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
}, {
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
}, {
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
}, {
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
}, {
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
}, {
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
}, {
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
}, {
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
}, {
id:1,
name: 'عربی دوازدهم',
product: [{ price: 1000000,}],
vodTeacher: 'علی عبدالمالکی'
},
],
list: [],
schoolUserList :[],
info: null,
searchResult: [],
filterResult: [],
@ -161,6 +62,8 @@ export default function book(state = initialState, action) {
};
case "product/info":
return { ...state, loading: false, info: data, error: null };
case "product/schoolUser":
return { ...state, loading: false, schoolUserList: data, error: null };
case "book/lesson/active":
return {
...state,

@ -12,6 +12,7 @@ import Preview from "../../../components/AnswerSheet/preview";
import { exam } from "../../../redux/actions";
import moment from "jalali-moment";
import preview from "../../../components/AnswerSheet/preview";
import ViewExamNote from "./ViewExamNote";
const ViewExam = ({
addExamState,
@ -26,7 +27,7 @@ const ViewExam = ({
useEffect(() => {
window.scrollTo(0, 0);
console.log("oooooooooooooooooooooooooooooo");
console.log(addExamState);
// console.log(addExamState);
console.log(examId);
}, []);
@ -88,7 +89,7 @@ const ViewExam = ({
return (
<div className="w-[95%] flex flex-col mx-10">
<div className="w-4/5 py-6 flex items-center">
<div className="w-full h-[8vh] flex items-center">
<h1 className="text-2xl font-bold ml-6">
آزمون {examPreview?.exam?.name}
</h1>
@ -98,9 +99,9 @@ const ViewExam = ({
</h3>
</div>
<div className="w-full mt-6 pb-6 border-b">
{examPreview?.exam?.type && (
<div className="w-full">
<div className="w-full border-b">
{examPreview?.exam?.type === 1 && (
<div className="w-full mt-6 pb-6">
{examPreview?.questions?.map((item, index) => (
<div
key={index}
@ -154,9 +155,16 @@ const ViewExam = ({
))}
</div>
)}
{examPreview?.exam?.type === 2 && (
<ViewExamNote
notes={examPreview?.notes}
questions={examPreview?.questions}
/>
)}
{/* <ViewExamNote /> */}
</div>
<div className="w-full flex justify-end font-bold mt-6">
<div className="w-full h-[8vh] flex justify-end font-bold mt-[1vh]">
<button
className="py-4 font-bold px-6 rounded-lg text-red52 mr-4"
onClick={() => backStep()}
@ -164,7 +172,7 @@ const ViewExam = ({
بازگشت به مرحله قبلی
</button>
<button
className="bg-red52 py-4 px-6 rounded-lg text-white mr-4"
className="bg-red52 h-full px-6 rounded-lg text-white mr-4"
onClick={submitHandler}
>
تایید آزمون

@ -0,0 +1,133 @@
import React, { useEffect } from 'react'
import { useState } from 'react';
// import { Document, Page } from "react-pdf";
import { Viewer, Worker } from "@react-pdf-viewer/core";
// Import the styles
import "@react-pdf-viewer/core/lib/styles/index.css";
const optionNum = ["", "الف", "ب", "پ", "ت", "ث", "ج", "چ", "ح"];
const ViewExamNote = ({ notes ,questions}) => {
const [activeNote,setActiveNote]=useState(0);
const [activeFileId, setActiveFileId] = useState(null);
const changeNoteHandler=(index,fileId)=>{
setActiveNote(index);
setActiveFileId(fileId);
}
useEffect(()=>{
setActiveFileId(notes[0].fileId);
},[notes])
console.log("rrrrrrrrrrrr============")
console.log(activeFileId);
const createOptions = (item) => {
let optionsList = [];
for (let i = 0; i < item.type; i++) {
optionsList.push(item[`option${i + 1}`]);
}
console.log("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
console.log(optionsList);
return optionsList;
};
return (
<div className="w-full h-[76vh] py-2 flex items-start justify-between">
{/* ----note------------- */}
<div className="w-1/2 h-full">
<div className="w-full h-10 border flex items-center">
{notes?.map((item, index) => (
<div
key={index}
className="h-full px-3 flex items-center text-sm cursor-pointer"
style={
activeNote === index
? { backgroundColor: "black", color: "#fff" }
: null
}
onClick={() => changeNoteHandler(index, item.fileId)}
>
{item?.name}
</div>
))}
</div>
{activeFileId && (
<div
className="pdf-viewer w-full mt-2"
style={{ height: "calc(100% - 48px)" }}
>
<Worker workerUrl="https://unpkg.com/pdfjs-dist@2.13.216/build/pdf.worker.min.js">
<Viewer
fileUrl={`https://new.andishmand.ir/api/v1/file/${activeFileId}`}
/>
</Worker>
{/* <Document
file={`https://new.andishmand.ir/api/v1/file/${activeFileId}`}
onLoadSuccess={onDocumentLoadSuccess}
>
<Page pageNumber={pageNumber} />
</Document>
<p>
صفحه {pageNumber} از {numPages}
</p> */}
</div>
)}
</div>
{/* ------answers-------------- */}
<div className="w-1/2 h-full border-r overflow-y-auto px-3">
{questions?.map((item, index) => (
<div key={index} className="w-full mb-4 border-b border-[#d3d3d3]">
<div className="w-full flex items-center">
<div className="w-8 h-8 bg-gray-300 flex items-center justify-center rounded-md ml-2">
{index + 1}
</div>
<div className="w-full text-lg text-right">
{item?.text}{" "}
<span className="text-sm">{`(نمره : ${
item?.score || 1
})`}</span>
</div>
</div>
<div className="w-full mt-4">
{createOptions(item).map((choice, index2) => (
<div key={index2} className="w-full flex items-stretch mb-2">
<div
className="w-12 py-3 rounded-r-md flex items-center justify-center bg-gray-300"
style={
index2 + 1 === Number(item.answer)
? { backgroundColor: "#65A30D", color: "#fff" }
: null
}
>
{optionNum[index2 + 1]}
</div>
<div
className="py-3 rounded-l-md flex items-center px-2 bg-gray-200"
style={
index2 + 1 === Number(item.answer)
? {
backgroundColor: "#84CC16",
color: "#fff",
width: "calc(100% - 48px)",
}
: { width: "calc(100% - 48px)" }
}
>
{choice}
</div>
</div>
))}
</div>
</div>
))}
</div>
</div>
);
};
export default ViewExamNote

@ -26,6 +26,7 @@ let lastCourseIndex;
let lastQuestionType = 2;
let eqCounter = 0;
let eqCounter2 = 0;
let lastSubexamId;
const AddQuestionnaireExam = ({
grades,
addExamState,
@ -135,7 +136,9 @@ const AddQuestionnaireExam = ({
// type: "",
// payload: newQuestionaire,
// });
addExamQuestionaires(newQuestionaire);
let newQuestionaireWithNewId = newQuestionaire;
newQuestionaireWithNewId = { ...newQuestionaireWithNewId,id:Math.ceil(Math.random()*10000)};
addExamQuestionaires(newQuestionaireWithNewId);
setQuestionairePopUp(false);
addNote({
name: newQuestionaire.name,
@ -160,6 +163,8 @@ const AddQuestionnaireExam = ({
console.log(NoteList);
console.log("========subexamArray=========");
console.log(subexamArray);
console.log("---==========questionnaires==========-----");
console.log(addExamState?.questionnaires);
const submitLessonhandler = () => {
addQuestionnaireCourse(newCourse);
setAddCoursePopup(false);
@ -269,18 +274,24 @@ const AddQuestionnaireExam = ({
// questionStart;
// questionEnd;
let newList = subexamArray;
let Index =0;
for(let i=0;i<newList.length;i++){
if(newList[i]?.subexamId===lastSubExamAdd){
Index = i;
}
}
for (let i = 0; i < data.length; i++) {
if (newList[lastCourseIndex]?.question) {
newList[lastCourseIndex].question = [
...newList[lastCourseIndex]?.question,
if (newList[Index]?.question) {
newList[Index].question = [
...newList[Index]?.question,
{
number: Number(newCourse.questionStart) + i,
coefficient: subexamArray[lastCourseIndex]?.coefficient,
coefficient: subexamArray[Index]?.coefficient,
answer: data[i].answer,
},
];
} else {
newList[lastCourseIndex].question = [
newList[Index].question = [
{
number: Number(newCourse.questionStart) + i,
coefficient: subexamArray[i]?.coefficient,
@ -709,8 +720,10 @@ const AddQuestionnaireExam = ({
<div className="w-4/5 py-8">
<AnswerSheet
selectedCourseId={selectedCourse?.id}
selectedCourse={selectedCourse}
selectedQId={selectedQuestionare?.id}
questionEnd={selectedCourse?.questionEnd}
optionsQuantity={selectedCourse?.optionsNumber}
questionStart={selectedCourse?.questionStart}
passAnswers={(data) => {
// dispatch({ type: "ADD_ANSWERS", payload: data })

@ -7,7 +7,7 @@ import Table from "../../components/Table";
import * as actions from "../../redux/actions";
import Editor from "./layouts/Editor";
const source = "user";
const source = "book";
const title = " مدیریت کاربران";
const UserManagement = ({
@ -18,11 +18,12 @@ const UserManagement = ({
add,
update,
getSchoolList,
schoolList
schoolList,
schoolUserList,
}) => {
useMemo(() => {
// getData({ num: 1000 });
getSchoolList({ productType :7});
getSchoolList({ productType: 7 });
}, []);
// console.log(info);
console.log(schoolList);
@ -47,27 +48,43 @@ const UserManagement = ({
// ]);
const [activeOtherTab, setActiveOtherTab] = useState(false);
const [fake, setFake] = useState(0);
const [schoolId, setSchoolId] = useState(null);
const [setp, setStep] = useState(1);
const submitHandler = () => {
getData({ id: schoolId });
setStep(2);
};
return (
<div
className="UserManagement w-[95.5%] h-screen max-h-screen bg-[#F8F8F8] overflow-y-auto rtl relative"
// style={{ width: "calc(100% - 4.5%)" }}
>
{setp === 1 && (
<div className="w-full h-full absolute top-0 left-0 bg-[#ffffff10] backdrop-blur z-[100] flex items-center justify-center">
<div className="w-1/2 py-4 px-2 rounded bg-white flex items-center justify-between">
<select
name="UserManagement-school-select"
id="UserManagement-school-select"
className="w-[70%] h-12 rounded px-1 py-0"
onChange={(e) => setSchoolId(e.target.value)}
>
{schoolList?.map((item,index)=>(
<option key={index} value={item.id}>{item?.name}</option>
<option value={null}>انتخاب مدرسه</option>
{schoolList?.map((item, index) => (
<option key={index} value={item.id}>
{item?.name}
</option>
))}
</select>
<div className="h-12 w-[25%] rounded flex items-center justify-center text-white bg-red52">
<div
className="h-12 w-[25%] rounded flex items-center justify-center text-white bg-red52 cursor-pointer"
onClick={submitHandler}
>
تایید
</div>
</div>
</div>
)}
<div className="flex flex-1 w-full pt-12 pb-4">
<Table
data={info.list || []}
@ -89,13 +106,15 @@ const UserManagement = ({
);
};
const mapStateToProps = (state) => ({
info: state[source],
info: state[source].schoolUserList,
tabs: state.table.tabs,
schoolList: state.book.list
schoolList: state.book.list,
schoolUserList: state.book.schoolUserList,
});
const mapDispatchToProps = {
getData: actions[source].list,
// getData: actions[source].list,
getData: actions[source].schoolUser,
setTabs: actions.table.setTab,
update: actions[source].update,
add: actions[source].add,

@ -1014,6 +1014,13 @@
core-js-pure "^3.19.0"
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.0.0":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580"
integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
version "7.16.5"
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.5.tgz"
@ -4359,7 +4366,7 @@ file-entry-cache@^6.0.1:
dependencies:
flat-cache "^3.0.4"
file-loader@^6.2.0:
file-loader@^6.0.0, file-loader@^6.2.0:
version "6.2.0"
resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz"
integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==
@ -6149,6 +6156,11 @@ magic-string@^0.25.0, magic-string@^0.25.7:
dependencies:
sourcemap-codec "^1.4.4"
make-cancellable-promise@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/make-cancellable-promise/-/make-cancellable-promise-1.1.0.tgz#b4e9fcb31db3a27417e44f80cffa598ec9ac9f4e"
integrity sha512-X5Opjm2xcZsOLuJ+Bnhb4t5yfu4ehlA3OKEYLtqUchgVzL/QaqW373ZUVxVHKwvJ38cmYuR4rAHD2yUvAIkTPA==
make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
version "3.1.0"
resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz"
@ -6156,6 +6168,11 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
dependencies:
semver "^6.0.0"
make-event-props@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/make-event-props/-/make-event-props-1.3.0.tgz#2434cb390d58bcf40898d009ef5b1f936de9671b"
integrity sha512-oWiDZMcVB1/A487251hEWza1xzgCzl6MXxe9aF24l5Bt9N9UEbqTqKumEfuuLhmlhRZYnc+suVvW4vUs8bwO7Q==
makeerror@1.0.12:
version "1.0.12"
resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz"
@ -6229,11 +6246,21 @@ memoize-one@^5.1.1:
resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz"
integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==
merge-class-names@^1.1.1:
version "1.4.2"
resolved "https://registry.yarnpkg.com/merge-class-names/-/merge-class-names-1.4.2.tgz#78d6d95ab259e7e647252a7988fd25a27d5a8835"
integrity sha512-bOl98VzwCGi25Gcn3xKxnR5p/WrhWFQB59MS/aGENcmUc6iSm96yrFDF0XSNurX9qN4LbJm0R9kfvsQ17i8zCw==
merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz"
integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
merge-refs@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/merge-refs/-/merge-refs-1.0.0.tgz#388348bce22e623782c6df9d3c4fc55888276120"
integrity sha512-WZ4S5wqD9FCR9hxkLgvcHJCBxzXzy3VVE6p8W2OzxRzB+hLRlcadGE2bW9xp2KSzk10rvp4y+pwwKO6JQVguMg==
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz"
@ -6775,6 +6802,11 @@ pbf@^3.2.1:
ieee754 "^1.1.12"
resolve-protobuf-schema "^2.1.0"
pdfjs-dist@2.12.313:
version "2.12.313"
resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz#62f2273737bb956267ae2e02cdfaddcb1099819c"
integrity sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==
pdfjs-dist@^2.13.216:
version "2.13.216"
resolved "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.13.216.tgz"
@ -7423,6 +7455,15 @@ prompts@^2.0.1, prompts@^2.4.2:
kleur "^3.0.3"
sisteransi "^1.0.5"
prop-types@^15.6.2:
version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
dependencies:
loose-envify "^1.4.0"
object-assign "^4.1.1"
react-is "^16.13.1"
prop-types@^15.7.2:
version "15.8.0"
resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.0.tgz"
@ -7673,6 +7714,22 @@ react-multi-date-picker@^3.3.0:
react-date-object "^2.1.5"
react-element-popper "^2.1.6"
react-pdf@^5.7.2:
version "5.7.2"
resolved "https://registry.yarnpkg.com/react-pdf/-/react-pdf-5.7.2.tgz#c458dedf7983822668b40dcac1eae052c1f6e056"
integrity sha512-hdDwvf007V0i2rPCqQVS1fa70CXut17SN3laJYlRHzuqcu8sLLjEoeXihty6c0Ev5g1mw31b8OT8EwRw1s8C4g==
dependencies:
"@babel/runtime" "^7.0.0"
file-loader "^6.0.0"
make-cancellable-promise "^1.0.0"
make-event-props "^1.1.0"
merge-class-names "^1.1.1"
merge-refs "^1.0.0"
pdfjs-dist "2.12.313"
prop-types "^15.6.2"
tiny-invariant "^1.0.0"
tiny-warning "^1.0.0"
react-redux@^7.2.0, react-redux@^7.2.6:
version "7.2.6"
resolved "https://registry.npmjs.org/react-redux/-/react-redux-7.2.6.tgz"
@ -8783,11 +8840,16 @@ timsort@^0.3.0:
resolved "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz"
integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
tiny-invariant@^1.0.6:
tiny-invariant@^1.0.0, tiny-invariant@^1.0.6:
version "1.2.0"
resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz"
integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==
tiny-warning@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
tinyqueue@^2.0.3:
version "2.0.3"
resolved "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz"

Loading…
Cancel
Save