diff --git a/src/app.tsx b/src/app.tsx
index 040818b8..c47709f8 100644
--- a/src/app.tsx
+++ b/src/app.tsx
@@ -24,9 +24,7 @@ export const Providers = (props: { children?: JSX.Element }) => {
- }>
- {props.children}
-
+ }>{props.children}
diff --git a/src/components/Topic/TopicBadge/TopicBadge.tsx b/src/components/Topic/TopicBadge/TopicBadge.tsx
index 2f8c4072..6ee8f572 100644
--- a/src/components/Topic/TopicBadge/TopicBadge.tsx
+++ b/src/components/Topic/TopicBadge/TopicBadge.tsx
@@ -87,7 +87,7 @@ export const TopicBadge = (props: Props) => {
diff --git a/src/context/topics.tsx b/src/context/topics.tsx
index 0a75f610..796238d3 100644
--- a/src/context/topics.tsx
+++ b/src/context/topics.tsx
@@ -6,9 +6,9 @@ import {
createContext,
createEffect,
createMemo,
+ createReaction,
createSignal,
on,
- onMount,
useContext
} from 'solid-js'
import { loadTopics } from '~/lib/api'
@@ -45,13 +45,28 @@ const STORE_NAME = 'topics'
const CACHE_LIFETIME = 24 * 60 * 60 * 1000 // один день в миллисекундах
const setupIndexedDB = async () => {
- return await openDB(DB_NAME, DB_VERSION, {
- upgrade(db) {
- if (!db.objectStoreNames.contains(STORE_NAME)) {
- db.createObjectStore(STORE_NAME, { keyPath: 'id' })
+ if (!('indexedDB' in window)) {
+ console.error("This browser doesn't support IndexedDB")
+ return
+ }
+
+ try {
+ const db = await openDB(DB_NAME, DB_VERSION, {
+ upgrade(db, oldVersion, newVersion, _transaction) {
+ console.log(`Upgrading database from version ${oldVersion} to ${newVersion}`)
+ if (db.objectStoreNames.contains(STORE_NAME)) {
+ console.log(`Object store ${STORE_NAME} already exists`)
+ } else {
+ console.log(`Creating object store: ${STORE_NAME}`)
+ db.createObjectStore(STORE_NAME, { keyPath: 'id' })
+ }
}
- }
- })
+ })
+ console.log('Database opened successfully:', db)
+ return db
+ } catch (e) {
+ console.error('Failed to open IndexedDB:', e)
+ }
}
const getTopicsFromIndexedDB = async (db: IDBDatabase) => {
@@ -157,7 +172,7 @@ export const TopicsProvider = (props: { children: JSX.Element }) => {
return ttt || []
}
- onMount(async () => {
+ createReaction(async () => {
setDb(await setupIndexedDB())
console.info('[context.topics] idb loaded')
})
diff --git a/src/routes/(home).tsx b/src/routes/(home).tsx
index 2639e817..7e71ad44 100644
--- a/src/routes/(home).tsx
+++ b/src/routes/(home).tsx
@@ -1,5 +1,5 @@
import { type RouteDefinition, type RouteSectionProps, createAsync } from '@solidjs/router'
-import { Show, Suspense, createEffect, createSignal, on, onMount } from 'solid-js'
+import { Show, Suspense, createSignal, onMount } from 'solid-js'
import { LoadShoutsOptions } from '~/graphql/schema/core.gen'
import { loadShouts } from '~/lib/api'
import { restoreScrollPosition, saveScrollPosition } from '~/utils/scroll'
@@ -87,29 +87,19 @@ export default function HomePage(props: RouteSectionProps) {
return result
})
- const [canLoadMoreFeatured, setCanLoadMoreFeatured] = createSignal(false)
+ const [canLoadMoreFeatured, setCanLoadMoreFeatured] = createSignal(true)
const loadMoreFeatured = async () => {
saveScrollPosition()
const before = data()?.featuredShouts.length || 0
featuredLoader(featuredOffset())
- const after = data()?.featuredShouts.length || 0
- setCanLoadMoreFeatured((_) => before !== after)
setFeaturedOffset((o: number) => o + limit)
+ const after = data()?.featuredShouts.length || 0
+ setTimeout(() => setCanLoadMoreFeatured((_) => before !== after), 1)
restoreScrollPosition()
}
- onMount(loadMoreFeatured)
+ onMount(async () => await loadMoreFeatured())
- // Re-run the loader whenever the featured offset changes
- createEffect(
- on(
- featuredOffset,
- (o: number) => {
- featuredLoader(o) // using fresh offset by itself
- },
- { defer: true }
- )
- )
return (