File tree Expand file tree Collapse file tree 5 files changed +49
-25
lines changed
Expand file tree Collapse file tree 5 files changed +49
-25
lines changed Original file line number Diff line number Diff line change @@ -118,3 +118,10 @@ export type BranchCommit = {
118118 * The slug name for all the packages
119119 */
120120export const ALL_SLUG = "all" ;
121+
122+ /**
123+ * A package's local visibility settings
124+ */
125+ export type PackageSettings = {
126+ showPrereleases : boolean ;
127+ } ;
Original file line number Diff line number Diff line change 55 import { Button } from " $lib/components/ui/button" ;
66 import * as Sheet from " $lib/components/ui/sheet" ;
77 import SidePanel from " ./SidePanel.svelte" ;
8+ import { initPackageSettings } from " ./settings.svelte" ;
89
910 let { data, children } = $props ();
1011
1415 });
1516
1617 let open = $state (false );
17- let showPrereleases = $state (true );
18+ const sharedSettings = initPackageSettings ();
19+ let packageSettings = $derived (sharedSettings .get (page .data .currentPackage .pkg .name ));
1820 </script >
1921
2022<div class =" relative flex gap-8" >
4749 packageName ={page .data .currentPackage .pkg .name }
4850 allPackages ={data .displayablePackages }
4951 otherReleases ={data .allReleases }
50- bind:showPrereleases
52+ bind:showPrereleases ={ packageSettings . current . showPrereleases }
5153 />
5254 </Sheet .Content >
5355 </Sheet .Root >
6062 " mt-35 hidden h-fit w-100 shrink-0 lg:flex" ,
6163 page .data .currentPackage .pkg .description ?.length && " mt-45"
6264 ]}
63- bind:showPrereleases
65+ bind:showPrereleases ={ packageSettings . current . showPrereleases }
6466 />
6567</div >
Original file line number Diff line number Diff line change 11<script lang =" ts" >
2- import { untrack } from " svelte" ;
32 import type { ClassValue } from " svelte/elements" ;
43 import { browser } from " $app/environment" ;
54 import { resolve } from " $app/paths" ;
65 import { page } from " $app/state" ;
76 import { ChevronRight } from " @lucide/svelte" ;
8- import { PersistedState } from " runed" ;
97 import type { GitHubRelease } from " $lib/server/github-cache" ;
108 import type { CategorizedPackage } from " $lib/server/package-discoverer" ;
119 import type { Prettify } from " $lib/types" ;
5755 }: Props = $props ();
5856 let id = $props .id ();
5957
60- let storedPrereleaseState = new PersistedState (
61- ` show-${packageName }-prereleases ` ,
62- showPrereleases
63- );
64- $effect (() => {
65- // eslint-disable-next-line @typescript-eslint/no-unused-expressions
66- showPrereleases ;
67- untrack (() => (storedPrereleaseState .current = showPrereleases ));
68- });
69-
7058 /**
7159 * Extract the data from the {@link Props.otherReleases |otherReleases}
7260 * props.
243231 ]}
244232 >
245233 <Checkbox
246- disabled
247234 id ="beta-releases- {id }"
248235 aria-labelledby ="beta-releases-label- {id }"
249236 bind:checked ={showPrereleases }
254241 class =" text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
255242 >
256243 Show {packageName } prereleases
257- <span class =" text-muted-foreground" >(Unavailable)</span >
258244 </Label >
259245 </div >
260246</div >
Original file line number Diff line number Diff line change 1414 import { Skeleton } from " $lib/components/ui/skeleton" ;
1515 import AnimatedCollapsibleContent from " $lib/components/AnimatedCollapsibleContent.svelte" ;
1616 import MarkdownRenderer from " $lib/components/MarkdownRenderer.svelte" ;
17+ import { getPackageSettings } from " ../settings.svelte" ;
1718 import type { Snapshot } from " ./$types" ;
1819 import ReleaseCard from " ./ReleaseCard.svelte" ;
1920
4748 )
4849 .sort ((a , b ) => semver .compare (a .cleanVersion , b .cleanVersion ))[0 ]
4950 );
50- let showPrereleases = $state (true );
51+ const sharedSettings = getPackageSettings ()
52+ let packageSettings = $derived (sharedSettings .get (data .currentPackage .pkg .name ));
5153
5254 let lastUpdateDate = $state <Date >();
5355 $effect (() => {
6264 });
6365
6466 let displayableReleases = $derived (
65- data .releases .filter (({ prerelease }) => showPrereleases || ! prerelease )
67+ data .releases .filter (({ prerelease }) => packageSettings . current . showPrereleases || ! prerelease )
6668 );
6769 let expandableReleases = $derived .by (() => {
6870 const aWeekAgo = Date .now () - 1000 * 60 * 60 * 24 * 7 ;
203205 </h3 >
204206 {/if }
205207 </div >
206- <Accordion .Root
207- type =" multiple"
208- bind:value ={expandableReleases }
209- onValueChange ={openValues => (expandableReleases = openValues )}
210- class =" w-full space-y-2"
211- >
208+ <Accordion .Root type ="multiple" bind:value ={expandableReleases } class =" w-full space-y-2" >
212209 {#if data .currentPackage .pkg .deprecated }
213210 <Alert .Root class =" rounded-md border-amber-500 bg-amber-400/10" >
214211 <CircleAlert class =" size-4" />
Original file line number Diff line number Diff line change 1+ import { getContext , setContext } from "svelte" ;
2+ import { PersistedState } from "runed" ;
3+ import type { PackageSettings } from "$lib/types" ;
4+
5+ const settingsKey = Symbol ( "settings" ) ;
6+
7+ const DEFAULT_SETTINGS : PackageSettings = {
8+ showPrereleases : true
9+ } ;
10+
11+ class PackagesSettings {
12+ #settingsMap = new Map < string , PersistedState < PackageSettings > > ( ) ;
13+
14+ get ( packageName : string ) {
15+ const storedValue = this . #settingsMap. get ( packageName ) ;
16+ if ( storedValue ) return storedValue ;
17+ const newState = new PersistedState (
18+ `${ packageName . toLowerCase ( ) . replace ( / / g, "-" ) } -settings` ,
19+ DEFAULT_SETTINGS
20+ ) ;
21+ this . #settingsMap. set ( packageName , newState ) ;
22+ return newState ;
23+ }
24+ }
25+
26+ export function initPackageSettings ( ) {
27+ return setContext ( settingsKey , new PackagesSettings ( ) ) ;
28+ }
29+
30+ export function getPackageSettings ( ) {
31+ return getContext < ReturnType < typeof initPackageSettings > > ( settingsKey ) ;
32+ }
You can’t perform that action at this time.
0 commit comments