History

Normalize branch and model selection handling

- 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`

Julius Marminge committed 6 months ago

Commit 7793bd61 parent 7f03f4d8 files · +63 −23Browse files

Showing the changes to apps/web/src/components/settings (1 of 8 files). Show all

Unified · Split

apps/web/src/components/settings/SettingsPanels.tsx+11−4
@@ -14,8 +14,10 @@ import { · 13 unmodified lines
14import { scopeThreadRef } from "@t3tools/client-runtime";14import { scopeThreadRef } from "@t3tools/client-runtime";
15import { DEFAULT_UNIFIED_SETTINGS } from "@t3tools/contracts/settings";15import { DEFAULT_UNIFIED_SETTINGS } from "@t3tools/contracts/settings";
16import { createModelSelection } from "@t3tools/shared/model";16import { createModelSelection } from "@t3tools/shared/model";
17import * as Arr from "effect/Array";
17import * as Duration from "effect/Duration";18import * as Duration from "effect/Duration";
18import * as Equal from "effect/Equal";19import * as Equal from "effect/Equal";
20import * as Result from "effect/Result";
19import { APP_VERSION, HOSTED_APP_CHANNEL, HOSTED_APP_CHANNEL_LABEL } from "../../branding";21import { APP_VERSION, HOSTED_APP_CHANNEL, HOSTED_APP_CHANNEL_LABEL } from "../../branding";
20import {22import {
21 canCheckForUpdate,23 canCheckForUpdate,
@@ -1143,7 +1145,12 @@ export function ProviderSettingsPanel() { · 1121 unmodified lines
1143 nextFavoriteModels: ReadonlyArray<string>,1145 nextFavoriteModels: ReadonlyArray<string>,
1144 ) => {1146 ) => {
1145 const favoriteModels = [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 updateSettings({1155 updateSettings({
1149 favorites: [1156 favorites: [
@@ -1249,9 +1256,9 @@ export function ProviderSettingsPanel() { · 99 unmodified lines
1249 hiddenModels: [],1256 hiddenModels: [],
1250 modelOrder: [],1257 modelOrder: [],
1251 };1258 };
1252 const favoriteModels = (settings.favorites ?? [])1259 const favoriteModels = Arr.filterMap(settings.favorites ?? [], (favorite) =>
1253 .filter((favorite) => favorite.provider === row.instanceId)1260 favorite.provider === row.instanceId ? Result.succeed(favorite.model) : Result.failVoid,
1254 .map((favorite) => favorite.model);1261 );
1255 const resetLabel = driverOption?.label ?? String(row.driver);1262 const resetLabel = driverOption?.label ?? String(row.driver);
1256 const headerAction =1263 const headerAction =
1257 row.isDefault && row.isDirty ? (1264 row.isDefault && row.isDirty ? (