PrimeReact setup
This commit is contained in:
@@ -12,17 +12,18 @@
|
|||||||
"@effect/schema": "^0.68.17",
|
"@effect/schema": "^0.68.17",
|
||||||
"@tanstack/react-query": "4",
|
"@tanstack/react-query": "4",
|
||||||
"@thilawyn/thilalib": "^0.1.5",
|
"@thilawyn/thilalib": "^0.1.5",
|
||||||
|
"@todo-tests/common": "workspace:*",
|
||||||
"@trpc/client": "^10.45.2",
|
"@trpc/client": "^10.45.2",
|
||||||
"@trpc/react-query": "^10.45.2",
|
"@trpc/react-query": "^10.45.2",
|
||||||
"effect": "^3.4.7",
|
"effect": "^3.4.7",
|
||||||
"mobx": "^6.13.0",
|
"mobx": "^6.13.0",
|
||||||
"mobx-react-lite": "^4.0.7",
|
"mobx-react-lite": "^4.0.7",
|
||||||
|
"primereact": "^10.7.0",
|
||||||
"react": "^18.3.1",
|
"react": "^18.3.1",
|
||||||
"react-dom": "^18.3.1",
|
"react-dom": "^18.3.1",
|
||||||
"ws": "^8.18.0"
|
"ws": "^8.18.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@todo-tests/common": "workspace:*",
|
|
||||||
"@types/react": "^18.3.3",
|
"@types/react": "^18.3.3",
|
||||||
"@types/react-dom": "^18.3.0",
|
"@types/react-dom": "^18.3.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^7.15.0",
|
"@typescript-eslint/eslint-plugin": "^7.15.0",
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import { PrimeReactProvider } from "primereact/api"
|
||||||
|
import "primereact/resources/themes/lara-light-cyan/theme.css"
|
||||||
import "./index.css"
|
import "./index.css"
|
||||||
import { VTodosSubscription } from "./todo/VTodosSubscription"
|
import { VTodosSubscription } from "./todo/VTodosSubscription"
|
||||||
import { TRPCClientProvider } from "./trpc/TRPCClientProvider"
|
import { TRPCClientProvider } from "./trpc/TRPCClientProvider"
|
||||||
@@ -6,10 +8,12 @@ import { TRPCClientProvider } from "./trpc/TRPCClientProvider"
|
|||||||
export function App() {
|
export function App() {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TRPCClientProvider>
|
<PrimeReactProvider>
|
||||||
{/* <Index /> */}
|
<TRPCClientProvider>
|
||||||
<VTodosSubscription />
|
{/* <Index /> */}
|
||||||
</TRPCClientProvider>
|
<VTodosSubscription />
|
||||||
|
</TRPCClientProvider>
|
||||||
|
</PrimeReactProvider>
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { observer } from "mobx-react-lite"
|
import { observer } from "mobx-react-lite"
|
||||||
|
import { Card } from "primereact/card"
|
||||||
import { Todo } from "../data"
|
import { Todo } from "../data"
|
||||||
|
|
||||||
|
|
||||||
@@ -10,9 +11,9 @@ export interface VTodoProps {
|
|||||||
export const VTodo = observer(({ todo }: VTodoProps) => {
|
export const VTodo = observer(({ todo }: VTodoProps) => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col px-6 pt-10 pb-8 bg-white ring-1 shadow-xl ring-gray-900/5 sm:mx-auto sm:max-w-lg sm:rounded-lg sm:px-10">
|
<Card>
|
||||||
<p className="text-sm">{todo.content}</p>
|
<p>{todo.content}</p>
|
||||||
</div>
|
</Card>
|
||||||
)
|
)
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ export interface VTodosProps {
|
|||||||
* Shows a vertical list of todos
|
* Shows a vertical list of todos
|
||||||
*/
|
*/
|
||||||
export const VTodos = observer(({ todos }: VTodosProps) => (
|
export const VTodos = observer(({ todos }: VTodosProps) => (
|
||||||
<div className="flex flex-col gap-1">
|
<div className="flex flex-col items-stretch gap-1">
|
||||||
{todos.map(todo => (
|
{todos.map(todo => (
|
||||||
<VTodo
|
<VTodo
|
||||||
key={Option.match(todo.id, {
|
key={Option.match(todo.id, {
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import { Schema as S } from "@effect/schema"
|
import { Schema as S } from "@effect/schema"
|
||||||
import { JsonifiableTodo } from "@todo-tests/common/data"
|
import { JsonifiableTodo } from "@todo-tests/common/data"
|
||||||
import { Option, flow, identity } from "effect"
|
import { flow } from "effect"
|
||||||
import { IObservableArray, observable } from "mobx"
|
import { IObservableArray, observable } from "mobx"
|
||||||
import { observer } from "mobx-react-lite"
|
import { observer } from "mobx-react-lite"
|
||||||
import { useState } from "react"
|
import { useState } from "react"
|
||||||
import { Todo } from "../data"
|
import { Todo } from "../data"
|
||||||
import { trpc } from "../trpc/trpc"
|
import { trpc } from "../trpc/trpc"
|
||||||
import { VTodo } from "./VTodo"
|
import { VTodos } from "./VTodos"
|
||||||
|
|
||||||
|
|
||||||
const decodeTodos = flow(
|
const decodeTodos = flow(
|
||||||
@@ -28,25 +28,12 @@ export const VTodosSubscription = observer(() => {
|
|||||||
const [todos, setTodos] = useState<IObservableArray<Todo>>(observable.array())
|
const [todos, setTodos] = useState<IObservableArray<Todo>>(observable.array())
|
||||||
|
|
||||||
trpc.todos.changes.useSubscription(undefined, {
|
trpc.todos.changes.useSubscription(undefined, {
|
||||||
onData(data) {
|
onData: data => {
|
||||||
setTodos(decodeTodos(data))
|
setTodos(decodeTodos(data))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
return (
|
return <VTodos todos={todos} />
|
||||||
<div className="flex flex-col gap-1">
|
|
||||||
{todos.map(todo => (
|
|
||||||
<VTodo
|
|
||||||
key={Option.match(todo.id, {
|
|
||||||
onSome: identity,
|
|
||||||
onNone: () => todo.order,
|
|
||||||
})}
|
|
||||||
|
|
||||||
todo={todo}
|
|
||||||
/>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user