diff --git a/IWantToHeal-Thor-v1.0.40.apk b/IWantToHeal-Thor-v1.0.40.apk
new file mode 100644
index 0000000..1ad97d7
Binary files /dev/null and b/IWantToHeal-Thor-v1.0.40.apk differ
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 25089be..c046471 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -7,8 +7,8 @@ android {
applicationId "com.warren.iwanttoheal"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 59
- versionName "1.0.39"
+ versionCode 60
+ versionName "1.0.40"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
diff --git a/src/App.css b/src/App.css
index 2eff659..9204df8 100644
--- a/src/App.css
+++ b/src/App.css
@@ -1952,16 +1952,6 @@ h2 {
grid-template-columns: 1fr;
}
-.part-start-row {
- display: grid;
- gap: 8px;
- grid-template-columns: minmax(0, 1fr) minmax(82px, 0.38fr);
-}
-
-.hard-mode-button {
- border-color: #c25b4b;
-}
-
.part-setup-panel .primary-button {
min-height: 54px;
}
diff --git a/src/App.tsx b/src/App.tsx
index 5689798..78919b9 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -88,7 +88,6 @@ function App() {
const [roguelikeUpgradeTiming, setRoguelikeUpgradeTiming] = useState('encounter')
const [roguelikeAbilityLabelMode, setRoguelikeAbilityLabelMode] = useState('ability')
const [pvpContentType, setPvpContentType] = useState('dungeon')
- const [selectedPart, setSelectedPart] = useState(1)
const [selectedMarathonMode, setSelectedMarathonMode] = useState(false)
const [activityPage, setActivityPage] = useState(0)
const [combatContentId, setCombatContentId] = useState(1)
@@ -233,7 +232,6 @@ function App() {
const roguelikePool = profile.dungeons
.filter((candidate) => candidate.contentType === roguelikeKind)
.flatMap((candidate) => candidate.encounters)
- const startPart = selectedPart
return (
{
setScreen(combatContentId < 0 ? 'roguelike' : dungeon.contentType === 'raid' ? 'raids' : 'dungeons')
}}
@@ -298,7 +296,6 @@ function App() {
setCombatContentId(-1)
setSelectedDifficultyId(baseDungeon?.difficulties[0]?.id ?? 1)
}
- setSelectedPart(1)
setSelectedMarathonMode(false)
setScreen('combat')
}
@@ -318,24 +315,24 @@ function App() {
?? tierOptions.slice().reverse().find((candidate) => profile.character.level >= candidate.unlockLevel)
?? tierOptions[0]
const selectedTierItemLevel = selectedTier?.droppedItemLevel ?? 0
- const tierActivityOptions = activityOptions.filter((option) =>
- option.difficulties.some((difficulty) => difficulty.droppedItemLevel === selectedTierItemLevel),
- )
- const activityPageCount = Math.max(1, Math.ceil(tierActivityOptions.length / ACTIVITY_PAGE_SIZE))
+ const activityPageCount = Math.max(1, Math.ceil(activityOptions.length / ACTIVITY_PAGE_SIZE))
const currentActivityPage = Math.min(activityPage, activityPageCount - 1)
- const pagedActivityOptions = tierActivityOptions.slice(
+ const pagedActivityOptions = activityOptions.slice(
currentActivityPage * ACTIVITY_PAGE_SIZE,
currentActivityPage * ACTIVITY_PAGE_SIZE + ACTIVITY_PAGE_SIZE,
)
+ const activityPageStart = activityOptions.length === 0
+ ? 0
+ : currentActivityPage * ACTIVITY_PAGE_SIZE + 1
+ const activityPageEnd = Math.min(activityOptions.length, (currentActivityPage + 1) * ACTIVITY_PAGE_SIZE)
const selectedActivityId = screen === 'raids' && raid ? raid.id : dungeon.id
- const activity = tierActivityOptions.find((candidate) => candidate.id === selectedActivityId)
- ?? tierActivityOptions[0]
+ const activity = activityOptions.find((candidate) => candidate.id === selectedActivityId)
+ ?? activityOptions[0]
?? (screen === 'raids' && raid ? raid : dungeon)
const selectedDifficulty = activity.difficulties.find(
(candidate) => candidate.droppedItemLevel === selectedTierItemLevel,
) ?? activity.difficulties[0]
const difficultyLocked = profile.character.level < selectedDifficulty.unlockLevel
- const sectionName = activity.contentType === 'raid' ? 'Phase' : 'Part'
const activityCompletionCount = activity.completionCount ?? 0
const marathonUnlocked = activityCompletionCount >= 10
const cloudSync = getCloudSyncStatus()
@@ -652,7 +649,7 @@ function App() {
>
Prev
- {currentActivityPage + 1}/{activityPageCount}
+ {activityPageStart}-{activityPageEnd} of {activityOptions.length}
{([
- { key: 'part_1', label: `${sectionName} 1` },
- { key: 'part_2', label: `${sectionName} 2` },
- { key: 'part_3', label: `${sectionName} 3` },
- { key: 'full_run', label: 'Full Run' },
+ { key: 'part_1', label: 'Run' },
+ { key: 'part_2', label: 'Legacy 2' },
+ { key: 'part_3', label: 'Legacy 3' },
+ { key: 'full_run', label: 'Legacy Full' },
] as const).map((tab) => (