Skip to content

Commit f6958f5

Browse files
Merge pull request #98 from SashenJayathilaka/myNewBranchg
🐛 Bug Fixes
2 parents 2ccf984 + 9922e5b commit f6958f5

8 files changed

Lines changed: 147 additions & 78 deletions

File tree

components/BodyContent.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable react-hooks/exhaustive-deps */
12
"use client";
23

34
import { gitBadge } from "@/atom/displayBadges";
@@ -203,6 +204,12 @@ function BodyContent({}: Props) {
203204
setIsShow={setIsShow}
204205
setIsMdPreview={setIsMdPreview}
205206
isMdPreview={isMdPreview}
207+
gitHubDetail={gitHubDetail}
208+
readmeRow={readmeRow}
209+
gitHubTechStack={gitHubTechStack}
210+
images={images}
211+
size={size}
212+
displayBadges={displayBadges}
206213
/>
207214
{isMdPreview ? (
208215
<motion.div

components/ButtonActions.tsx

Lines changed: 101 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,137 @@
11
"use client";
22

3-
import { useState } from "react";
3+
import {
4+
GitBadges,
5+
GitHubDetail,
6+
GitHubImages,
7+
GitHubImagesSize,
8+
GitHubTechStack,
9+
ReadmeRow,
10+
} from "@/type";
11+
import { FormEvent, useCallback, useState } from "react";
412
import {
513
AiOutlineDownload,
614
AiOutlineEye,
715
AiOutlineFileDone,
816
} from "react-icons/ai";
917
import { BiArrowBack, BiCopy } from "react-icons/bi";
18+
import { BsFiletypeJson } from "react-icons/bs";
1019
import { toast } from "react-toastify";
1120

1221
type Props = {
1322
setIsShow: (value: boolean) => void;
1423
setIsMdPreview: (value: boolean) => void;
1524
isMdPreview: boolean;
25+
gitHubDetail: GitHubDetail;
26+
gitHubTechStack: GitHubTechStack;
27+
readmeRow: ReadmeRow;
28+
images: GitHubImages;
29+
size: GitHubImagesSize;
30+
displayBadges: GitBadges;
1631
};
1732

18-
function ButtonActions({ setIsShow, setIsMdPreview, isMdPreview }: Props) {
33+
function ButtonActions({
34+
setIsShow,
35+
setIsMdPreview,
36+
isMdPreview,
37+
gitHubDetail,
38+
gitHubTechStack,
39+
readmeRow,
40+
images,
41+
size,
42+
displayBadges,
43+
}: Props) {
1944
const [isCopy, setIsCopy] = useState(false);
2045

21-
const handleDownloadMarkdown = (event: React.FormEvent<HTMLFormElement>) => {
22-
event.preventDefault();
46+
const handleDownloadMarkdown = useCallback(
47+
(event: FormEvent) => {
48+
event.preventDefault();
49+
50+
if (isMdPreview) {
51+
const markdownContent: any =
52+
document.getElementById("markdown-content");
53+
const tempElement = document.createElement("a");
54+
tempElement.setAttribute(
55+
"href",
56+
`data:text/markdown;charset=utf-8,${encodeURIComponent(
57+
markdownContent.innerText
58+
)}`
59+
);
60+
tempElement.setAttribute("download", "README.md");
61+
tempElement.style.display = "none";
62+
document.body.appendChild(tempElement);
63+
tempElement.click();
64+
document.body.removeChild(tempElement);
65+
} else {
66+
toast.warn("Please Switch Preview Mode");
67+
}
68+
},
69+
[isMdPreview]
70+
);
71+
72+
const handleDownloadJson = useCallback(
73+
(event: FormEvent) => {
74+
event.preventDefault();
2375

24-
if (isMdPreview) {
25-
const markdownContent: any = document.getElementById("markdown-content");
2676
const tempElement = document.createElement("a");
2777
tempElement.setAttribute(
2878
"href",
29-
`data:text/markdown;charset=utf-8,${encodeURIComponent(
30-
markdownContent.innerText
79+
`data:text/json;charset=utf-8,${encodeURIComponent(
80+
JSON.stringify({
81+
gitHubDetail,
82+
gitHubTechStack,
83+
readmeRow,
84+
images,
85+
size,
86+
displayBadges,
87+
})
3188
)}`
3289
);
33-
tempElement.setAttribute("download", "README.md");
90+
tempElement.setAttribute("download", "data.json");
3491
tempElement.style.display = "none";
3592
document.body.appendChild(tempElement);
3693
tempElement.click();
3794
document.body.removeChild(tempElement);
38-
} else {
39-
toast.warn("Please Switch Preview Mode");
40-
}
41-
};
95+
},
96+
[displayBadges, gitHubDetail, gitHubTechStack, images, readmeRow, size]
97+
);
4298

43-
const handleCopyToClipboard = (event: React.FormEvent<HTMLFormElement>) => {
44-
event.preventDefault();
99+
const handleCopyToClipboard = useCallback(
100+
(event: FormEvent) => {
101+
event.preventDefault();
45102

46-
if (isMdPreview) {
47-
setIsCopy(true);
103+
if (isMdPreview) {
104+
setIsCopy(true);
48105

49-
const range = document.createRange();
50-
range.selectNode(document.getElementById("markdown-content") as any);
51-
window.getSelection()?.removeAllRanges();
52-
window.getSelection()?.addRange(range);
53-
document.execCommand("copy");
54-
window.getSelection()?.removeAllRanges();
106+
const range = document.createRange();
107+
range.selectNode(document.getElementById("markdown-content") as any);
108+
window.getSelection()?.removeAllRanges();
109+
window.getSelection()?.addRange(range);
110+
document.execCommand("copy");
111+
window.getSelection()?.removeAllRanges();
55112

56-
setTimeout(() => {
57-
setIsCopy(false);
58-
}, 1000);
59-
} else {
60-
toast.warn("Please Switch Preview Mode");
61-
}
62-
};
113+
setTimeout(() => {
114+
setIsCopy(false);
115+
}, 1000);
116+
} else {
117+
toast.warn("Please Switch Preview Mode");
118+
}
119+
},
120+
[isMdPreview]
121+
);
63122

64123
return (
65124
<div className="flex justify-between items-center py-2.5">
66125
<button
67126
onClick={() => setIsShow(true)}
68-
className="bg-gray-300 hover:bg-gray-400 text-gray-800 font-bold py-2 px-4 rounded inline-flex items-center gap-2"
127+
className="bg-gray-700 text-gray-300 hover:bg-slate-600 dark:bg-gray-300 dark:hover:bg-gray-400 dark:text-gray-800 font-bold py-2 px-4 rounded inline-flex items-center gap-2"
69128
>
70129
<BiArrowBack size={20} />
71130
<span>Back To Edit</span>
72131
</button>
73132
<button
74-
onClick={(e: any) => handleCopyToClipboard(e)}
75-
className="bg-gray-300 hover:bg-gray-400 text-gray-800 font-bold py-2 px-4 rounded inline-flex items-center gap-2"
133+
onClick={handleCopyToClipboard}
134+
className="bg-gray-700 text-gray-300 hover:bg-slate-600 dark:bg-gray-300 dark:hover:bg-gray-400 dark:text-gray-800 font-bold py-2 px-4 rounded inline-flex items-center gap-2"
76135
>
77136
{isCopy ? (
78137
<>
@@ -87,24 +146,24 @@ function ButtonActions({ setIsShow, setIsMdPreview, isMdPreview }: Props) {
87146
)}
88147
</button>
89148
<button
90-
onClick={(e: any) => handleDownloadMarkdown(e)}
91-
className="bg-gray-300 hover:bg-gray-400 text-gray-800 font-bold py-2 px-4 rounded inline-flex items-center gap-2"
149+
onClick={handleDownloadMarkdown}
150+
className="bg-gray-700 text-gray-300 hover:bg-slate-600 dark:bg-gray-300 dark:hover:bg-gray-400 dark:text-gray-800 font-bold py-2 px-4 rounded inline-flex items-center gap-2"
92151
>
93152
<AiOutlineDownload size={20} />
94153
<span>Download Markdown</span>
95154
</button>
96-
{/* <button
97-
onClick={() => toast.info("This feature will be coming soon")}
98-
className="bg-gray-300 hover:bg-gray-400 text-gray-800 font-bold py-2 px-4 rounded inline-flex items-center gap-2"
155+
<button
156+
onClick={handleDownloadJson}
157+
className="bg-gray-700 text-gray-300 hover:bg-slate-600 dark:bg-gray-300 dark:hover:bg-gray-400 dark:text-gray-800 font-bold py-2 px-4 rounded inline-flex items-center gap-2"
99158
>
100-
<AiOutlineSave size={20} />
101-
<span>Save Markdown</span>
102-
</button> */}
159+
<BsFiletypeJson size={20} />
160+
<span>Download Backup</span>
161+
</button>
103162
<button
104163
onClick={() =>
105164
isMdPreview ? setIsMdPreview(false) : setIsMdPreview(true)
106165
}
107-
className="bg-gray-300 hover:bg-gray-400 text-gray-800 font-bold py-2 px-4 rounded inline-flex items-center gap-2"
166+
className="bg-gray-700 text-gray-300 hover:bg-slate-600 dark:bg-gray-300 dark:hover:bg-gray-400 dark:text-gray-800 font-bold py-2 px-4 rounded inline-flex items-center gap-2"
108167
>
109168
{isMdPreview ? (
110169
<>
@@ -123,18 +182,3 @@ function ButtonActions({ setIsShow, setIsMdPreview, isMdPreview }: Props) {
123182
}
124183

125184
export default ButtonActions;
126-
127-
/* const handleDownloadJson = () => {
128-
const tempElement = document.createElement("a");
129-
tempElement.setAttribute(
130-
"href",
131-
`data:text/json;charset=utf-8,${encodeURIComponent(
132-
JSON.stringify({ gitHubTechStack })
133-
)}`
134-
);
135-
tempElement.setAttribute("download", "data.json");
136-
tempElement.style.display = "none";
137-
document.body.appendChild(tempElement);
138-
tempElement.click();
139-
document.body.removeChild(tempElement);
140-
}; */
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
"use client";
2+
3+
type Props = {};
4+
5+
function ConfigOptions({}: Props) {
6+
return <div>ConfigOptions</div>;
7+
}
8+
9+
export default ConfigOptions;

components/profile/ProfileButtonAction.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable react-hooks/exhaustive-deps */
12
"use client";
23

34
import convertJsonProcess from "@/hook/convertJsonProcess";

components/profile/ProfileContent.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable react-hooks/exhaustive-deps */
12
"use client";
23

34
import { profileAtomDetail } from "@/atom/profileDetailsAtom";
@@ -67,7 +68,7 @@ function ProfileContent({}: Props) {
6768
setIsShow(false);
6869
setAction(false);
6970
toast.success("Generate Successfully");
70-
}, 3000);
71+
}, 2000);
7172
};
7273

7374
const updateAtom = () => {

components/profile/process/ConfigOptions.tsx

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable react-hooks/exhaustive-deps */
12
"use client";
23

34
import { profileAtomDetail } from "@/atom/profileDetailsAtom";
@@ -22,25 +23,28 @@ function ConfigOptions({}: Props) {
2223
const { updateStateValue, currentValue } = readJson(files!);
2324
const { updateProfileStore } = updateProfileValue();
2425

25-
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
26-
const fileReader = new FileReader();
27-
28-
const fileType = event.target.files && event.target.files[0];
29-
30-
if (!fileType) return;
31-
32-
if (fileType.type === "application/json") {
33-
setFileName(fileType.name);
34-
fileReader.readAsText(fileType, "UTF-8");
35-
fileReader.onload = (event) => {
36-
const jasonData = JSON.parse(event.target?.result as string);
37-
setFiles(jasonData);
38-
};
39-
} else {
40-
toast.error("This File Type Not Supported");
41-
setFileName(fileType.name);
42-
}
43-
};
26+
const handleChange = useCallback(
27+
(event: React.ChangeEvent<HTMLInputElement>) => {
28+
const fileReader = new FileReader();
29+
30+
const fileType = event.target.files && event.target.files[0];
31+
32+
if (!fileType) return;
33+
34+
if (fileType.type === "application/json") {
35+
setFileName(fileType.name);
36+
fileReader.readAsText(fileType, "UTF-8");
37+
fileReader.onload = (event) => {
38+
const jasonData = JSON.parse(event.target?.result as string);
39+
setFiles(jasonData);
40+
};
41+
} else {
42+
toast.error("This File Type Not Supported");
43+
setFileName(fileType.name);
44+
}
45+
},
46+
[]
47+
);
4448

4549
const handleProcess = useCallback(
4650
(e: FormEvent) => {

hook/convertJsonProcess.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
/* eslint-disable react-hooks/rules-of-hooks */
2+
13
import { profileAtomDetail } from "@/atom/profileDetailsAtom";
24
import { ProfileAtomDetails } from "@/type";
35
import { useCallback, useEffect, useState } from "react";

type.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ export interface ProfileAtomDetails {
163163
endWelcomeSection: boolean;
164164
}
165165

166-
export interface GitHubRepoDetails {
166+
/* export interface GitHubRepoDetails {
167167
websiteUpDown: string;
168168
websiteLink: string;
169169
maintained: string;
@@ -207,3 +207,4 @@ export interface GitHubRepoDetails {
207207
faqSection: string[]; //done
208208
acknowledgements: string[]; // done
209209
}
210+
*/

0 commit comments

Comments
 (0)