use client-side wiki fetch for batch preview imports

This commit is contained in:
Justin Edmund 2025-12-14 13:17:34 -08:00
parent 34db76fbdc
commit 5c870b148e
4 changed files with 60 additions and 9 deletions

View file

@ -1192,13 +1192,21 @@ export class EntityAdapter extends BaseAdapter {
* Fetches wiki data and suggestions for multiple character wiki pages
* Requires editor role (>= 7)
* @param wikiPages - Array of wiki page names (max 10)
* @param wikiData - Optional pre-fetched wiki text keyed by page name
*/
async batchPreviewCharacters(
wikiPages: string[]
wikiPages: string[],
wikiData?: Record<string, string>
): Promise<BatchPreviewResponse<CharacterSuggestions>> {
const body: { wiki_pages: string[]; wiki_data?: Record<string, string> } = {
wiki_pages: wikiPages
}
if (wikiData) {
body.wiki_data = wikiData
}
return this.request<BatchPreviewResponse<CharacterSuggestions>>('/characters/batch_preview', {
method: 'POST',
body: { wiki_pages: wikiPages }
body
})
}
@ -1206,13 +1214,21 @@ export class EntityAdapter extends BaseAdapter {
* Fetches wiki data and suggestions for multiple weapon wiki pages
* Requires editor role (>= 7)
* @param wikiPages - Array of wiki page names (max 10)
* @param wikiData - Optional pre-fetched wiki text keyed by page name
*/
async batchPreviewWeapons(
wikiPages: string[]
wikiPages: string[],
wikiData?: Record<string, string>
): Promise<BatchPreviewResponse<WeaponSuggestions>> {
const body: { wiki_pages: string[]; wiki_data?: Record<string, string> } = {
wiki_pages: wikiPages
}
if (wikiData) {
body.wiki_data = wikiData
}
return this.request<BatchPreviewResponse<WeaponSuggestions>>('/weapons/batch_preview', {
method: 'POST',
body: { wiki_pages: wikiPages }
body
})
}
@ -1220,13 +1236,21 @@ export class EntityAdapter extends BaseAdapter {
* Fetches wiki data and suggestions for multiple summon wiki pages
* Requires editor role (>= 7)
* @param wikiPages - Array of wiki page names (max 10)
* @param wikiData - Optional pre-fetched wiki text keyed by page name
*/
async batchPreviewSummons(
wikiPages: string[]
wikiPages: string[],
wikiData?: Record<string, string>
): Promise<BatchPreviewResponse<SummonSuggestions>> {
const body: { wiki_pages: string[]; wiki_data?: Record<string, string> } = {
wiki_pages: wikiPages
}
if (wikiData) {
body.wiki_data = wikiData
}
return this.request<BatchPreviewResponse<SummonSuggestions>>('/summons/batch_preview', {
method: 'POST',
body: { wiki_pages: wikiPages }
body
})
}

View file

@ -3,6 +3,7 @@
<script lang="ts">
import { goto } from '$app/navigation'
import { entityAdapter, type CharacterSuggestions } from '$lib/api/adapters/entity.adapter'
import { fetchWikiPages, buildWikiDataMap } from '$lib/api/wiki'
import { getCharacterImage, getPlaceholderImage } from '$lib/utils/images'
// Components
@ -174,7 +175,15 @@
selectedWikiPage = pages[0] ?? null
try {
const response = await entityAdapter.batchPreviewCharacters(pages)
// Step 1: Fetch wiki data client-side (bypasses CloudFlare)
const wikiResults = await fetchWikiPages(pages)
const wikiData = buildWikiDataMap(wikiResults)
// Update pages array with any redirects
const finalPages = wikiResults.map((r) => r.wikiPage)
// Step 2: Send to API for parsing (with pre-fetched wiki data)
const response = await entityAdapter.batchPreviewCharacters(finalPages, wikiData)
// Update entities with results
const updatedEntities = new Map<string, EntityState>()

View file

@ -3,6 +3,7 @@
<script lang="ts">
import { goto } from '$app/navigation'
import { entityAdapter, type SummonSuggestions } from '$lib/api/adapters/entity.adapter'
import { fetchWikiPages, buildWikiDataMap } from '$lib/api/wiki'
import { getSummonImage, getPlaceholderImage } from '$lib/utils/images'
// Components
@ -164,7 +165,15 @@
selectedWikiPage = pages[0] ?? null
try {
const response = await entityAdapter.batchPreviewSummons(pages)
// Step 1: Fetch wiki data client-side (bypasses CloudFlare)
const wikiResults = await fetchWikiPages(pages)
const wikiData = buildWikiDataMap(wikiResults)
// Update pages array with any redirects
const finalPages = wikiResults.map((r) => r.wikiPage)
// Step 2: Send to API for parsing (with pre-fetched wiki data)
const response = await entityAdapter.batchPreviewSummons(finalPages, wikiData)
// Update entities with results
const updatedEntities = new Map<string, EntityState>()

View file

@ -3,6 +3,7 @@
<script lang="ts">
import { goto } from '$app/navigation'
import { entityAdapter, type WeaponSuggestions } from '$lib/api/adapters/entity.adapter'
import { fetchWikiPages, buildWikiDataMap } from '$lib/api/wiki'
import { getWeaponImage, getPlaceholderImage } from '$lib/utils/images'
// Components
@ -166,7 +167,15 @@
selectedWikiPage = pages[0] ?? null
try {
const response = await entityAdapter.batchPreviewWeapons(pages)
// Step 1: Fetch wiki data client-side (bypasses CloudFlare)
const wikiResults = await fetchWikiPages(pages)
const wikiData = buildWikiDataMap(wikiResults)
// Update pages array with any redirects
const finalPages = wikiResults.map((r) => r.wikiPage)
// Step 2: Send to API for parsing (with pre-fetched wiki data)
const response = await entityAdapter.batchPreviewWeapons(finalPages, wikiData)
// Update entities with results
const updatedEntities = new Map<string, EntityState>()