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(() => {