Skip to content

Commit

Permalink
[Feat] finished preview page
Browse files Browse the repository at this point in the history
  • Loading branch information
mistricky committed Feb 21, 2024
1 parent 8f535dc commit f8773e5
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 11 deletions.
24 changes: 24 additions & 0 deletions snap-client/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions snap-client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"@types/node": "^16.18.81",
"@types/react": "^18.2.55",
"@types/react-dom": "^18.2.19",
"downloadjs": "^1.4.7",
"highlight.js": "^11.9.0",
"html-to-image": "^1.11.11",
"react": "^18.2.0",
Expand Down Expand Up @@ -47,6 +48,7 @@
]
},
"devDependencies": {
"@types/downloadjs": "^1.4.6",
"daisyui": "^3.9.4",
"tailwindcss": "^3.4.1"
}
Expand Down
30 changes: 28 additions & 2 deletions snap-client/src/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,13 @@ import useWebSocket, { ReadyState } from "react-use-websocket";
import { ControlBar, Editor, Frame, Panel } from "./components";
import { useConfig, useEvent } from "./hooks";
import { toPng, toJpeg, toBlob, toPixelData, toSvg } from "html-to-image";
import download from "downloadjs";

const CODE_EMPTY_PLACEHOLDER = `print "Hello, CodeSnap.nvim!"`;

function App() {
const [socketUrl] = useState("ws://127.0.0.1:8080/ws");
const { sendMessage, lastMessage } = useWebSocket(socketUrl);
const { sendMessage, lastMessage, readyState } = useWebSocket(socketUrl);
const event = useEvent(lastMessage);
const config = useConfig(event?.config_setup);
const frameRef = useRef<HTMLDivElement | null>(null);
Expand All @@ -30,13 +31,27 @@ function App() {
navigator.clipboard.write([clipboardItem]);
}, []);

const handleExportClick = useCallback(async () => {
if (!frameRef.current) {
return;
}

const dataURL = await toPng(frameRef.current);

download(dataURL, "codesnap.png");
}, []);

return (
<div className="w-full h-full flex flex-col items-center bg-deep-gray">
<p className="rainbow-text text-4xl font-extrabold mt-20">
CodeSnap.nvim
</p>
<Panel>
<ControlBar onCopyClick={handleCopyButtonClick}></ControlBar>
<ControlBar
onExportClick={handleExportClick}
onCopyClick={handleCopyButtonClick}
readyState={readyState}
/>
<div className="rounded-xl overflow-hidden">
<Frame ref={frameRef} watermark={config?.watermark}>
<Editor
Expand All @@ -48,6 +63,17 @@ function App() {
</Frame>
</div>
</Panel>
<a href="https://github.com/mistricky/codesnap.nvim">
<svg
role="img"
viewBox="0 0 24 24"
className="w-10 h-10 mt-10 fill-white opacity-50"
xmlns="http://www.w3.org/2000/svg"
>
<title>GitHub</title>
<path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12" />
</svg>
</a>
</div>
);
}
Expand Down
3 changes: 0 additions & 3 deletions snap-client/src/components/control-bar/color-picker.tsx

This file was deleted.

19 changes: 14 additions & 5 deletions snap-client/src/components/control-bar/control-bar.tsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,26 @@
import { ColorPicker } from "./color-picker";
import { ConnectionStatus } from "./connection-status";
import { ReadyState } from "react-use-websocket";

interface ControlBarProps {
onCopyClick(): void;
onExportClick(): void;
readyState: ReadyState;
}

export const ControlBar = ({ onCopyClick }: ControlBarProps) => {
export const ControlBar = ({
onCopyClick,
onExportClick,
readyState,
}: ControlBarProps) => {
return (
<div
className="bg-neutral rounded-xl mb-2 p-1 flex flex-row items-center"
onClick={onCopyClick}
>
<ColorPicker></ColorPicker>
<ConnectionStatus readyState={readyState} />
<div className="flex flex-row items-center">
<button className="btn mr-1">
{/*
* <button className="btn mr-1">
<svg
role="img"
className="h-4 w-4 fill-neutral-500"
Expand All @@ -23,7 +31,8 @@ export const ControlBar = ({ onCopyClick }: ControlBarProps) => {
<path d="M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z" />
</svg>
</button>
<button className="btn mr-1">
*/}
<button className="btn mr-1" onClick={onExportClick}>
Export
<svg
className="fill-neutral-content"
Expand Down
2 changes: 1 addition & 1 deletion snap-client/src/components/editor/frame.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export interface FrameProps {

export const Frame = forwardRef<HTMLDivElement, PropsWithChildren<FrameProps>>(
({ children, watermark }, ref) => (
<div ref={ref} className="bg-stripe min-w-[800px] p-20">
<div ref={ref} className="bg-relay min-w-[800px] p-20">
{children}
{watermark && (
<p className="pacifico-regular text-xl opacity-50 font-bold text-white text-center w-full mt-14">
Expand Down

0 comments on commit f8773e5

Please sign in to comment.