react-rel-pdfviewer-wrapper
Version:
react pdfviewer wrapper
692 lines (644 loc) • 26.9 kB
JavaScript
import React, { useState, useEffect } from "react";
import { CheckSVG, ChevronLeftSVG, ChevronRightSVG } from "../svg";
const ConfigController = ({ ...props }) => {
const { resaveConfig, showConfig, ChartOption, followEvent, set_followEvent, autoReplay
, set_autoReplay } = props;
const [, forceUpdate] = useState();
useEffect(() => {
forceUpdate({});
}, [ChartOption]);
const [mainConfigWidth, set_mainConfigWidth] = useState("250px");
const [mainConfigHegiht, set_mainConfigHeight] = useState("950px");
const [subConfig1Width, set_subConfig1Width] = useState("0");
const [subConfig1Hegiht, set_subConfig1Height] = useState("0");
const [subConfig3Width, set_subConfig3Width] = useState("0");
const [subConfig3Hegiht, set_subConfig3Height] = useState("0");
const [subConfig4Width, set_subConfig4Width] = useState("0");
const [subConfig4Hegiht, set_subConfig4Height] = useState("0");
const [subConfig6Width, set_subConfig6Width] = useState("0");
const [subConfig6Hegiht, set_subConfig6Height] = useState("0");
useEffect(() => {
let a;
if (!showConfig) {
a = setTimeout(function () {
set_mainConfigWidth('250px');
set_mainConfigHeight('800px');
set_subConfig1Width("0");
set_subConfig1Height("0");
set_subConfig3Width("0");
set_subConfig3Height("0");
set_subConfig4Width("0");
set_subConfig4Height("0");
set_subConfig6Width("0");
set_subConfig6Height("0");
}, 300);
}
return () => {
clearTimeout(a);
}
}, [showConfig])
return (<div
className="ConfigWrapper configArea"
style={{
opacity: showConfig ? "1" : "0",
visibility: showConfig ? "visible" : "hidden",
}}
onClick={(e) => {
e.stopPropagation();
}}
>
<div
className="mainConfig"
style={{
width: mainConfigWidth,
height: mainConfigHegiht,
}}
>
<div
className="oneConfig"
onClick={() => {
ChartOption.heatMap = !ChartOption.heatMap;
resaveConfig();
}}
>
<div className="c_label">히트맵 보기(H)</div>
<div className="c_data">
<div className="ckbx-style-8">
<input type="checkbox" name="ckbx-style-8" checked={ChartOption.heatMap} onChange={() => { }} />
<label />
</div>
</div>
</div>
<div
className="oneConfig borderBottom"
onClick={() => {
//여기 팝
set_mainConfigWidth(0);
set_mainConfigHeight(0);
set_subConfig6Width("250px");
set_subConfig6Height("200px");
}}
>
<div className="c_label">히트맵 세부설정</div>
<div className="c_data">
<div style={{ width: "75%", display: "flex", alignItems: "center", justifyContent: "flex-end", paddingRight: "15px" }}>기본</div>
<div style={{ width: "25%", display: "flex", alignItems: "center", justifyContent: "center", paddingRight: "10px" }}>
<ChevronRightSVG />
</div>
</div>
</div>
<div
className="oneConfig borderBottom"
onClick={() => {
ChartOption.penPermit = !ChartOption.penPermit;
resaveConfig();
}}
>
<div className="c_label">펜 보기</div>
<div className="c_data">
<div className="ckbx-style-8">
<input type="checkbox" name="ckbx-style-8" checked={ChartOption.penPermit} onChange={() => { }} />
<label />
</div>
</div>
</div>
<div className="oneConfig">
<div className="c_label">시선 크기 <span style={{ fontSize: '7px' }}>{ChartOption.RPOG_size}</span></div>
<div className="c_data">
<input
type="range"
style={{ width: "70%" }}
value={ChartOption.RPOG_size}
min={1}
step={0.1}
max={80}
onChange={(e) => {
ChartOption.RPOG_size = e.target.value * 1;
resaveConfig();
}}
/>
</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.RPOG = !ChartOption.RPOG;
resaveConfig();
}}
>
<div className="c_label">시선 보기(G)</div>
<div className="c_data">
<div className="ckbx-style-8">
<input type="checkbox" name="ckbx-style-8" checked={ChartOption.RPOG} onChange={() => { }} />
<label />
</div>
</div>
</div>
<div
className="oneConfig borderBottom"
onClick={() => {
ChartOption.RPOG_line = !ChartOption.RPOG_line;
resaveConfig();
}}
>
<div className="c_label">시선 이동 보기(K)</div>
<div className="c_data">
<div className="ckbx-style-8">
<input type="checkbox" name="ckbx-style-8" checked={ChartOption.RPOG_line} onChange={() => { }} />
<label />
</div>
</div>
</div>
<div className="oneConfig">
<div className="c_label">응시 크기 <span style={{ fontSize: '7px' }}>{ChartOption.FPOG_size}</span></div>
<div className="c_data">
<input
type="range"
style={{ width: "70%" }}
value={ChartOption.FPOG_size}
min={0}
step={0.1}
max={100}
onChange={(e) => {
ChartOption.FPOG_size = e.target.value * 1;
resaveConfig();
}}
/>
</div>
</div>
<div
className="oneConfig"
onClick={() => {
if (ChartOption.FPOG && ChartOption.FPOG_number) {
ChartOption.FPOG_number = !ChartOption.FPOG_number;
}
ChartOption.FPOG = !ChartOption.FPOG;
resaveConfig();
}}
>
<div className="c_label">응시 보기(F)</div>
<div className="c_data">
<div className="ckbx-style-8">
<input type="checkbox" name="ckbx-style-8" checked={ChartOption.FPOG} onChange={() => { }} />
<label />
</div>
</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.rainBow = !ChartOption.rainBow;
resaveConfig();
}}
data-tip="페이지별 응시의 순서에 따라 응시의 색을 무지개순서로 표현"
>
<div className="c_label">응시 무지개</div>
<div className="c_data">
<div className="ckbx-style-8">
<input type="checkbox" name="ckbx-style-8" checked={ChartOption.rainBow} onChange={() => { }} />
<label />
</div>
</div>
</div>
<div className="oneConfig">
<div className="c_label">응시 투명도 <span style={{ fontSize: '7px' }}>{ChartOption.FPOG_opacity}</span></div>
<div className="c_data">
<input
type="range"
style={{ width: "70%" }}
value={ChartOption.FPOG_opacity}
min={0.01}
step={0.01}
max={1}
onChange={(e) => {
ChartOption.FPOG_opacity = e.target.value * 1;
resaveConfig();
}}
/>
</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.FPOG_line = !ChartOption.FPOG_line;
resaveConfig();
}}
>
<div className="c_label">응시 이동 보기(L)</div>
<div className="c_data">
<div className="ckbx-style-8">
<input type="checkbox" name="ckbx-style-8" checked={ChartOption.FPOG_line} onChange={() => { }} />
<label />
</div>
</div>
</div>
<div
className="oneConfig"
onClick={() => {
if (!ChartOption.FPOG_number && !ChartOption.FPOG) {
ChartOption.FPOG = !ChartOption.FPOG;
}
ChartOption.FPOG_number = !ChartOption.FPOG_number;
resaveConfig();
}}
>
<div className="c_label">응시 순번 보기(N)</div>
<div className="c_data">
<div className="ckbx-style-8">
<input type="checkbox" name="ckbx-style-8" checked={ChartOption.FPOG_number} onChange={() => { }} />
<label />
</div>
</div>
</div>
<div className="oneConfig borderBottom">
<div className="c_label">응시 순서 크기 <span style={{ fontSize: '7px' }}>{ChartOption.FPOG_number_size}</span></div>
<div className="c_data">
<input
type="range"
style={{ width: "70%" }}
value={ChartOption.FPOG_number_size}
min={1}
step={0.1}
max={5}
onChange={(e) => {
ChartOption.FPOG_number_size = e.target.value * 1;
resaveConfig();
}}
/>
</div>
</div>
<div
className="oneConfig"
onClick={() => {
//subConfig1로
set_mainConfigWidth(0);
set_mainConfigHeight(0);
set_subConfig1Width("250px");
set_subConfig1Height("350px");
}}
>
<div className="c_label">시선창 과거범위</div>
<div className="c_data">
<div style={{ width: "75%", display: "flex", alignItems: "center", justifyContent: "flex-end", paddingRight: "15px" }}>{ChartOption.GazePastRange !== null && ChartOption.GazePastRange === 0 ? "전체" : ChartOption.GazePastRange + "초"}</div>
<div style={{ width: "25%", display: "flex", alignItems: "center", justifyContent: "center", paddingRight: "10px" }}>
<ChevronRightSVG />
</div>
</div>
</div>
<div
className="oneConfig"
onClick={() => {
//subConfig1로
set_mainConfigWidth(0);
set_mainConfigHeight(0);
set_subConfig3Width("250px");
set_subConfig3Height("350px");
}}
>
<div className="c_label">재생 배속</div>
<div className="c_data">
<div style={{ width: "75%", display: "flex", alignItems: "center", justifyContent: "flex-end", paddingRight: "15px" }}>{ChartOption.playSpeed !== null && `x${ChartOption.playSpeed}`}</div>
<div style={{ width: "25%", display: "flex", alignItems: "center", justifyContent: "center", paddingRight: "10px" }}>
<ChevronRightSVG />
</div>
</div>
</div>
<div
className="oneConfig"
onClick={() => {
//subConfig1로
set_mainConfigWidth(0);
set_mainConfigHeight(0);
set_subConfig4Width("250px");
set_subConfig4Height("250px");
}}
>
<div className="c_label">재생 목표 FPS</div>
<div className="c_data">
<div style={{ width: "75%", display: "flex", alignItems: "center", justifyContent: "flex-end", paddingRight: "15px" }}>{ChartOption.drawFPS !== null && `${ChartOption.drawFPS}FPS`}</div>
<div style={{ width: "25%", display: "flex", alignItems: "center", justifyContent: "center", paddingRight: "10px" }}>
<ChevronRightSVG />
</div>
</div>
</div>
<div
className="oneConfig"
onClick={() => {
set_followEvent(f => !f)
}}
data-tip="재생 시, 측정당시의 [PDF view Page , 문서배율 , 스크롤 위치]를 측정시 환경과 동일하게 재생"
>
<div className="c_label">측정환경 모방</div>
<div className="c_data">
<div className="ckbx-style-8">
<input type="checkbox" name="ckbx-style-8" checked={followEvent} onChange={() => { }} />
<label />
</div>
</div>
</div>
<div
className="oneConfig"
onClick={() => {
set_autoReplay(f => !f)
}}
data-tip="반복재생"
>
<div className="c_label">반복재생</div>
<div className="c_data">
<div className="ckbx-style-8">
<input type="checkbox" name="ckbx-style-8" checked={autoReplay} onChange={() => { }} />
<label />
</div>
</div>
</div>
</div>
<div className="subConfig1" style={{ width: subConfig1Width, height: subConfig1Hegiht }}>
<div
className="oneConfig"
style={{ borderBottom: "1px solid #fff" }}
onClick={() => {
//다시 mainConfig으로
set_mainConfigWidth("250px");
set_mainConfigHeight("950px");
set_subConfig1Width("0");
set_subConfig1Height("0");
}}
>
<div className="c_label" style={{ width: '100%' }}>
<ChevronLeftSVG />
시선창 과거범위
</div>
<div className="c_data" style={{ width: 0 }}></div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.GazePastRange = 0;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.GazePastRange === 0 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">전체</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.GazePastRange = 0.5;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.GazePastRange === 0.5 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">0.5초</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.GazePastRange = 1;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.GazePastRange === 1 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">1초</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.GazePastRange = 2;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.GazePastRange === 2 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">2초</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.GazePastRange = 5;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.GazePastRange === 5 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">5초</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.GazePastRange = 10;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.GazePastRange === 10 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">10초</div>
</div>
</div>
<div className="subConfig3" style={{ width: subConfig3Width, height: subConfig3Hegiht }}>
<div
className="oneConfig"
style={{ borderBottom: "1px solid #fff" }}
onClick={() => {
//다시 mainConfig으로
set_mainConfigWidth("250px");
set_mainConfigHeight("950px");
set_subConfig3Width("0");
set_subConfig3Height("0");
}}
>
<div className="c_label">
<ChevronLeftSVG />
재생배속
</div>
<div className="c_data"></div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.playSpeed = 0.1;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.playSpeed === 0.1 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">x0.1</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.playSpeed = 0.5;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.playSpeed === 0.5 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">x0.5</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.playSpeed = 1;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.playSpeed === 1 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">x1</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.playSpeed = 2;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.playSpeed === 2 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">x2</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.playSpeed = 3;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.playSpeed === 3 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">x3</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.playSpeed = 5;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.playSpeed === 5 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">x5</div>
</div>
</div>
<div className="subConfig4" style={{ width: subConfig4Width, height: subConfig4Hegiht }}>
<div
className="oneConfig"
style={{ borderBottom: "1px solid #fff" }}
onClick={() => {
//다시 mainConfig으로
set_mainConfigWidth("250px");
set_mainConfigHeight("950px");
set_subConfig4Width("0");
set_subConfig4Height("0");
}}
>
<div className="c_label">
<ChevronLeftSVG />
재생 목표 FPS
</div>
<div className="c_data"></div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.drawFPS = 10;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.drawFPS === 10 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">10FPS</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.drawFPS = 20;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.drawFPS === 20 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">20FPS</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.drawFPS = 30;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.drawFPS === 30 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">30FPS</div>
</div>
<div
className="oneConfig"
onClick={() => {
ChartOption.drawFPS = 60;
resaveConfig();
}}
>
<div className="sub_checkzone">{ChartOption.drawFPS === 60 ? <CheckSVG /> : ""}</div>
<div className="sub_labelzone">60FPS</div>
</div>
</div>
<div className="subConfig6" style={{ width: subConfig6Width, height: subConfig6Hegiht }}>
<div
className="oneConfig"
style={{ borderBottom: "1px solid #fff" }}
onClick={() => {
//다시 mainConfig으로
set_mainConfigWidth("250px");
set_mainConfigHeight("950px");
set_subConfig6Width("0");
set_subConfig6Height("0");
}}
>
<div className="c_label" style={{ width: '100%' }}>
<ChevronLeftSVG />
히트맵 세부설정
</div>
<div className="c_data" style={{ width: 0 }}></div>
</div>
<div className="oneConfig">
<div className="c_label">HM_max{ChartOption.heatMapMax}</div>
<div className="c_data">
<input
type="range"
style={{ width: "70%" }}
value={ChartOption.heatMapMax}
min={1}
step={1}
max={420}
onChange={(e) => {
ChartOption.heatMapMax = e.target.value * 1;
resaveConfig();
}}
/>
</div>
</div>
<div className="oneConfig">
<div className="c_label">HM_radius{ChartOption.heatMapRadius}</div>
<div className="c_data">
<input
type="range"
style={{ width: "70%" }}
value={ChartOption.heatMapRadius}
min={1}
step={1}
max={180}
onChange={(e) => {
ChartOption.heatMapRadius = e.target.value * 1;
resaveConfig();
}}
/>
</div>
</div>
<div className="oneConfig">
<div className="c_label">HM_MaxOpacity{ChartOption.heatMapMaxOpacity}</div>
<div className="c_data">
<input
type="range"
style={{ width: "70%" }}
value={ChartOption.heatMapMaxOpacity}
min={0}
step={0.01}
max={1}
onChange={(e) => {
ChartOption.heatMapMaxOpacity = e.target.value * 1;
resaveConfig();
}}
/>
</div>
</div>
</div>
</div>);
}
export default ConfigController;