Skip to content

Commit 8b4c9dc

Browse files
committed
Updated types and fixed type errors.
1 parent 6b6cf5b commit 8b4c9dc

File tree

5 files changed

+130
-119
lines changed

5 files changed

+130
-119
lines changed

src/database/Organization.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -400,13 +400,15 @@ class Organization {
400400
static async queryPersonRoles(
401401
supabase: SupabaseClient<Database>,
402402
orgid: OrganizationID,
403-
personid: PersonID
403+
personid: PersonID | null
404404
) {
405-
return supabase
406-
.from('assignments')
407-
.select('roleid, profiles!inner(*)')
408-
.eq('orgid', orgid)
409-
.eq('profiles.personid', personid);
405+
return personid
406+
? supabase
407+
.from('assignments')
408+
.select('roleid, profiles!inner(*)')
409+
.eq('orgid', orgid)
410+
.eq('profiles.personid', personid)
411+
: { data: [] };
410412
}
411413

412414
async assignPerson(orgid: OrganizationID, profileid: ProfileID, roleid: RoleID) {

src/database/database.types.ts

Lines changed: 68 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -576,48 +576,27 @@ export type Database = {
576576
Returns: string
577577
}
578578
getprofileid: {
579-
Args: {
580-
_orgid: string
581-
}
579+
Args: { _orgid: string }
582580
Returns: string
583581
}
584582
getvisibility: {
585-
Args: {
586-
_orgid: string
587-
}
583+
Args: { _orgid: string }
588584
Returns: Database["public"]["Enums"]["visibility"]
589585
}
590586
isadmin: {
591-
Args: {
592-
_orgid: string
593-
}
587+
Args: { _orgid: string }
594588
Returns: boolean
595589
}
596590
iseditablehow: {
597-
Args: {
598-
_orgid: string
599-
_processid: string
600-
}
591+
Args: { _orgid: string; _processid: string }
601592
Returns: boolean
602593
}
603594
ismember: {
604-
Args: {
605-
_orgid: string
606-
}
595+
Args: { _orgid: string }
607596
Returns: boolean
608597
}
609-
organization_payload: {
610-
Args: {
611-
_orgid: string
612-
}
613-
Returns: {
614-
payload: Json
615-
}[]
616-
}
617598
path_available: {
618-
Args: {
619-
_path: string
620-
}
599+
Args: { _path: string }
621600
Returns: boolean
622601
}
623602
}
@@ -633,91 +612,99 @@ export type Database = {
633612
}
634613
}
635614

636-
type PublicSchema = Database[Extract<keyof Database, "public">]
615+
type DefaultSchema = Database[Extract<keyof Database, "public">]
637616

638617
export type Tables<
639-
PublicTableNameOrOptions extends
640-
| keyof (PublicSchema["Tables"] & PublicSchema["Views"])
618+
DefaultSchemaTableNameOrOptions extends
619+
| keyof (DefaultSchema["Tables"] & DefaultSchema["Views"])
641620
| { schema: keyof Database },
642-
TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
643-
? keyof (Database[PublicTableNameOrOptions["schema"]]["Tables"] &
644-
Database[PublicTableNameOrOptions["schema"]]["Views"])
621+
TableName extends DefaultSchemaTableNameOrOptions extends {
622+
schema: keyof Database
623+
}
624+
? keyof (Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] &
625+
Database[DefaultSchemaTableNameOrOptions["schema"]]["Views"])
645626
: never = never,
646-
> = PublicTableNameOrOptions extends { schema: keyof Database }
647-
? (Database[PublicTableNameOrOptions["schema"]]["Tables"] &
648-
Database[PublicTableNameOrOptions["schema"]]["Views"])[TableName] extends {
627+
> = DefaultSchemaTableNameOrOptions extends { schema: keyof Database }
628+
? (Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] &
629+
Database[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends {
649630
Row: infer R
650631
}
651632
? R
652633
: never
653-
: PublicTableNameOrOptions extends keyof (PublicSchema["Tables"] &
654-
PublicSchema["Views"])
655-
? (PublicSchema["Tables"] &
656-
PublicSchema["Views"])[PublicTableNameOrOptions] extends {
634+
: DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema["Tables"] &
635+
DefaultSchema["Views"])
636+
? (DefaultSchema["Tables"] &
637+
DefaultSchema["Views"])[DefaultSchemaTableNameOrOptions] extends {
657638
Row: infer R
658639
}
659640
? R
660641
: never
661642
: never
662643

663644
export type TablesInsert<
664-
PublicTableNameOrOptions extends
665-
| keyof PublicSchema["Tables"]
645+
DefaultSchemaTableNameOrOptions extends
646+
| keyof DefaultSchema["Tables"]
666647
| { schema: keyof Database },
667-
TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
668-
? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"]
648+
TableName extends DefaultSchemaTableNameOrOptions extends {
649+
schema: keyof Database
650+
}
651+
? keyof Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"]
669652
: never = never,
670-
> = PublicTableNameOrOptions extends { schema: keyof Database }
671-
? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends {
653+
> = DefaultSchemaTableNameOrOptions extends { schema: keyof Database }
654+
? Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends {
672655
Insert: infer I
673656
}
674657
? I
675658
: never
676-
: PublicTableNameOrOptions extends keyof PublicSchema["Tables"]
677-
? PublicSchema["Tables"][PublicTableNameOrOptions] extends {
659+
: DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"]
660+
? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends {
678661
Insert: infer I
679662
}
680663
? I
681664
: never
682665
: never
683666

684667
export type TablesUpdate<
685-
PublicTableNameOrOptions extends
686-
| keyof PublicSchema["Tables"]
668+
DefaultSchemaTableNameOrOptions extends
669+
| keyof DefaultSchema["Tables"]
687670
| { schema: keyof Database },
688-
TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
689-
? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"]
671+
TableName extends DefaultSchemaTableNameOrOptions extends {
672+
schema: keyof Database
673+
}
674+
? keyof Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"]
690675
: never = never,
691-
> = PublicTableNameOrOptions extends { schema: keyof Database }
692-
? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends {
676+
> = DefaultSchemaTableNameOrOptions extends { schema: keyof Database }
677+
? Database[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends {
693678
Update: infer U
694679
}
695680
? U
696681
: never
697-
: PublicTableNameOrOptions extends keyof PublicSchema["Tables"]
698-
? PublicSchema["Tables"][PublicTableNameOrOptions] extends {
682+
: DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"]
683+
? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends {
699684
Update: infer U
700685
}
701686
? U
702687
: never
703688
: never
704689

705690
export type Enums<
706-
PublicEnumNameOrOptions extends
707-
| keyof PublicSchema["Enums"]
691+
DefaultSchemaEnumNameOrOptions extends
692+
| keyof DefaultSchema["Enums"]
708693
| { schema: keyof Database },
709-
EnumName extends PublicEnumNameOrOptions extends { schema: keyof Database }
710-
? keyof Database[PublicEnumNameOrOptions["schema"]]["Enums"]
694+
EnumName extends DefaultSchemaEnumNameOrOptions extends {
695+
schema: keyof Database
696+
}
697+
? keyof Database[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"]
711698
: never = never,
712-
> = PublicEnumNameOrOptions extends { schema: keyof Database }
713-
? Database[PublicEnumNameOrOptions["schema"]]["Enums"][EnumName]
714-
: PublicEnumNameOrOptions extends keyof PublicSchema["Enums"]
715-
? PublicSchema["Enums"][PublicEnumNameOrOptions]
699+
> = DefaultSchemaEnumNameOrOptions extends { schema: keyof Database }
700+
? Database[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName]
701+
: DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"]
702+
? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions]
716703
: never
717704

718705
export type CompositeTypes<
719706
PublicCompositeTypeNameOrOptions extends
720-
| keyof PublicSchema["CompositeTypes"]
707+
| keyof DefaultSchema["CompositeTypes"]
721708
| { schema: keyof Database },
722709
CompositeTypeName extends PublicCompositeTypeNameOrOptions extends {
723710
schema: keyof Database
@@ -726,7 +713,21 @@ export type CompositeTypes<
726713
: never = never,
727714
> = PublicCompositeTypeNameOrOptions extends { schema: keyof Database }
728715
? Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName]
729-
: PublicCompositeTypeNameOrOptions extends keyof PublicSchema["CompositeTypes"]
730-
? PublicSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions]
716+
: PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"]
717+
? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions]
731718
: never
732719

720+
export const Constants = {
721+
graphql_public: {
722+
Enums: {},
723+
},
724+
public: {
725+
Enums: {
726+
completion: ["no", "pending", "yes"],
727+
state: ["draft", "active", "archived"],
728+
status: ["triage", "backlog", "active", "done", "blocked", "declined"],
729+
visibility: ["public", "org", "people", "teams", "roles", "admin"],
730+
},
731+
},
732+
} as const
733+

src/routes/+layout.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { createBrowserClient, createServerClient, isBrowser } from '@supabase/ssr';
22
import { PUBLIC_SUPABASE_ANON_KEY, PUBLIC_SUPABASE_API_URL } from '$env/static/public';
33
import type { LayoutLoadEvent } from './$types';
4+
import type { Database } from '$database/database.types';
45

56
export const load = async ({ fetch, data, depends }: LayoutLoadEvent) => {
67
/**
@@ -10,7 +11,7 @@ export const load = async ({ fetch, data, depends }: LayoutLoadEvent) => {
1011
depends('supabase:auth');
1112

1213
const supabase = isBrowser()
13-
? createBrowserClient(PUBLIC_SUPABASE_API_URL, PUBLIC_SUPABASE_ANON_KEY, {
14+
? createBrowserClient<Database>(PUBLIC_SUPABASE_API_URL, PUBLIC_SUPABASE_ANON_KEY, {
1415
global: {
1516
fetch
1617
},
@@ -20,7 +21,7 @@ export const load = async ({ fetch, data, depends }: LayoutLoadEvent) => {
2021
heartbeatIntervalMs: 15000
2122
}
2223
})
23-
: createServerClient(PUBLIC_SUPABASE_API_URL, PUBLIC_SUPABASE_ANON_KEY, {
24+
: createServerClient<Database>(PUBLIC_SUPABASE_API_URL, PUBLIC_SUPABASE_ANON_KEY, {
2425
global: {
2526
fetch
2627
},

src/routes/org/[orgid]/+layout.server.ts

Lines changed: 50 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
import type { Database } from '$database/database.types.js';
2+
import type { SupabaseClient } from '@supabase/supabase-js';
13
import { error } from '@sveltejs/kit';
24
import { validate as isValidUUID } from 'uuid';
35

46
export async function load({ params, locals }) {
5-
const { supabase } = locals;
7+
const { supabase } = locals as { supabase: SupabaseClient<Database> };
68
const { data: userRecord } = await supabase.auth.getUser();
79
const user = userRecord ? userRecord.user : null;
810

@@ -14,10 +16,44 @@ export async function load({ params, locals }) {
1416
// No org? Error out.
1517
if (org === null) {
1618
error(404, {
17-
message: 'Organization not found.'
19+
message: 'Unable to show organization. It may not exist or may not be visible to you.'
1820
});
1921
}
2022

23+
const profileQuery = supabase
24+
.from('profiles')
25+
.select('*')
26+
.eq('orgid', org.id)
27+
.eq('personid', user ? user.id : '00000000-0000-0000-0000-000000000000')
28+
.single();
29+
30+
const roleCountQuery = supabase
31+
.from('roles')
32+
.select('id', { count: 'exact', head: true })
33+
.eq('orgid', org.id);
34+
const profileCountQuery = supabase
35+
.from('profiles')
36+
.select('id', { count: 'exact', head: true })
37+
.eq('orgid', org.id);
38+
39+
const processCountQuery = supabase
40+
.from('processes')
41+
.select('id', { count: 'exact', head: true })
42+
.eq('orgid', org.id);
43+
44+
const changeCountQuery = supabase
45+
.from('suggestions')
46+
.select('id', { count: 'exact', head: true })
47+
.eq('orgid', org.id)
48+
.neq('status', 'done')
49+
.neq('status', 'declined');
50+
51+
const rolesQuery = supabase.from('roles').select('id, short, title').eq('orgid', org.id);
52+
const processesQuery = supabase
53+
.from('processes')
54+
.select('id, short, title, state')
55+
.eq('orgid', org.id);
56+
2157
// Get this user's profile in the org and the counts.
2258
// Also get any roles and processses with short names.
2359
const [
@@ -29,54 +65,25 @@ export async function load({ params, locals }) {
2965
{ data: shortRoles },
3066
{ data: shortProcesses }
3167
] = await Promise.all([
32-
supabase
33-
.from('profiles')
34-
.select('*')
35-
.eq('orgid', org.id)
36-
.eq('personid', user ? user.id : 0)
37-
.single(),
38-
supabase.from('roles').select('id', { count: 'exact', head: true }).eq('orgid', org.id),
39-
supabase.from('profiles').select('id', { count: 'exact', head: true }).eq('orgid', org.id),
40-
supabase.from('processes').select('id', { count: 'exact', head: true }).eq('orgid', org.id),
41-
supabase
42-
.from('suggestions')
43-
.select('id', { count: 'exact', head: true })
44-
.eq('orgid', org.id)
45-
.neq('status', 'done')
46-
.neq('status', 'declined'),
47-
supabase.from('roles').select('id, short, title').neq('short', '{}').eq('orgid', org.id),
48-
supabase
49-
.from('processes')
50-
.select('id, short, title, state')
51-
.neq('short', '{}')
52-
.eq('orgid', org.id)
68+
profileQuery,
69+
roleCountQuery,
70+
profileCountQuery,
71+
processCountQuery,
72+
changeCountQuery,
73+
rolesQuery,
74+
processesQuery
5375
]);
5476

55-
if (
56-
profile === null ||
57-
roles === null ||
58-
profiles === null ||
59-
processes === null ||
60-
changes === null
61-
) {
62-
error(404, {
63-
message:
64-
user === null
65-
? `Unable to show this organization. Try logging in with your organization email address, in case this organization restricted to members.`
66-
: `Unable to retrieve organization data.`
67-
});
68-
}
69-
7077
return {
7178
org,
7279
uid: user ? user.id : null,
7380
member: profile !== null,
74-
admin: profile !== null && profile.admin,
81+
admin: profile !== null && 'admin' in profile && profile.admin,
7582
counts: {
76-
roles: roles,
77-
profiles: profiles,
78-
processes: processes,
79-
changes: changes
83+
roles: roles ?? 0,
84+
profiles: profiles ?? 0,
85+
processes: processes ?? 0,
86+
changes: changes ?? 0
8087
},
8188
shortRoles: shortRoles ?? [],
8289
shortProcesses: shortProcesses ?? []

src/routes/person/[personid]/+page.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
<tr>
5858
<td> <OrganizationLink id={org.paths[0] ?? org.id} name={org.name} /></td>
5959
<td
60-
>{#if org.profiles.length > 0}{#await db.getPersonProfile(org.id, org.profiles[0].personid) then profile}
60+
>{#if org.profiles.length > 0 && org.profiles[0].personid !== null}{#await db.getPersonProfile(org.id, org.profiles[0].personid) then profile}
6161
<ProfileLink profile={profile ?? undefined} />
6262
{/await}{/if}
6363
</td>

0 commit comments

Comments
 (0)