Skip to content

Commit 6b270e2

Browse files
committed
Merge branch 'develop' of github.com:tloncorp/landscape-apps into develop
2 parents 210be15 + 62e2bb2 commit 6b270e2

14 files changed

+34
-47
lines changed

packages/app/features/settings/BlockedUsersScreen.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ import { BlockedContactsWidget, ScreenHeader, View } from '../../ui';
1111
type Props = NativeStackScreenProps<RootStackParamList, 'BlockedUsers'>;
1212

1313
export function BlockedUsersScreen(props: Props) {
14-
const currentUserId = useCurrentUserId();
15-
const { data: calm } = store.useCalmSettings({ userId: currentUserId });
14+
const { data: calm } = store.useCalmSettings();
1615
const { data: blockedContacts } = store.useBlockedContacts();
1716

1817
const onBlockedContactPress = useCallback(

packages/app/features/top/ContactsScreen.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export default function ContactsScreen(props: Props) {
3030
const { data: userContacts } = store.useUserContacts();
3131
const { data: contacts } = store.useContacts();
3232
const { data: suggestions } = store.useSuggestedContacts();
33-
const { data: calmSettings } = store.useCalmSettings({ userId: currentUser });
33+
const { data: calmSettings } = store.useCalmSettings();
3434

3535
const onContactPress = useCallback(
3636
(contact: db.Contact) => {

packages/app/features/top/MessagesFilterMenu.tsx

+2-4
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,16 @@ import * as store from '@tloncorp/shared/store';
22
import { TalkSidebarFilter } from '@tloncorp/shared/urbit';
33
import { PropsWithChildren, useCallback, useMemo, useState } from 'react';
44

5-
import { useCurrentUserId } from '../../hooks/useCurrentUser';
65
import { ActionSheet, createActionGroups } from '../../ui';
76

87
export function MessagesFilterMenu({ children }: PropsWithChildren) {
98
const [isOpen, setIsOpen] = useState(false);
10-
const currentUserId = useCurrentUserId();
11-
const { data } = store.useMessagesFilter({ userId: currentUserId });
9+
const { data } = store.useMessagesFilter();
1210
const talkFilter = data ?? 'Direct Messages';
1311

1412
const handleAction = useCallback((value: TalkSidebarFilter) => {
1513
return () => {
16-
store.changeMessageFilter(value, currentUserId);
14+
store.changeMessageFilter(value);
1715
setIsOpen(false);
1816
};
1917
}, []);

packages/app/features/top/UserProfileScreen.tsx

+1-3
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,7 @@ export function UserProfileScreen({ route, navigation }: Props) {
3333
const userId = params?.userId || currentUserId;
3434
const { data: contacts } = store.useContacts();
3535
const connectionStatus = useConnectionStatus(userId);
36-
const { data: calmSettings } = store.useCalmSettings({
37-
userId: currentUserId,
38-
});
36+
const { data: calmSettings } = store.useCalmSettings();
3937
const [selectedGroup, setSelectedGroup] = useState<db.Group | null>(null);
4038
const { resetToDm } = useRootNavigation();
4139

packages/app/hooks/useCalmSettings.ts

+1-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
import * as store from '@tloncorp/shared/store';
22

3-
import { useCurrentUserId } from '../hooks/useCurrentUser';
4-
53
export const useCalmSettings = () => {
6-
const currentUserId = useCurrentUserId();
7-
const calmSettingsQuery = store.useCalmSettings({
8-
userId: currentUserId,
9-
});
4+
const calmSettingsQuery = store.useCalmSettings();
105
return { calmSettings: calmSettingsQuery.data ?? null } as const;
116
};

packages/app/hooks/useFilteredChats.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { useCallback, useLayoutEffect, useMemo, useState } from 'react';
77

88
import { useCalm } from '../ui';
99
import { getChannelTitle, getGroupTitle } from '../ui';
10-
import { useCurrentUserId } from './useCurrentUser';
1110

1211
export type TabName = 'all' | 'home' | 'groups' | 'messages' | 'talk';
1312

@@ -29,15 +28,14 @@ export function useFilteredChats({
2928
searchQuery: string;
3029
activeTab: TabName;
3130
}): SectionedChatData {
32-
const userId = useCurrentUserId();
3331
const performSearch = useChatSearch({ pinned, unpinned, pending });
3432
const debouncedQuery = useDebouncedValue(searchQuery, 200);
3533
const searchResults = useMemo(
3634
() => performSearch(debouncedQuery),
3735
[debouncedQuery, performSearch]
3836
);
3937

40-
const { data } = useMessagesFilter({ userId });
38+
const { data } = useMessagesFilter();
4139
const talkFilter =
4240
activeTab === 'talk' ? data ?? 'Direct Messages' : 'Direct Messages';
4341

packages/app/provider/AppDataProvider.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export function AppDataProvider({
2121
const currentUserId = useCurrentUserId();
2222
const session = store.useCurrentSession();
2323
const contactsQuery = store.useContacts();
24-
const calmSettingsQuery = store.useCalmSettings({ userId: currentUserId });
24+
const calmSettingsQuery = store.useCalmSettings();
2525
return (
2626
<AppDataContextProvider
2727
currentUserId={currentUserId}

packages/shared/src/api/settingsApi.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import * as db from '../db';
2+
import { SETTINGS_SINGLETON_KEY } from '../db/schema';
23
import * as ub from '../urbit';
34
import { getCurrentUserId, poke, scry, subscribe } from './urbit';
45

@@ -74,7 +75,6 @@ export const toClientSettings = (
7475
settings: ub.GroupsDeskSettings
7576
): db.Settings => {
7677
return {
77-
userId: getCurrentUserId(),
7878
theme: settings.desk.display?.theme,
7979
disableAppTileUnreads: settings.desk.calmEngine?.disableAppTileUnreads,
8080
disableAvatars: settings.desk.calmEngine?.disableAvatars,

packages/shared/src/db/queries.ts

+11-7
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ import {
7575
threadUnreads as $threadUnreads,
7676
verifications as $verifications,
7777
volumeSettings as $volumeSettings,
78+
SETTINGS_SINGLETON_KEY,
7879
channels,
7980
} from './schema';
8081
import {
@@ -133,21 +134,24 @@ export interface GetGroupsOptions {
133134

134135
export const insertSettings = createWriteQuery(
135136
'insertSettings',
136-
async (settings: Settings, ctx: QueryCtx) => {
137-
return ctx.db.insert($settings).values(settings).onConflictDoUpdate({
138-
target: $settings.userId,
139-
set: settings,
140-
});
137+
async (settings: Partial<Settings>, ctx: QueryCtx) => {
138+
return ctx.db
139+
.insert($settings)
140+
.values({ ...settings, id: SETTINGS_SINGLETON_KEY })
141+
.onConflictDoUpdate({
142+
target: $settings.id,
143+
set: settings,
144+
});
141145
},
142146
['settings']
143147
);
144148

145149
export const getSettings = createReadQuery(
146150
'getSettings',
147-
async (userId: string, ctx: QueryCtx) => {
151+
async (ctx: QueryCtx) => {
148152
return ctx.db.query.settings.findFirst({
149153
where(fields) {
150-
return eq(fields.userId, userId);
154+
return eq(fields.id, SETTINGS_SINGLETON_KEY);
151155
},
152156
});
153157
},

packages/shared/src/db/schema.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ const metaFields = {
2828
description: text('description'),
2929
};
3030

31+
export const SETTINGS_SINGLETON_KEY = 'settings';
3132
export const settings = sqliteTable('settings', {
32-
userId: text('user_id').primaryKey(),
33+
id: text('id').primaryKey().default(SETTINGS_SINGLETON_KEY),
3334
theme: text('theme'),
3435
disableAppTileUnreads: boolean('disable_app_tile_unreads'),
3536
disableAvatars: boolean('disable_avatars'),

packages/shared/src/store/activityActions.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,11 @@ export async function setDefaultNotificationLevel(
133133
}
134134

135135
export async function advanceActivitySeenMarker(timestamp: number) {
136-
const currentUserId = api.getCurrentUserId();
137-
const settings = await db.getSettings(currentUserId);
136+
const settings = await db.getSettings();
138137
const existingMarker = settings?.activitySeenTimestamp ?? 1;
139138
if (timestamp > existingMarker) {
140139
// optimistic update
141140
db.insertSettings({
142-
userId: currentUserId,
143141
activitySeenTimestamp: timestamp,
144142
});
145143

packages/shared/src/store/dbHooks.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -72,36 +72,35 @@ export const usePins = (
7272
});
7373
};
7474

75-
export const useCalmSettings = (options: { userId: string }) => {
75+
export const useCalmSettings = () => {
7676
return useQuery({
7777
queryKey: ['calmSettings'],
7878
queryFn: () =>
79-
db.getSettings(options.userId).then((r) => ({
79+
db.getSettings().then((r) => ({
8080
disableAvatars: r?.disableAvatars ?? false,
8181
disableNicknames: r?.disableNicknames ?? false,
8282
disableRemoteContent: r?.disableRemoteContent ?? false,
8383
})),
8484
});
8585
};
8686

87-
export const useMessagesFilter = (options: { userId: string }) => {
87+
export const useMessagesFilter = () => {
8888
const deps = useKeyFromQueryDeps(db.getSettings);
8989
return useQuery({
9090
queryKey: ['messagesFilter', deps],
9191
queryFn: async () => {
92-
const settings = await db.getSettings(options.userId);
92+
const settings = await db.getSettings();
9393
return getMessagesFilter(settings?.messagesFilter);
9494
},
9595
});
9696
};
9797

9898
export const useActivitySeenMarker = () => {
99-
const userId = api.getCurrentUserId();
10099
const deps = useKeyFromQueryDeps(db.getSettings);
101100
return useQuery({
102101
queryKey: ['activitySeenMarker', deps],
103102
queryFn: async () => {
104-
const settings = await db.getSettings(userId);
103+
const settings = await db.getSettings();
105104
return settings?.activitySeenTimestamp ?? 1;
106105
},
107106
});

packages/shared/src/store/settingsActions.ts

+4-7
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,15 @@ import { setSetting } from '../api';
22
import * as db from '../db';
33
import { TalkSidebarFilter } from '../urbit';
44

5-
export async function changeMessageFilter(
6-
filter: TalkSidebarFilter,
7-
userId: string
8-
) {
9-
const existing = await db.getSettings(userId);
5+
export async function changeMessageFilter(filter: TalkSidebarFilter) {
6+
const existing = await db.getSettings();
107
const oldFilter = existing?.messagesFilter;
118
try {
129
// optimistic update
13-
await db.insertSettings({ userId, messagesFilter: filter });
10+
await db.insertSettings({ messagesFilter: filter });
1411
return setSetting('messagesFilter', filter);
1512
} catch (e) {
1613
console.error('Failed to change message filter', e);
17-
await db.insertSettings({ userId, messagesFilter: oldFilter });
14+
await db.insertSettings({ messagesFilter: oldFilter });
1815
}
1916
}

packages/shared/src/store/sync.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import * as api from '../api';
66
import { GetChangedPostsOptions } from '../api';
77
import * as db from '../db';
88
import { QueryCtx, batchEffects } from '../db/query';
9+
import { SETTINGS_SINGLETON_KEY } from '../db/schema';
910
import { createDevLogger, runIfDev } from '../debug';
1011
import { AnalyticsEvent } from '../domain';
1112
import { extractClientVolumes } from '../logic/activity';
@@ -853,11 +854,10 @@ export const handleStorageUpdate = async (update: api.StorageUpdate) => {
853854
};
854855

855856
export const handleSettingsUpdate = async (update: api.SettingsUpdate) => {
856-
const userId = api.getCurrentUserId();
857857
switch (update.type) {
858858
case 'updateSetting':
859859
await db.insertSettings({
860-
userId,
860+
id: SETTINGS_SINGLETON_KEY,
861861
...update.setting,
862862
});
863863
break;

0 commit comments

Comments
 (0)