From 33839479e269bed905f9eefc374060b9d3ee7e19 Mon Sep 17 00:00:00 2001 From: "Thomas F. K. Jorna" Date: Tue, 5 Oct 2021 12:35:40 +0200 Subject: feat(preview): filesystem basics in place --- components/BehaviorPanel.tsx | 0 components/Sidebar/Link.tsx | 11 ++++++++ components/Sidebar/index.tsx | 5 ++++ components/Tweaks/BehaviorPanel.tsx | 17 ++++++++++++ index.tsx | 0 pages/filesystemtest.tsx | 52 ++++++++++++++++++++++++++++++++++++ util/FileSystem.tsx | 0 util/checkFileSystemCompatibility.ts | 3 +++ 8 files changed, 88 insertions(+) create mode 100644 components/BehaviorPanel.tsx create mode 100644 components/Sidebar/Link.tsx create mode 100644 index.tsx create mode 100644 pages/filesystemtest.tsx create mode 100644 util/FileSystem.tsx create mode 100644 util/checkFileSystemCompatibility.ts diff --git a/components/BehaviorPanel.tsx b/components/BehaviorPanel.tsx new file mode 100644 index 0000000..e69de29 diff --git a/components/Sidebar/Link.tsx b/components/Sidebar/Link.tsx new file mode 100644 index 0000000..789873a --- /dev/null +++ b/components/Sidebar/Link.tsx @@ -0,0 +1,11 @@ +import { Text } from '@chakra-ui/react' + +export interface LinkProps { + id: string +} + +export const Link = (props: LinkProps) => { + const { id } = props + + return {id} +} diff --git a/components/Sidebar/index.tsx b/components/Sidebar/index.tsx index 05f5720..4f314da 100644 --- a/components/Sidebar/index.tsx +++ b/components/Sidebar/index.tsx @@ -51,6 +51,11 @@ const Sidebar = (props: SidebarProps) => { console.log(res) setPreviewText(res) }) + .catch((e) => { + setPreviewText( + 'Could not fetch the text for some reason, sorry!\n\n This can happen because you have an id with forward slashes (/) in it.', + ) + }) } useEffect(() => { diff --git a/components/Tweaks/BehaviorPanel.tsx b/components/Tweaks/BehaviorPanel.tsx index 0c22e1a..27906c5 100644 --- a/components/Tweaks/BehaviorPanel.tsx +++ b/components/Tweaks/BehaviorPanel.tsx @@ -10,12 +10,15 @@ import { StackDivider, VStack, Text, + Box, } from '@chakra-ui/react' import React from 'react' import { initialBehavior, initialMouse } from '../config' import { InfoTooltip } from './InfoTooltip' import { SliderWithInfo } from './SliderWithInfo' +import { checkFileSystemCompatibility } from '../../util/checkFileSystemCompatibility' + export interface BehaviorPanelProps { behavior: typeof initialBehavior setBehavior: any @@ -163,6 +166,20 @@ export const BehaviorPanel = (props: BehaviorPanelProps) => { onChange={(value) => setBehavior({ ...behavior, zoomPadding: value })} infoText="How much to zoom out to accomodate all nodes when changing the view." /> + + + + {!checkFileSystemCompatibility() && ( + + + You are not using a browser compatible with the FileSystem Access API. Only Chromium + based browsers are currently supported. + + + )} + ) } diff --git a/index.tsx b/index.tsx new file mode 100644 index 0000000..e69de29 diff --git a/pages/filesystemtest.tsx b/pages/filesystemtest.tsx new file mode 100644 index 0000000..4cadf0e --- /dev/null +++ b/pages/filesystemtest.tsx @@ -0,0 +1,52 @@ +import React, { useEffect, useState } from 'react' +import { Button } from '@chakra-ui/react' + +async function verifyPermission(fileHandle: any, readWrite: any) { + const options: any = {} + if (readWrite) { + options.mode = 'readwrite' + } + // Check if permission was already granted. If so, return true. + if ((await fileHandle.queryPermission(options)) === 'granted') { + return true + } + // Request permission. If the user grants permission, return true. + if ((await fileHandle.requestPermission(options)) === 'granted') { + return true + } + // The user didn't grant permission, so return false. + return false +} + +export default function Testpage() { + const [text, setText] = useState(0) + const [dirHandle, setDirhandle] = useState() + const [perm, setPerm] = useState(false) + + const pick = async () => { + const dirHandle = await window.showDirectoryPicker() + console.log(dirHandle) + setDirhandle(dirHandle) + } + + useEffect(() => { + ;(async () => { + console.log(dirHandle) + const newFileHandle = dirHandle ? await dirHandle.getFileHandle('inbox.org') : null + const file = await newFileHandle.getFile() + const ttext = await file.text() + setText(ttext) + const path = newFileHandle ? await dirHandle.resolve(newFileHandle) : null + console.log(path) + })() + }, [dirHandle]) + + return ( +
+ +

{text}

+ +

{perm ? '👍' : '👎'}

+
+ ) +} diff --git a/util/FileSystem.tsx b/util/FileSystem.tsx new file mode 100644 index 0000000..e69de29 diff --git a/util/checkFileSystemCompatibility.ts b/util/checkFileSystemCompatibility.ts new file mode 100644 index 0000000..a96b68e --- /dev/null +++ b/util/checkFileSystemCompatibility.ts @@ -0,0 +1,3 @@ +export const checkFileSystemCompatibility = () => { + return typeof window.showDirectoryPicker !== 'undefined' +} -- cgit v1.2.3