- Deduplicate terminal IDs and favorite model slugs with trim-aware iteration - Use effect-based filtering for local branch and built-in model lists - Switch stable array handling to non-mutating `toSorted`
Showing the changes to apps/web/src/components/settings (1 of 8 files). Show all
Unified · Split
| @@ -14,8 +14,10 @@ import { · 13 unmodified lines | ||
| 14 | 14 | import { scopeThreadRef } from "@t3tools/client-runtime"; |
| 15 | 15 | import { DEFAULT_UNIFIED_SETTINGS } from "@t3tools/contracts/settings"; |
| 16 | 16 | import { createModelSelection } from "@t3tools/shared/model"; |
| 17 | +import * as Arr from "effect/Array"; | |
| 17 | 18 | import * as Duration from "effect/Duration"; |
| 18 | 19 | import * as Equal from "effect/Equal"; |
| 20 | +import * as Result from "effect/Result"; | |
| 19 | 21 | import { APP_VERSION, HOSTED_APP_CHANNEL, HOSTED_APP_CHANNEL_LABEL } from "../../branding"; |
| 20 | 22 | import { |
| 21 | 23 | canCheckForUpdate, |
| @@ -1143,7 +1145,12 @@ export function ProviderSettingsPanel() { · 1121 unmodified lines | ||
| 1143 | 1145 | nextFavoriteModels: ReadonlyArray<string>, |
| 1144 | 1146 | ) => { |
| 1145 | 1147 | const favoriteModels = [ |
| 1146 | − ...new Set(nextFavoriteModels.map((slug) => slug.trim()).filter((slug) => slug.length > 0)), | |
| 1148 | + ...new Set( | |
| 1149 | + Arr.filterMap(nextFavoriteModels, (slug) => { | |
| 1150 | + const trimmedSlug = slug.trim(); | |
| 1151 | + return trimmedSlug.length > 0 ? Result.succeed(trimmedSlug) : Result.failVoid; | |
| 1152 | + }), | |
| 1153 | + ), | |
| 1147 | 1154 | ]; |
| 1148 | 1155 | updateSettings({ |
| 1149 | 1156 | favorites: [ |
| @@ -1249,9 +1256,9 @@ export function ProviderSettingsPanel() { · 99 unmodified lines | ||
| 1249 | 1256 | hiddenModels: [], |
| 1250 | 1257 | modelOrder: [], |
| 1251 | 1258 | }; |
| 1252 | − const favoriteModels = (settings.favorites ?? []) | |
| 1253 | − .filter((favorite) => favorite.provider === row.instanceId) | |
| 1254 | − .map((favorite) => favorite.model); | |
| 1259 | + const favoriteModels = Arr.filterMap(settings.favorites ?? [], (favorite) => | |
| 1260 | + favorite.provider === row.instanceId ? Result.succeed(favorite.model) : Result.failVoid, | |
| 1261 | + ); | |
| 1255 | 1262 | const resetLabel = driverOption?.label ?? String(row.driver); |
| 1256 | 1263 | const headerAction = |
| 1257 | 1264 | row.isDefault && row.isDirty ? ( |