mirror of
https://github.com/linsa-io/linsa.git
synced 2026-04-24 09:18:37 +02:00
Tauri (local working) (#128)
* chore(nix): add `cargo-tauri` * chore(rust): add rustfmt config * feat: add tauri app * fix(config): tauri and web config nextjs * fix: default value * fix: force graph * fix: undefined me * fix: undefined me in page detail * fix: remove title from search component * fix: package version * chore: next config * feat: random btn for go to auth * fix the config * feat: tauri --------- Co-authored-by: Alice Carroll <git@alice-carroll.pet> Co-authored-by: Aslam H <iupin5212@gmail.com>
This commit is contained in:
5
web/app/(pages)/tauri/page.tsx
Normal file
5
web/app/(pages)/tauri/page.tsx
Normal file
@@ -0,0 +1,5 @@
|
||||
import TauriRoute from "@/components/routes/tauri/TauriRoute"
|
||||
|
||||
export default function TauriPage() {
|
||||
return <TauriRoute />
|
||||
}
|
||||
@@ -3,7 +3,13 @@
|
||||
*/
|
||||
import { NextRequest } from "next/server"
|
||||
import axios from "axios"
|
||||
import { DEFAULT_VALUES, GET } from "./route"
|
||||
import { GET } from "./route"
|
||||
|
||||
const DEFAULT_VALUES = {
|
||||
TITLE: "",
|
||||
DESCRIPTION: "",
|
||||
FAVICON: null
|
||||
}
|
||||
|
||||
jest.mock("axios")
|
||||
const mockedAxios = axios as jest.Mocked<typeof axios>
|
||||
|
||||
@@ -11,7 +11,7 @@ interface Metadata {
|
||||
url: string
|
||||
}
|
||||
|
||||
export const DEFAULT_VALUES = {
|
||||
const DEFAULT_VALUES = {
|
||||
TITLE: "",
|
||||
DESCRIPTION: "",
|
||||
FAVICON: null
|
||||
|
||||
@@ -90,6 +90,9 @@ export const ProfileSection: React.FC = () => {
|
||||
<DropdownMenuItem>
|
||||
<MenuItem icon="LogOut" text="Log out" onClick={signOut} onClose={closeMenu} />
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<MenuItem icon="CircleUser" text="Tauri" href="/tauri" onClose={closeMenu} />
|
||||
</DropdownMenuItem>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
</div>
|
||||
|
||||
@@ -4,9 +4,13 @@ import type * as force_graph from "./force-graph-client"
|
||||
import { useCoState } from "@/lib/providers/jazz-provider"
|
||||
import { PublicGlobalGroup } from "@/lib/schema/master/public-group"
|
||||
import { ID } from "jazz-tools"
|
||||
import dynamic from "next/dynamic"
|
||||
import { Button } from "../ui/button"
|
||||
import Link from "next/link"
|
||||
|
||||
let graph_data_promise = import("./graph-data.json").then(a => a.default)
|
||||
let ForceGraphClient = react.lazy(() => import("./force-graph-client-lazy"))
|
||||
// let ForceGraphClient = react.lazy(() => import("./force-graph-client-lazy"))
|
||||
const ForceGraphClient = dynamic(() => import("./force-graph-client-lazy"), { ssr: false })
|
||||
|
||||
export function PublicHomeRoute() {
|
||||
let raw_graph_data = react.use(graph_data_promise)
|
||||
@@ -66,6 +70,7 @@ export function PublicHomeRoute() {
|
||||
/>
|
||||
<div className="absolute left-0 top-0 z-20 p-4">
|
||||
<h2 className="text-xl font-bold text-black dark:text-white">Learn Anything</h2>
|
||||
<Link href={"/1password"}>Random Topic</Link>
|
||||
</div>
|
||||
<div className="absolute left-1/2 top-1/2 z-10 w-[60%] -translate-x-1/2 -translate-y-1/2 transform">
|
||||
<div className="flex flex-col items-center justify-center gap-6">
|
||||
|
||||
@@ -204,20 +204,20 @@ const drawGraph = (canvas: fg.canvas.CanvasState, color_map: ColorMap): void =>
|
||||
ctx.textAlign = "center"
|
||||
ctx.textBaseline = "middle"
|
||||
|
||||
const max_size = Math.max(canvas.ctx.canvas.width, canvas.ctx.canvas.height)
|
||||
|
||||
for (const node of graph.nodes) {
|
||||
const { x, y } = node.position
|
||||
const opacity = 0.6 + ((node.mass - 1) / 50) * 4
|
||||
|
||||
ctx.font = `${
|
||||
canvas.max_size / 200 + (((node.mass - 1) / 5) * (canvas.max_size / 100)) / canvas.scale
|
||||
}px sans-serif`
|
||||
ctx.font = `${max_size / 200 + (((node.mass - 1) / 5) * (max_size / 100)) / canvas.scale}px sans-serif`
|
||||
|
||||
ctx.fillStyle =
|
||||
node.anchor || canvas.hovered_node === node
|
||||
? `rgba(129, 140, 248, ${opacity})`
|
||||
: `hsl(${color_map[node.key as string]} / ${opacity})`
|
||||
|
||||
ctx.fillText(node.label, (x / graph.grid.size) * canvas.max_size, (y / graph.grid.size) * canvas.max_size)
|
||||
ctx.fillText(node.label, (x / graph.grid.size) * max_size, (y / graph.grid.size) * max_size)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -240,7 +240,7 @@ export const createForceGraph = (props: ForceGraphProps): react.JSX.Element => {
|
||||
let [nodes, edges] = generateNodesFromRawData(props.raw_nodes)
|
||||
|
||||
let color_map = generateColorMap(nodes)
|
||||
|
||||
let bump_end = anim.bump(0)
|
||||
let graph = fg.graph.makeGraph(graph_options, nodes.slice(), edges.slice())
|
||||
|
||||
/*
|
||||
@@ -272,7 +272,7 @@ export const createForceGraph = (props: ForceGraphProps): react.JSX.Element => {
|
||||
let window_size = ws.useWindowSize()
|
||||
|
||||
let alpha = 0 // 0 - 1
|
||||
let bump_end = anim.bump(0)
|
||||
|
||||
let frame_iter_limit = anim.frameIterationsLimit()
|
||||
|
||||
let loop = anim.animationLoop(time => {
|
||||
|
||||
@@ -135,7 +135,7 @@ export const LinkForm: React.FC<LinkFormProps> = ({
|
||||
}
|
||||
|
||||
const onSubmit = (values: LinkFormValues) => {
|
||||
if (isFetching) return
|
||||
if (isFetching || !me) return
|
||||
|
||||
try {
|
||||
const personalLinks = me.root?.personalLinks?.toJSON() || []
|
||||
|
||||
@@ -82,7 +82,7 @@ export const DetailPageForm = ({ page }: { page: PersonalPage }) => {
|
||||
// if (newTitle === page.title) return
|
||||
|
||||
console.log("Updating page title")
|
||||
const personalPages = me.root?.personalPages?.toJSON() || []
|
||||
const personalPages = me?.root?.personalPages?.toJSON() || []
|
||||
const slug = generateUniqueSlug(personalPages, page.slug || "")
|
||||
|
||||
const trimmedTitle = editor.getText().trim()
|
||||
|
||||
@@ -3,7 +3,7 @@ import { Input } from "@/components/ui/input"
|
||||
|
||||
export const SearchHeader = () => {
|
||||
return (
|
||||
<ContentHeader title="Search">
|
||||
<ContentHeader>
|
||||
<Input placeholder="Search something..." />
|
||||
</ContentHeader>
|
||||
)
|
||||
|
||||
11
web/components/routes/tauri/TauriRoute.tsx
Normal file
11
web/components/routes/tauri/TauriRoute.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
"use client"
|
||||
|
||||
import { useAccount } from "@/lib/providers/jazz-provider"
|
||||
|
||||
export default function TauriRoute() {
|
||||
const { me } = useAccount()
|
||||
|
||||
console.log({ pages: me?.root?.personalPages?.toJSON() })
|
||||
|
||||
return <div>{JSON.stringify(me?.root?.personalPages)}</div>
|
||||
}
|
||||
@@ -5,7 +5,6 @@ const isProd = process.env.NODE_ENV === "production"
|
||||
const internalHost = process.env.TAURI_DEV_HOST || "localhost"
|
||||
const isIgnoreBuild = process.env.IGNORE_BUILD_ERRORS === "true"
|
||||
|
||||
console.log(isIgnoreBuild)
|
||||
const ignoreBuild = {
|
||||
typescript: {
|
||||
ignoreBuildErrors: true
|
||||
@@ -27,7 +26,7 @@ const commonConfig = {
|
||||
|
||||
const tauriConfig = {
|
||||
...commonConfig,
|
||||
output: "export",
|
||||
// output: "export",
|
||||
images: {
|
||||
...commonConfig.images,
|
||||
unoptimized: true
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"test": "jest"
|
||||
},
|
||||
"dependencies": {
|
||||
"@clerk/nextjs": "^5.3.7",
|
||||
"@clerk/nextjs": "^5.4.0",
|
||||
"@dnd-kit/core": "^6.1.0",
|
||||
"@dnd-kit/sortable": "^8.0.0",
|
||||
"@hookform/resolvers": "^3.9.0",
|
||||
@@ -60,13 +60,13 @@
|
||||
"@tiptap/pm": "^2.6.6",
|
||||
"@tiptap/react": "^2.6.6",
|
||||
"@tiptap/suggestion": "^2.6.6",
|
||||
"axios": "^1.7.5",
|
||||
"axios": "^1.7.7",
|
||||
"cheerio": "1.0.0",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"clsx": "^2.1.1",
|
||||
"cmdk": "^1.0.0",
|
||||
"date-fns": "^3.6.0",
|
||||
"framer-motion": "^11.3.31",
|
||||
"framer-motion": "^11.4.0",
|
||||
"jazz-react": "0.7.35-unique.2",
|
||||
"jazz-react-auth-clerk": "0.7.33-new-auth.1",
|
||||
"jazz-tools": "0.7.35-unique.2",
|
||||
@@ -75,9 +75,9 @@
|
||||
"lucide-react": "^0.429.0",
|
||||
"next": "14.2.5",
|
||||
"next-themes": "^0.3.0",
|
||||
"nuqs": "^1.17.8",
|
||||
"nuqs": "^1.19.0",
|
||||
"react": "^18.3.1",
|
||||
"react-day-picker": "^9.0.8",
|
||||
"react-day-picker": "^8.10.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-hook-form": "^7.53.0",
|
||||
"react-textarea-autosize": "^8.5.3",
|
||||
@@ -95,14 +95,14 @@
|
||||
"@testing-library/jest-dom": "^6.5.0",
|
||||
"@testing-library/react": "^16.0.1",
|
||||
"@types/jest": "^29.5.12",
|
||||
"@types/node": "^22.5.1",
|
||||
"@types/node": "^22.5.2",
|
||||
"@types/react": "^18.3.5",
|
||||
"@types/react-dom": "^18.3.0",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-config-next": "14.2.5",
|
||||
"jest": "^29.7.0",
|
||||
"jest-environment-jsdom": "^29.7.0",
|
||||
"postcss": "^8.4.41",
|
||||
"postcss": "^8.4.44",
|
||||
"prettier-plugin-tailwindcss": "^0.6.6",
|
||||
"tailwindcss": "^3.4.10",
|
||||
"ts-jest": "^29.2.5",
|
||||
|
||||
Reference in New Issue
Block a user