mirror of
https://github.com/linsa-io/linsa.git
synced 2026-01-12 12:20:23 +01: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:
@@ -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>
|
||||
}
|
||||
Reference in New Issue
Block a user