Skip to content

Commit 4afb992

Browse files
committed
Attempt to reproduce #674
1 parent a95ccbb commit 4afb992

File tree

5 files changed

+46
-8
lines changed

5 files changed

+46
-8
lines changed

demos/react-supabase-todolist/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@
99
"start": "pnpm build && pnpm preview"
1010
},
1111
"dependencies": {
12-
"@powersync/react": "workspace:*",
13-
"@powersync/web": "workspace:*",
1412
"@emotion/react": "11.11.4",
1513
"@emotion/styled": "11.11.5",
1614
"@journeyapps/wa-sqlite": "^1.2.0",
1715
"@mui/icons-material": "^5.15.12",
1816
"@mui/material": "^5.15.12",
1917
"@mui/x-data-grid": "^6.19.6",
18+
"@powersync/drizzle-driver": "^0.4.0",
19+
"@powersync/react": "workspace:*",
20+
"@powersync/web": "workspace:*",
2021
"@supabase/supabase-js": "^2.39.7",
2122
"formik": "^2.4.6",
2223
"lodash": "^4.17.21",

demos/react-supabase-todolist/src/components/providers/SystemProvider.tsx

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,26 @@
11
import { configureFts } from '@/app/utils/fts_setup';
2-
import { AppSchema, ListRecord, LISTS_TABLE, TODOS_TABLE } from '@/library/powersync/AppSchema';
2+
import {
3+
AppSchema,
4+
drizzleSchema,
5+
drizzleTodos,
6+
ListRecord,
7+
LISTS_TABLE,
8+
TODOS_TABLE
9+
} from '@/library/powersync/AppSchema';
310
import { SupabaseConnector } from '@/library/powersync/SupabaseConnector';
411
import { CircularProgress } from '@mui/material';
512
import { PowerSyncContext } from '@powersync/react';
6-
import { createBaseLogger, DifferentialWatchedQuery, LogLevel, PowerSyncDatabase } from '@powersync/web';
13+
import {
14+
createBaseLogger,
15+
DifferentialWatchedQuery,
16+
LogLevel,
17+
PowerSyncDatabase,
18+
SyncClientImplementation
19+
} from '@powersync/web';
720
import React, { Suspense } from 'react';
821
import { NavigationPanelContextProvider } from '../navigation/NavigationPanelContext';
22+
import { wrapPowerSyncWithDrizzle } from '@powersync/drizzle-driver';
23+
import { inArray, sql } from 'drizzle-orm';
924

1025
const SupabaseContext = React.createContext<SupabaseConnector | null>(null);
1126
export const useSupabase = () => React.useContext(SupabaseContext);
@@ -17,6 +32,8 @@ export const db = new PowerSyncDatabase({
1732
}
1833
});
1934

35+
export const drizzleDb = wrapPowerSyncWithDrizzle(db, { schema: drizzleSchema });
36+
2037
export type EnhancedListRecord = ListRecord & { total_tasks: number; completed_tasks: number };
2138

2239
export type QueryStore = {
@@ -26,6 +43,13 @@ export type QueryStore = {
2643
const QueryStore = React.createContext<QueryStore | null>(null);
2744
export const useQueryStore = () => React.useContext(QueryStore);
2845

46+
export async function markItemsAsCompleted(ids: string[]) {
47+
await drizzleDb
48+
.update(drizzleTodos)
49+
.set({ completed: 1, completed_at: sql`datetime ('now')` })
50+
.where(inArray(drizzleTodos.id, ids));
51+
}
52+
2953
export const SystemProvider = ({ children }: { children: React.ReactNode }) => {
3054
const [connector] = React.useState(() => new SupabaseConnector());
3155
const [powerSync] = React.useState(db);
@@ -68,7 +92,7 @@ export const SystemProvider = ({ children }: { children: React.ReactNode }) => {
6892
const l = connector.registerListener({
6993
initialized: () => {},
7094
sessionStarted: () => {
71-
powerSync.connect(connector);
95+
powerSync.connect(connector, { clientImplementation: SyncClientImplementation.RUST });
7296
}
7397
});
7498

@@ -94,4 +118,6 @@ export const SystemProvider = ({ children }: { children: React.ReactNode }) => {
94118
);
95119
};
96120

121+
(window as any).markItemsAsCompleted = markItemsAsCompleted;
122+
97123
export default SystemProvider;

demos/react-supabase-todolist/src/library/powersync/AppSchema.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { column, Schema, Table } from '@powersync/web';
2+
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
23

34
export const LISTS_TABLE = 'lists';
45
export const TODOS_TABLE = 'todos';
@@ -27,6 +28,16 @@ export const AppSchema = new Schema({
2728
lists
2829
});
2930

31+
export const drizzleTodos = sqliteTable('todos', {
32+
id: text('id').primaryKey().notNull(),
33+
created_at: text('created_at'),
34+
completed_at: text('completed_at'),
35+
description: text('name'),
36+
completed: integer('completed')
37+
});
38+
39+
export const drizzleSchema = { drizzleTodos };
40+
3041
export type Database = (typeof AppSchema)['types'];
3142
export type TodoRecord = Database['todos'];
3243
// OR:

packages/common/rollup.config.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ export default (commandLineArgs) => {
3636
ReadableStream: ['web-streams-polyfill/ponyfill', 'ReadableStream'],
3737
// Used by can-ndjson-stream
3838
TextDecoder: ['text-encoding', 'TextDecoder']
39-
}),
40-
terser({ sourceMap })
39+
})
40+
// terser({ sourceMap })
4141
],
4242
// This makes life easier
4343
external: [

packages/common/src/client/sync/bucket/SqliteBucketStorage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ export class SqliteBucketStorage extends BaseObserver<BucketStorageListener> imp
282282
const seqAfter: number = rs.rows?.item(0)['seq'];
283283
if (seqAfter != seqBefore) {
284284
this.logger.debug(
285-
`New data uploaded since write checpoint ${opId} - need new write checkpoint (sequence updated)`
285+
`New data uploaded since write checkpoint ${opId} - need new write checkpoint (sequence updated)`
286286
);
287287

288288
// New crud data may have been uploaded since we got the checkpoint. Abort.

0 commit comments

Comments
 (0)