このコミットが含まれているのは:
2026-07-04 19:50:40 +09:00
コミット 4cc2dc5441
10個のファイルの変更542行の追加293行の削除
+4 -5
ファイルの表示
@@ -2,7 +2,6 @@
import { useRef, useState } from 'react'
import { useUserSettings } from '@/components/users/UserSettingsProvider'
import TagSearchBox from '@/components/TagSearchBox'
import FormField from '@/components/common/FormField'
import TextArea from '@/components/common/TextArea'
@@ -40,7 +39,6 @@ type Props = Omit<ComponentPropsWithoutRef<'textarea'>, 'value' | 'onChange' | '
const PostFormTagsArea: FC<Props> = ({ tags, setTags, errors, ...rest }) => {
const ref = useRef<HTMLTextAreaElement> (null)
const { settings } = useUserSettings ()
const [bounds, setBounds] = useState<{ start: number; end: number }> ({ start: 0, end: 0 })
const [focused, setFocused] = useState (false)
@@ -72,9 +70,10 @@ const PostFormTagsArea: FC<Props> = ({ tags, setTags, errors, ...rest }) => {
const data = await apiGet<Tag[]> ('/tags/autocomplete', { params: {
q: token,
nico: settings.tagAutocompleteNico ? '1' : '0' } })
setSuggestions (data.filter (t => t.postCount > 0))
setSuggestionsVsbl (suggestions.length > 0)
nico: '0' } })
const nextSuggestions = data.filter (t => t.postCount > 0)
setSuggestions (nextSuggestions)
setSuggestionsVsbl (nextSuggestions.length > 0)
}
return (
+1 -5
ファイルの表示
@@ -22,14 +22,10 @@ const PostList: FC<Props> = ({ posts, onClick }) => {
const setForLocationKey = useSharedTransitionStore (s => s.setForLocationKey)
const cardRef = useRef<HTMLDivElement> (null)
const visiblePosts =
settings.viewedPostDisplay === 'hide'
? posts.filter (post => !(post.viewed))
: posts
return (
<div className="flex flex-wrap gap-6 p-4">
{visiblePosts.map ((post, i) => {
{posts.map ((post, i) => {
const sharedId = `page-${ post.id }`
const layoutId = sharedId
+3 -3
ファイルの表示
@@ -37,9 +37,9 @@ const TagInput: FC<Props> = ({ describedBy, invalid, value, setValue }) => {
const data = await apiGet<Tag[]> ('/tags/autocomplete', { params: {
q,
nico: settings.tagAutocompleteNico ? '1' : '0' } })
setSuggestions (data.filter (t => t.postCount > 0))
if (suggestions.length > 0)
setSuggestionsVsbl (true)
const nextSuggestions = data.filter (t => t.postCount > 0)
setSuggestions (nextSuggestions)
setSuggestionsVsbl (nextSuggestions.length > 0)
}
// TODO: TagSearch からのコピペのため,共通化を考へる.
+8 -1
ファイルの表示
@@ -9,6 +9,7 @@ import type { UserSettings } from '@/lib/settings'
type ContextValue = {
loaded: boolean
error: string | null
settings: UserSettings
setSettings: Dispatch<SetStateAction<UserSettings>> }
@@ -41,6 +42,7 @@ const applyTheme = (theme: UserSettings['theme']) => {
export const UserSettingsProvider: FC<{
children: ReactNode
user: User | null }> = ({ children, user }) => {
const [error, setError] = useState<string | null> (null)
const [loaded, setLoaded] = useState (false)
const [settings, setSettings] = useState<UserSettings> (DEFAULT_USER_SETTINGS)
@@ -49,12 +51,14 @@ export const UserSettingsProvider: FC<{
if (!(user))
{
setError (null)
setSettings (DEFAULT_USER_SETTINGS)
setLoaded (true)
return
}
setLoaded (false)
setError (null)
void (async () => {
try
@@ -62,6 +66,7 @@ export const UserSettingsProvider: FC<{
const next = await fetchUserSettings ()
if (!(cancelled))
{
setError (null)
setSettings (next)
setLoaded (true)
}
@@ -70,6 +75,7 @@ export const UserSettingsProvider: FC<{
{
if (!(cancelled))
{
setError ('設定を読み込めませんでした.既定値で表示しています.')
setSettings (DEFAULT_USER_SETTINGS)
setLoaded (true)
}
@@ -89,10 +95,11 @@ export const UserSettingsProvider: FC<{
}, [settings.displayDensity, settings.fontSize])
const value = useMemo<ContextValue> (() => ({
error,
loaded,
settings,
setSettings,
}), [loaded, settings])
}), [error, loaded, settings])
return (
<UserSettingsContext.Provider value={value}>