0.8.28 • Published 2 days ago

@canvas-js/hooks v0.8.28

Weekly downloads
-
License
-
Repository
-
Last release
2 days ago

@canvas-js/hooks

Hooks for using Canvas applications in React.

Table of Contents

useCanvas

The useCanvas hook initializes a Canvas application contract inside a React component. It accepts the same CanvasConfig object as Canvas.initialize in @canvas-js/core.

import { SIWESigner } from "@canvas-js/chain-ethereum"
import { useCanvas } from "@canvas-js/hooks"
import { Forum } from "@canvas-js/templates"

export function MyApp() {
  const { app, error } = useCanvas({
    contract: { topic: "com.example.forum", ...Forum },
    signers: [new SIWESigner({ signer: wallet })],
    topic: "myapp",
  })
}

Note that app might be null the first time the hook runs.

useLiveQuery

The useLiveQuery hook maintains a live-updated frontend query on top of a Canvas application.

You can see a more complete example here.

Example usage:

import { useLiveQuery } from "@canvas-js/hooks"

export function MyComponent({ app }: { app?: Canvas }) {
  const threads = useLiveQuery<Thread>(app, "threads", {
    offset: page * 10,
    limit: 10,
    orderBy: { timestamp: "desc" },
    where: category === "all" ? undefined : { category },
  })
}

useTick

useTick(app: Canvas, condition: string | null, interval: number)

The useTick hook calls a tick() action on a contract at a regular interval.

Ticking happens client-side. Here are a few considerations:

  • Ticking will only run if the user has started a session.
  • If a client observes that any other user on the log has called tick() within the last interval, their tick will be skipped.
  • Contracts will stop ticking if no clients are online.

Note that useTick() does not do any special accounting for networking - it is possible that if two users start their timers at around the same time, their clocks will be synchronized and each will emit tick() events around the same time.

You should account for this in your application logic.

Conditional Ticking

Ticking can be configured to only run when a certain condition in the database is true.

const models = {
  state: {
    gameOver: "boolean"
  }
}

const actions = {
  toggleGameStart: (db) => {
    const { gameOver } = await db.state.get()
    db.state.set({ gameOver: !gameOver })
  }
  tick: (db} => {
    // ...
  }
}

const { app } = useCanvas({
  contract: { models, actions }
})

useTick(app, '!state.gameOver', 1000)

The condition can be any query of the form model.field or !model.field.

If would prefer not to use a condition, you can also leave it null.

useTick(app, null, 1000)
0.8.28

2 days ago

0.8.27-patch.21

4 days ago

0.8.27-patch.14

15 days ago

0.8.27-patch.13

15 days ago

0.8.27-patch.16

15 days ago

0.8.27-patch.15

15 days ago

0.8.27-patch.10

15 days ago

0.8.27-patch.6

16 days ago

0.8.27-patch.7

16 days ago

0.8.27-patch.12

15 days ago

0.8.27-patch.8

16 days ago

0.8.27-patch.11

15 days ago

0.8.27-patch.9

16 days ago

0.8.27-patch.20

14 days ago

0.9.1

16 days ago

0.8.27-patch.18

14 days ago

0.8.27-patch.17

14 days ago

0.8.27-patch.19

14 days ago

0.8.27-patch.2

19 days ago

0.8.27-patch.3

19 days ago

0.8.27-patch.4

19 days ago

0.8.27-patch.5

19 days ago

0.8.27-patch.1

19 days ago

0.9.0

23 days ago

0.9.0-next.1

1 month ago

0.8.26-alpha.4

4 months ago

0.8.26-alpha.3

4 months ago

0.8.26-alpha.2

4 months ago

0.8.26

4 months ago

0.8.26-alpha.1

4 months ago

0.8.25

4 months ago

0.8.24

4 months ago

0.8.23

4 months ago

0.8.22

4 months ago

0.8.21

4 months ago

0.8.20

4 months ago

0.8.19

5 months ago

0.8.18

5 months ago

0.8.17

5 months ago

0.8.16

5 months ago

0.8.15

5 months ago

0.8.14-alpha.1

5 months ago

0.8.14

5 months ago

0.8.13

5 months ago

0.8.12

5 months ago

0.8.11

5 months ago

0.8.10

5 months ago

0.8.9

5 months ago

0.8.8

5 months ago

0.8.5

5 months ago

0.8.4

5 months ago

0.8.7

5 months ago

0.8.6

5 months ago

0.8.2-alpha.1

5 months ago

0.8.3

5 months ago

0.8.2

5 months ago

0.8.2-patch.1

5 months ago

0.7.2-alpha.1

6 months ago

0.7.2-alpha.2

6 months ago

0.7.2-alpha.3

6 months ago

0.7.2-alpha.4

6 months ago

0.7.2-alpha.5

6 months ago

0.7.2-alpha.6

6 months ago

0.7.2-alpha.7

6 months ago

0.7.2

6 months ago

0.7.1

6 months ago

0.7.3

6 months ago

0.7.0

6 months ago

0.8.1

6 months ago

0.8.0

6 months ago

0.5.0

7 months ago

0.5.1

7 months ago

0.6.1

6 months ago

0.6.0

6 months ago

0.4.9

1 year ago

0.5.0-alpha

1 year ago

0.5.0-alpha4

12 months ago

0.5.0-alpha3

1 year ago

0.5.0-alpha2

1 year ago

0.4.10

1 year ago

0.4.11

1 year ago

0.4.8

1 year ago

0.4.5

1 year ago

0.4.4

1 year ago

0.4.7

1 year ago

0.4.6

1 year ago

0.4.1

1 year ago

0.4.0

1 year ago

0.4.3

1 year ago

0.4.2

1 year ago

0.3.0

1 year ago

0.3.2

1 year ago

0.3.1

1 year ago

0.3.3

1 year ago

0.2.1

1 year ago

0.2.0

1 year ago

0.2.2

1 year ago

0.1.2

1 year ago

0.1.3

1 year ago

0.1.0

1 year ago

0.1.1

1 year ago

0.0.53

1 year ago

0.0.52

1 year ago

0.0.40

1 year ago

0.0.41

1 year ago

0.0.42

1 year ago

0.0.43

1 year ago

0.0.44

1 year ago

0.0.45

1 year ago

0.0.46

1 year ago

0.0.47

1 year ago

0.0.37

1 year ago

0.0.38

1 year ago

0.0.39

1 year ago

0.0.48-pre

1 year ago

0.0.50-pre4

1 year ago

0.0.50-pre3

1 year ago

0.0.50-pre2

1 year ago

0.0.50-pre

1 year ago

0.0.51

1 year ago

0.0.50

1 year ago

0.0.48

1 year ago

0.0.49

1 year ago

0.0.20

2 years ago

0.0.22

2 years ago

0.0.23

2 years ago

0.0.24

2 years ago

0.0.25

1 year ago

0.0.18-alpha

2 years ago

0.0.18-alpha2

2 years ago

0.0.19

2 years ago

0.0.30

1 year ago

0.0.31

1 year ago

0.0.34-alpha6

1 year ago

0.0.32

1 year ago

0.0.33

1 year ago

0.0.34

1 year ago

0.0.35

1 year ago

0.0.36

1 year ago

0.0.34-alpha5

1 year ago

0.0.34-alpha4

1 year ago

0.0.34-alpha3

1 year ago

0.0.34-alpha2

1 year ago

0.0.26

1 year ago

0.0.27

1 year ago

0.0.28

1 year ago

0.0.29

1 year ago

0.0.34-alpha

1 year ago

0.0.17-alpha2

2 years ago

0.0.17-alpha

2 years ago

0.0.17

2 years ago

0.0.10

2 years ago

0.0.11

2 years ago

0.0.16

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.5-alpha

2 years ago

0.0.4

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago