@the-portland-company/shell 0.3.4 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/index.cjs +18 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -2
- package/dist/index.d.ts +9 -2
- package/dist/index.js +18 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.5 — 2026-05-14
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- `ShellModeValue.getModeConfig` is now optional. If omitted, shell auto-resolves the active mode config via `modes.find(m => m.id === currentMode)`. Defangs the common `this`-binding mistake where consumers wrote `getModeConfig() { return this.modes[0] }` and shell internals destructured the function (losing `this`) and crashed the chrome.
|
|
8
|
+
- All internal call sites (`<ModePill>`, `<UserMenu>`, `<NavItem>`) now use a defensive `resolveModeConfig(mode)` helper that try/catches the consumer-supplied function and falls back to derivation. A broken `getModeConfig` no longer blanks the page.
|
|
9
|
+
|
|
3
10
|
## 0.3.4 — 2026-05-14
|
|
4
11
|
|
|
5
12
|
### Fixed
|
package/dist/index.cjs
CHANGED
|
@@ -1275,6 +1275,20 @@ function getUserDisplayName(user) {
|
|
|
1275
1275
|
if (!user) return "User";
|
|
1276
1276
|
return user.profile?.full_name || user.profile?.name || user.user_metadata?.full_name || user.user_metadata?.name || (typeof user.email === "string" ? user.email.split("@")[0] : "") || user.email || "User";
|
|
1277
1277
|
}
|
|
1278
|
+
|
|
1279
|
+
// src/lib/resolveModeConfig.ts
|
|
1280
|
+
function resolveModeConfig(mode) {
|
|
1281
|
+
if (!mode) return null;
|
|
1282
|
+
const modes = mode.modes ?? [];
|
|
1283
|
+
if (typeof mode.getModeConfig === "function") {
|
|
1284
|
+
try {
|
|
1285
|
+
const result = mode.getModeConfig();
|
|
1286
|
+
if (result) return result;
|
|
1287
|
+
} catch {
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
return modes.find((m) => m.id === mode.currentMode) ?? modes[0] ?? null;
|
|
1291
|
+
}
|
|
1278
1292
|
function avatarUrlFromUser(user) {
|
|
1279
1293
|
if (!user) return void 0;
|
|
1280
1294
|
const meta = user.raw.user_metadata;
|
|
@@ -1299,7 +1313,7 @@ function UserMenu() {
|
|
|
1299
1313
|
if (status !== "authenticated" || !user) return null;
|
|
1300
1314
|
const displayName = getUserDisplayName(user.raw);
|
|
1301
1315
|
const avatarUrl = userAvatarUrl ?? avatarUrlFromUser(user);
|
|
1302
|
-
const modeConfig = mode
|
|
1316
|
+
const modeConfig = resolveModeConfig(mode);
|
|
1303
1317
|
const currentOrg = org?.currentOrg ?? null;
|
|
1304
1318
|
const linkedAccounts = linked?.linkedAccounts ?? [];
|
|
1305
1319
|
const activeRoleConfig = role?.activeRoleConfig ?? null;
|
|
@@ -1587,7 +1601,7 @@ function NavItem({
|
|
|
1587
1601
|
const navigate = reactRouterDom.useNavigate();
|
|
1588
1602
|
const mode = useShellMode();
|
|
1589
1603
|
const currentMode = mode?.currentMode ?? null;
|
|
1590
|
-
const modeConfig = mode
|
|
1604
|
+
const modeConfig = resolveModeConfig(mode);
|
|
1591
1605
|
const navPref = useShellNavigationPreference();
|
|
1592
1606
|
const showSubMenu = navPref?.showSubMenu ?? true;
|
|
1593
1607
|
const navHoverGradient = currentMode === MODE_CAMPAIGN ? "linear-gradient(90deg, #F2C94C 0%, #E63946 100%)" : currentMode === MODE_PETITION ? "linear-gradient(90deg, #F2C94C 0%, #007BFF 100%)" : "linear-gradient(90deg, #007BFF 0%, #E63946 100%)";
|
|
@@ -2134,8 +2148,8 @@ var OrgPill_default = OrgPill;
|
|
|
2134
2148
|
function ModePill() {
|
|
2135
2149
|
const mode = useShellMode();
|
|
2136
2150
|
if (!mode) return null;
|
|
2137
|
-
const { currentMode, modes, switchMode
|
|
2138
|
-
const modeConfig =
|
|
2151
|
+
const { currentMode, modes, switchMode } = mode;
|
|
2152
|
+
const modeConfig = resolveModeConfig(mode);
|
|
2139
2153
|
if (!modeConfig) return null;
|
|
2140
2154
|
const hasMultipleModes = modes.length > 1;
|
|
2141
2155
|
const isDisabled = !hasMultipleModes;
|