feat(frontend): preference cheatsheet
This commit is contained in:
		
							parent
							
								
									546e900204
								
							
						
					
					
						commit
						8a2ffd7d69
					
				
					 3 changed files with 33 additions and 2 deletions
				
			
		| 
						 | 
					@ -0,0 +1,29 @@
 | 
				
			||||||
 | 
					<script lang="ts">
 | 
				
			||||||
 | 
						import { type User, type Member, type CustomPreference } from "$api/models";
 | 
				
			||||||
 | 
						import StatusIcon from "$components/StatusIcon.svelte";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						type Props = { profile: User | Member; allPreferences: Record<string, CustomPreference> };
 | 
				
			||||||
 | 
						let { profile, allPreferences }: Props = $props();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						let preferences = $derived.by(() => {
 | 
				
			||||||
 | 
							let preferenceKeys = Object.keys(allPreferences).filter(
 | 
				
			||||||
 | 
								(pref) =>
 | 
				
			||||||
 | 
									profile.names.some((entry) => entry.status === pref) ||
 | 
				
			||||||
 | 
									profile.pronouns.some((entry) => entry.status === pref) ||
 | 
				
			||||||
 | 
									profile.fields.some((field) => field.entries.some((entry) => entry.status === pref)),
 | 
				
			||||||
 | 
							);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return preferenceKeys.map((pref) => allPreferences[pref]);
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="text-center text-body-secondary">
 | 
				
			||||||
 | 
						<ul class="list-inline">
 | 
				
			||||||
 | 
							{#each preferences as preference}
 | 
				
			||||||
 | 
								<li class="list-inline-item mx-2">
 | 
				
			||||||
 | 
									<StatusIcon {preference} />
 | 
				
			||||||
 | 
									{preference.tooltip}
 | 
				
			||||||
 | 
								</li>
 | 
				
			||||||
 | 
							{/each}
 | 
				
			||||||
 | 
						</ul>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
| 
						 | 
					@ -9,6 +9,7 @@
 | 
				
			||||||
	import Paginator from "$components/Paginator.svelte";
 | 
						import Paginator from "$components/Paginator.svelte";
 | 
				
			||||||
	import MemberCard from "$components/profile/user/MemberCard.svelte";
 | 
						import MemberCard from "$components/profile/user/MemberCard.svelte";
 | 
				
			||||||
	import ProfileButtons from "$components/profile/ProfileButtons.svelte";
 | 
						import ProfileButtons from "$components/profile/ProfileButtons.svelte";
 | 
				
			||||||
 | 
						import PreferenceCheatsheet from "$components/profile/PreferenceCheatsheet.svelte";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	type Props = { data: PageData };
 | 
						type Props = { data: PageData };
 | 
				
			||||||
	let { data }: Props = $props();
 | 
						let { data }: Props = $props();
 | 
				
			||||||
| 
						 | 
					@ -28,7 +29,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ProfileHeader name="@{data.user.username}" profile={data.user} offset={data.user.utc_offset} />
 | 
						<ProfileHeader name="@{data.user.username}" profile={data.user} offset={data.user.utc_offset} />
 | 
				
			||||||
	<ProfileFields profile={data.user} {allPreferences} />
 | 
						<ProfileFields profile={data.user} {allPreferences} />
 | 
				
			||||||
 | 
						<PreferenceCheatsheet profile={data.user} {allPreferences} />
 | 
				
			||||||
	<ProfileButtons
 | 
						<ProfileButtons
 | 
				
			||||||
		meUser={data.meUser}
 | 
							meUser={data.meUser}
 | 
				
			||||||
		user={data.user.username}
 | 
							user={data.user.username}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,7 @@
 | 
				
			||||||
	import { Icon } from "@sveltestrap/sveltestrap";
 | 
						import { Icon } from "@sveltestrap/sveltestrap";
 | 
				
			||||||
	import { t } from "$lib/i18n";
 | 
						import { t } from "$lib/i18n";
 | 
				
			||||||
	import ProfileButtons from "$components/profile/ProfileButtons.svelte";
 | 
						import ProfileButtons from "$components/profile/ProfileButtons.svelte";
 | 
				
			||||||
 | 
						import PreferenceCheatsheet from "$components/profile/PreferenceCheatsheet.svelte";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	type Props = { data: PageData };
 | 
						type Props = { data: PageData };
 | 
				
			||||||
	let { data }: Props = $props();
 | 
						let { data }: Props = $props();
 | 
				
			||||||
| 
						 | 
					@ -38,7 +39,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ProfileHeader name="{data.member.name} (@{data.member.user.username})" profile={data.member} />
 | 
						<ProfileHeader name="{data.member.name} (@{data.member.user.username})" profile={data.member} />
 | 
				
			||||||
	<ProfileFields profile={data.member} {allPreferences} />
 | 
						<ProfileFields profile={data.member} {allPreferences} />
 | 
				
			||||||
 | 
						<PreferenceCheatsheet profile={data.member} {allPreferences} />
 | 
				
			||||||
	<ProfileButtons
 | 
						<ProfileButtons
 | 
				
			||||||
		meUser={data.meUser}
 | 
							meUser={data.meUser}
 | 
				
			||||||
		user={data.member.user.username}
 | 
							user={data.member.user.username}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue