diff --git a/deploy/package.json b/deploy/package.json index a937ea2..6f9084d 100644 --- a/deploy/package.json +++ b/deploy/package.json @@ -1,6 +1,6 @@ { "name": "ten31portal-startos", - "version": "0.2.34", + "version": "0.2.35", "private": true, "scripts": { "build": "npm run check && rm -rf ./javascript && ncc build startos/index.ts -o ./javascript", diff --git a/deploy/startos/install/versions/index.ts b/deploy/startos/install/versions/index.ts index c96d86b..a55a7e8 100644 --- a/deploy/startos/install/versions/index.ts +++ b/deploy/startos/install/versions/index.ts @@ -1,4 +1,4 @@ -export { v_0_2_34 as current } from './v_0_2_34' +export { v_0_2_35 as current } from './v_0_2_35' import { v_0_1_0 } from './v_0_1_0' import { v_0_2_0 } from './v_0_2_0' import { v_0_2_1 } from './v_0_2_1' @@ -33,4 +33,5 @@ import { v_0_2_30 } from './v_0_2_30' import { v_0_2_31 } from './v_0_2_31' import { v_0_2_32 } from './v_0_2_32' import { v_0_2_33 } from './v_0_2_33' -export const other = [v_0_1_0, v_0_2_0, v_0_2_1, v_0_2_3, v_0_2_4, v_0_2_5, v_0_2_6, v_0_2_7, v_0_2_8, v_0_2_9, v_0_2_10, v_0_2_11, v_0_2_12, v_0_2_13, v_0_2_14, v_0_2_15, v_0_2_16, v_0_2_17, v_0_2_18, v_0_2_19, v_0_2_20, v_0_2_21, v_0_2_22, v_0_2_23, v_0_2_24, v_0_2_25, v_0_2_26, v_0_2_27, v_0_2_28, v_0_2_29, v_0_2_30, v_0_2_31, v_0_2_32, v_0_2_33] +import { v_0_2_34 } from './v_0_2_34' +export const other = [v_0_1_0, v_0_2_0, v_0_2_1, v_0_2_3, v_0_2_4, v_0_2_5, v_0_2_6, v_0_2_7, v_0_2_8, v_0_2_9, v_0_2_10, v_0_2_11, v_0_2_12, v_0_2_13, v_0_2_14, v_0_2_15, v_0_2_16, v_0_2_17, v_0_2_18, v_0_2_19, v_0_2_20, v_0_2_21, v_0_2_22, v_0_2_23, v_0_2_24, v_0_2_25, v_0_2_26, v_0_2_27, v_0_2_28, v_0_2_29, v_0_2_30, v_0_2_31, v_0_2_32, v_0_2_33, v_0_2_34] diff --git a/deploy/startos/install/versions/v_0_2_35.ts b/deploy/startos/install/versions/v_0_2_35.ts new file mode 100644 index 0000000..de1c74b --- /dev/null +++ b/deploy/startos/install/versions/v_0_2_35.ts @@ -0,0 +1,13 @@ +import { VersionInfo } from '@start9labs/start-sdk' + +export const v_0_2_35 = VersionInfo.of({ + version: '0.2.35:0', + releaseNotes: { + en_US: + "Exited positions now show the member's capital history up to the exit date: the collapsible History chart/table returns on the exited card, clipped at the exit — statements the eNAV keeps producing after the exit are recorded but never plotted, so the line ends at the exit instead of crashing to zero. History toggle now counts 'statements' (SPVs have event-driven statements, funds quarterly).", + }, + migrations: { + up: async ({ effects }) => {}, + down: async ({ effects }) => {}, + }, +}) diff --git a/frontend/public/sw.js b/frontend/public/sw.js index 5426b74..51d5e5f 100644 --- a/frontend/public/sw.js +++ b/frontend/public/sw.js @@ -3,7 +3,7 @@ // - content-hashed /assets/* are cache-first (immutable, safe forever) // - /api/* is never cached // Bump CACHE on each release so old entries are purged. -const CACHE = 'ten31-portal-0.2.34' +const CACHE = 'ten31-portal-0.2.35' self.addEventListener('install', () => self.skipWaiting()) diff --git a/frontend/src/portal/InvestorPortalView.tsx b/frontend/src/portal/InvestorPortalView.tsx index 8f1d94f..c56e8b5 100644 --- a/frontend/src/portal/InvestorPortalView.tsx +++ b/frontend/src/portal/InvestorPortalView.tsx @@ -256,18 +256,13 @@ function CapitalBlock({ () => [...accounts].sort((a, b) => a.as_of_date.localeCompare(b.as_of_date)), [accounts], ); - const chartPoints: CapitalPoint[] = history.map((a) => ({ - date: a.as_of_date, - value: a.ending_balance_cents, - paidIn: a.contributions_cents, - distributions: a.distributions_cents, - })); - // Collapsed by default so the portal opens clean; the investor expands the trend per fund. - const [showChart, setShowChart] = useState(false); // A sold/transferred stake: the fund's books show $0 with no distribution, which is not a - // loss. Show a quiet Exited badge and keep the documents; no balance, no gain/loss. + // loss. Show a quiet Exited badge and their capital journey UP TO the exit — statements + // the eNAV keeps producing after that date are recorded but never plotted, so the line + // ends at the exit instead of crashing to zero. if (latest.exited_on) { + const clipped = history.filter((a) => a.as_of_date <= latest.exited_on!); return (
{label}
} @@ -279,6 +274,7 @@ function CapitalBlock({This position was sold or transferred. Documents remain available below.
+