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 = {
118
118
* The slug name for all the packages
119
119
*/
120
120
export 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 5
5
import { Button } from " $lib/components/ui/button" ;
6
6
import * as Sheet from " $lib/components/ui/sheet" ;
7
7
import SidePanel from " ./SidePanel.svelte" ;
8
+ import { initPackageSettings } from " ./settings.svelte" ;
8
9
9
10
let { data, children } = $props ();
10
11
14
15
});
15
16
16
17
let open = $state (false );
17
- let showPrereleases = $state (true );
18
+ const sharedSettings = initPackageSettings ();
19
+ let packageSettings = $derived (sharedSettings .get (page .data .currentPackage .pkg .name ));
18
20
</script >
19
21
20
22
<div class =" relative flex gap-8" >
47
49
packageName ={page .data .currentPackage .pkg .name }
48
50
allPackages ={data .displayablePackages }
49
51
otherReleases ={data .allReleases }
50
- bind:showPrereleases
52
+ bind:showPrereleases ={ packageSettings . current . showPrereleases }
51
53
/>
52
54
</Sheet .Content >
53
55
</Sheet .Root >
60
62
" mt-35 hidden h-fit w-100 shrink-0 lg:flex" ,
61
63
page .data .currentPackage .pkg .description ?.length && " mt-45"
62
64
]}
63
- bind:showPrereleases
65
+ bind:showPrereleases ={ packageSettings . current . showPrereleases }
64
66
/>
65
67
</div >
Original file line number Diff line number Diff line change 1
1
<script lang =" ts" >
2
- import { untrack } from " svelte" ;
3
2
import type { ClassValue } from " svelte/elements" ;
4
3
import { browser } from " $app/environment" ;
5
4
import { resolve } from " $app/paths" ;
6
5
import { page } from " $app/state" ;
7
6
import { ChevronRight } from " @lucide/svelte" ;
8
- import { PersistedState } from " runed" ;
9
7
import type { GitHubRelease } from " $lib/server/github-cache" ;
10
8
import type { CategorizedPackage } from " $lib/server/package-discoverer" ;
11
9
import type { Prettify } from " $lib/types" ;
57
55
}: Props = $props ();
58
56
let id = $props .id ();
59
57
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
-
70
58
/**
71
59
* Extract the data from the {@link Props.otherReleases |otherReleases}
72
60
* props.
243
231
]}
244
232
>
245
233
<Checkbox
246
- disabled
247
234
id ="beta-releases- {id }"
248
235
aria-labelledby ="beta-releases-label- {id }"
249
236
bind:checked ={showPrereleases }
254
241
class =" text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
255
242
>
256
243
Show {packageName } prereleases
257
- <span class =" text-muted-foreground" >(Unavailable)</span >
258
244
</Label >
259
245
</div >
260
246
</div >
Original file line number Diff line number Diff line change 14
14
import { Skeleton } from " $lib/components/ui/skeleton" ;
15
15
import AnimatedCollapsibleContent from " $lib/components/AnimatedCollapsibleContent.svelte" ;
16
16
import MarkdownRenderer from " $lib/components/MarkdownRenderer.svelte" ;
17
+ import { getPackageSettings } from " ../settings.svelte" ;
17
18
import type { Snapshot } from " ./$types" ;
18
19
import ReleaseCard from " ./ReleaseCard.svelte" ;
19
20
47
48
)
48
49
.sort ((a , b ) => semver .compare (a .cleanVersion , b .cleanVersion ))[0 ]
49
50
);
50
- let showPrereleases = $state (true );
51
+ const sharedSettings = getPackageSettings ()
52
+ let packageSettings = $derived (sharedSettings .get (data .currentPackage .pkg .name ));
51
53
52
54
let lastUpdateDate = $state <Date >();
53
55
$effect (() => {
62
64
});
63
65
64
66
let displayableReleases = $derived (
65
- data .releases .filter (({ prerelease }) => showPrereleases || ! prerelease )
67
+ data .releases .filter (({ prerelease }) => packageSettings . current . showPrereleases || ! prerelease )
66
68
);
67
69
let expandableReleases = $derived .by (() => {
68
70
const aWeekAgo = Date .now () - 1000 * 60 * 60 * 24 * 7 ;
203
205
</h3 >
204
206
{/if }
205
207
</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" >
212
209
{#if data .currentPackage .pkg .deprecated }
213
210
<Alert .Root class =" rounded-md border-amber-500 bg-amber-400/10" >
214
211
<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