From 63ede81deb09df19f62628b63eef2f240e856a67 Mon Sep 17 00:00:00 2001 From: hiroto7 <32275337+hiroto7@users.noreply.github.com> Date: Sun, 12 Jan 2020 00:06:53 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[=E5=B1=A5=E4=BF=AE=E3=81=99=E3=82=8B?= =?UTF-8?q?=E7=A7=91=E7=9B=AE=E3=81=AE=E3=81=BF=E8=A1=A8=E7=A4=BA=E3=81=99?= =?UTF-8?q?=E3=82=8B]=20=E3=81=A8=E3=81=8D=E3=80=81=20[=E5=B1=A5=E4=BF=AE?= =?UTF-8?q?=E3=81=97=E3=81=AA=E3=81=84]=20=E3=82=92=E3=83=AD=E3=83=83?= =?UTF-8?q?=E3=82=AF=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index b758c82..5ade0b9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -22,6 +22,15 @@ const App = () => { const [lockTarget, setLockTarget] = useState(RegistrationStatusLockTarget.None); const { plan, setPlan } = usePlan(selected.name); + const actualLockTarget = + filterType === FilterType.None ? + lockTarget : + lockTarget === RegistrationStatusLockTarget.None ? + RegistrationStatusLockTarget.Unregistered : + lockTarget === RegistrationStatusLockTarget.Acquired ? + RegistrationStatusLockTarget.All : + lockTarget; + return ( <> <Navbar variant="dark" bg="dark"> @@ -51,6 +60,7 @@ const App = () => { { label: "ロックしない", lockTarget: RegistrationStatusLockTarget.None, + disabled: filterType !== FilterType.None, }, { label: "[履修する] と [修得済み] の間の変更のみ許可", @@ -59,17 +69,19 @@ const App = () => { { label: "[履修しない] と [履修する] の間の変更のみ許可", lockTarget: RegistrationStatusLockTarget.Acquired, + disabled: filterType !== FilterType.None, }, { label: "すべてロックする", lockTarget: RegistrationStatusLockTarget.All, }, - ].map(({ label, lockTarget: lockTarget1 }) => ( + ].map(({ label, disabled, lockTarget: lockTarget1 }) => ( <Form.Check custom type="radio" id={`lockTargetCheck${lockTarget1}`} label={label} key={lockTarget1} - checked={lockTarget === lockTarget1} + disabled={disabled} + checked={actualLockTarget === lockTarget1} onChange={() => setLockTarget(lockTarget1)} /> )) @@ -111,7 +123,7 @@ const App = () => { <div className="mb-3"> <RequirementsRootView requirement={selected.requirement} - lockTarget={lockTarget} filterType={filterType} + lockTarget={actualLockTarget} filterType={filterType} plan={plan} onChange={setPlan} /> </div> From 795c28aa3d6fee2d92986ec2e8d1b68361d81764 Mon Sep 17 00:00:00 2001 From: hiroto7 <32275337+hiroto7@users.noreply.github.com> Date: Sun, 12 Jan 2020 00:23:04 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[=E5=B1=A5=E4=BF=AE=E3=81=99=E3=82=8B?= =?UTF-8?q?=E7=A7=91=E7=9B=AE=E3=81=AE=E3=81=BF=E8=A1=A8=E7=A4=BA=E3=81=99?= =?UTF-8?q?=E3=82=8B]=20=E3=81=8C=E3=82=AA=E3=83=B3=E3=81=AE=E3=81=A8?= =?UTF-8?q?=E3=81=8D=E3=81=AB=20lockTarget=20=E3=82=92=E8=A8=88=E7=AE=97?= =?UTF-8?q?=E3=81=99=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92=E3=80=81=20useLoc?= =?UTF-8?q?kTarget=20=E3=81=AB=E5=88=86=E9=9B=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 5ade0b9..01b953b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -19,18 +19,9 @@ const COURSES_STATE = "courses-state" const App = () => { const [selected, setSelected] = useState(defaultSelected); const [filterType, setFilterType] = useState(FilterType.None); - const [lockTarget, setLockTarget] = useState(RegistrationStatusLockTarget.None); + const { lockTarget, setLockTarget } = useLockTarget(filterType); const { plan, setPlan } = usePlan(selected.name); - const actualLockTarget = - filterType === FilterType.None ? - lockTarget : - lockTarget === RegistrationStatusLockTarget.None ? - RegistrationStatusLockTarget.Unregistered : - lockTarget === RegistrationStatusLockTarget.Acquired ? - RegistrationStatusLockTarget.All : - lockTarget; - return ( <> <Navbar variant="dark" bg="dark"> @@ -81,7 +72,7 @@ const App = () => { id={`lockTargetCheck${lockTarget1}`} label={label} key={lockTarget1} disabled={disabled} - checked={actualLockTarget === lockTarget1} + checked={lockTarget === lockTarget1} onChange={() => setLockTarget(lockTarget1)} /> )) @@ -123,7 +114,7 @@ const App = () => { <div className="mb-3"> <RequirementsRootView requirement={selected.requirement} - lockTarget={actualLockTarget} filterType={filterType} + lockTarget={lockTarget} filterType={filterType} plan={plan} onChange={setPlan} /> </div> @@ -132,6 +123,26 @@ const App = () => { ); } +const useLockTarget = (filterType: FilterType) => { + const [lockTarget, setLockTarget] = useState(RegistrationStatusLockTarget.None); + + if (filterType === FilterType.None) { + return { lockTarget, setLockTarget }; + } else if (lockTarget === RegistrationStatusLockTarget.None) { + return { + lockTarget: RegistrationStatusLockTarget.Unregistered, + setLockTarget, + }; + } else if (lockTarget === RegistrationStatusLockTarget.Acquired) { + return { + lockTarget: RegistrationStatusLockTarget.All, + setLockTarget, + }; + } else { + return { lockTarget, setLockTarget }; + } +} + const usePlanMap = () => { const [storedJSON, setStoredJSON] = useLocalStorage<readonly (readonly [string, PlanJSON])[]>(COURSES_STATE); const [planMap0, setPlanMap0] = useState(() => {