|
@@ -1,26 +1,11 @@
|
|
import React from "react";
|
|
import React from "react";
|
|
import { useRouter } from "next/router";
|
|
import { useRouter } from "next/router";
|
|
-import { compress } from "compress-json";
|
|
|
|
import toast from "react-hot-toast";
|
|
import toast from "react-hot-toast";
|
|
-import { BiErrorAlt } from "react-icons/bi";
|
|
|
|
import { Button } from "src/components/Button";
|
|
import { Button } from "src/components/Button";
|
|
import { Input } from "src/components/Input";
|
|
import { Input } from "src/components/Input";
|
|
import { Modal, ModalProps } from "src/components/Modal";
|
|
import { Modal, ModalProps } from "src/components/Modal";
|
|
-import { baseURL } from "src/constants/data";
|
|
|
|
-import useConfig from "src/store/useConfig";
|
|
|
|
import styled from "styled-components";
|
|
import styled from "styled-components";
|
|
|
|
|
|
-const StyledWarning = styled.p``;
|
|
|
|
-
|
|
|
|
-const StyledErrorWrapper = styled.div`
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
- align-items: center;
|
|
|
|
- justify-content: center;
|
|
|
|
- color: ${({ theme }) => theme.TEXT_DANGER};
|
|
|
|
- font-weight: 600;
|
|
|
|
-`;
|
|
|
|
-
|
|
|
|
const StyledFlex = styled.div`
|
|
const StyledFlex = styled.div`
|
|
display: flex;
|
|
display: flex;
|
|
gap: 12px;
|
|
gap: 12px;
|
|
@@ -45,21 +30,8 @@ const StyledContainer = styled.div`
|
|
`;
|
|
`;
|
|
|
|
|
|
export const ShareModal: React.FC<ModalProps> = ({ visible, setVisible }) => {
|
|
export const ShareModal: React.FC<ModalProps> = ({ visible, setVisible }) => {
|
|
- const json = useConfig(state => state.json);
|
|
|
|
- const [encodedJson, setEncodedJson] = React.useState("");
|
|
|
|
- const navigate = useRouter();
|
|
|
|
-
|
|
|
|
- const embedText = `<iframe id="jsoncrackEmbed" src="${baseURL}/widget></iframe>`;
|
|
|
|
- const shareURL = `${baseURL}/editor?json=${encodedJson}`;
|
|
|
|
-
|
|
|
|
- React.useEffect(() => {
|
|
|
|
- if (visible) {
|
|
|
|
- const jsonEncode = compress(JSON.parse(json));
|
|
|
|
- const jsonString = JSON.stringify(jsonEncode);
|
|
|
|
-
|
|
|
|
- setEncodedJson(encodeURIComponent(jsonString));
|
|
|
|
- }
|
|
|
|
- }, [json, visible]);
|
|
|
|
|
|
+ const { push, query } = useRouter();
|
|
|
|
+ const shareURL = `https://jsoncrack.com/editor?json=${query.json}`;
|
|
|
|
|
|
const handleShare = (value: string) => {
|
|
const handleShare = (value: string) => {
|
|
navigator.clipboard.writeText(value);
|
|
navigator.clipboard.writeText(value);
|
|
@@ -71,39 +43,23 @@ export const ShareModal: React.FC<ModalProps> = ({ visible, setVisible }) => {
|
|
<Modal visible={visible} setVisible={setVisible}>
|
|
<Modal visible={visible} setVisible={setVisible}>
|
|
<Modal.Header>Create a Share Link</Modal.Header>
|
|
<Modal.Header>Create a Share Link</Modal.Header>
|
|
<Modal.Content>
|
|
<Modal.Content>
|
|
- {encodedJson.length > 5000 ? (
|
|
|
|
- <StyledErrorWrapper>
|
|
|
|
- <BiErrorAlt size={60} />
|
|
|
|
- <StyledWarning>
|
|
|
|
- Link size exceeds 5000 characters, unable to generate link for file of
|
|
|
|
- this size!
|
|
|
|
- </StyledWarning>
|
|
|
|
- </StyledErrorWrapper>
|
|
|
|
- ) : (
|
|
|
|
- <>
|
|
|
|
- <StyledContainer>
|
|
|
|
- Share Link
|
|
|
|
- <StyledFlex>
|
|
|
|
- <Input value={shareURL} type="url" readOnly />
|
|
|
|
- <Button status="SECONDARY" onClick={() => handleShare(shareURL)}>
|
|
|
|
- Copy
|
|
|
|
- </Button>
|
|
|
|
- </StyledFlex>
|
|
|
|
- </StyledContainer>
|
|
|
|
- <StyledContainer>
|
|
|
|
- Embed into your website
|
|
|
|
- <StyledFlex>
|
|
|
|
- <Button
|
|
|
|
- status="SUCCESS"
|
|
|
|
- onClick={() => navigate.push("/embed")}
|
|
|
|
- block
|
|
|
|
- >
|
|
|
|
- Learn How to Embed
|
|
|
|
- </Button>
|
|
|
|
- </StyledFlex>
|
|
|
|
- </StyledContainer>
|
|
|
|
- </>
|
|
|
|
- )}
|
|
|
|
|
|
+ <StyledContainer>
|
|
|
|
+ Share Link
|
|
|
|
+ <StyledFlex>
|
|
|
|
+ <Input value={shareURL} type="url" readOnly />
|
|
|
|
+ <Button status="SECONDARY" onClick={() => handleShare(shareURL)}>
|
|
|
|
+ Copy
|
|
|
|
+ </Button>
|
|
|
|
+ </StyledFlex>
|
|
|
|
+ </StyledContainer>
|
|
|
|
+ <StyledContainer>
|
|
|
|
+ Embed into your website
|
|
|
|
+ <StyledFlex>
|
|
|
|
+ <Button status="SUCCESS" onClick={() => push("/embed")} block>
|
|
|
|
+ Learn How to Embed
|
|
|
|
+ </Button>
|
|
|
|
+ </StyledFlex>
|
|
|
|
+ </StyledContainer>
|
|
</Modal.Content>
|
|
</Modal.Content>
|
|
<Modal.Controls setVisible={setVisible}></Modal.Controls>
|
|
<Modal.Controls setVisible={setVisible}></Modal.Controls>
|
|
</Modal>
|
|
</Modal>
|