Skip to content

Commit 23d7fdf

Browse files
authored
Add limit to project readme (#233)
* Add description overflow hooks * Update wasm_exec file * Add readme limits. Add styles for error. Remove placeholder * Add color prop to label * Set actual size of a limit
1 parent 2e3323a commit 23d7fdf

File tree

5 files changed

+38
-12
lines changed

5 files changed

+38
-12
lines changed

src/components/Arguments/SingleArgument/styles.tsx

+7-2
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,16 @@ export const InputBlock = styled.div<InpubBlockProps>`
1212
position: relative;
1313
`
1414

15-
export const Label = styled.p`
15+
16+
interface LabelProps {
17+
error?: boolean
18+
}
19+
20+
export const Label = styled.p<LabelProps>`
1621
margin: 0;
1722
font-size: 14px;
1823
margin-bottom: 5px;
19-
color: #000;
24+
color: ${({error})=> error ? "#EE431E" : "#000"};
2025
`;
2126

2227
export const Type = styled.span`

src/components/MdeEditor.tsx

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
11
import React from 'react';
22
import SimpleMDE from "react-simplemde-editor";
3-
import { PLACEHOLDER_README } from "providers/Project/projectDefault";
43
import "easymde/dist/easymde.min.css";
54
import "unreset-css/dist/unreset.min.css"; // restore browser default element styles
6-
5+
import "../styles/markdown.css"
76

87
export const MdeEditor: React.FC<{
98
value: string;
109
onChange: (v: string) => void;
11-
}> = ({ value, onChange }) => {
10+
overflow: boolean
11+
}> = ({ value, onChange, overflow }) => {
12+
13+
const className = overflow ? "unreset ease-md-red-border" : "unreset"
1214

1315
return (
1416
<SimpleMDE
15-
className="unreset"
17+
className={className}
1618
value={value}
1719
onChange={v => onChange(v)}
18-
options={{
19-
placeholder: PLACEHOLDER_README
20-
}}
2120
/>
2221
)
2322
}

src/containers/Editor/components.tsx

+19-2
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,12 @@ const compareContracts = (prev: Account[], current: Account[]) => {
213213

214214
let monacoServicesInstalled = false;
215215

216+
const MAX_DESCRIPTION_SIZE = Math.pow(1024, 2) // 1mb of storage can be saved into readme field
217+
const calculateSize = (readme: string) => {
218+
const { size } = new Blob([readme])
219+
return size >= MAX_DESCRIPTION_SIZE
220+
}
221+
216222
const EditorContainer: React.FC<EditorContainerProps> = ({
217223
isLoading,
218224
project,
@@ -231,6 +237,8 @@ const EditorContainer: React.FC<EditorContainerProps> = ({
231237

232238
const projectAccess = useProject()
233239

240+
const [descriptionOverflow, setDescriptionOverflow] = useState(calculateSize(project.readme))
241+
234242
useEffect(() => {
235243
if (isLoading) {
236244
setCode('');
@@ -350,6 +358,10 @@ const EditorContainer: React.FC<EditorContainerProps> = ({
350358
};
351359

352360
const isReadmeEditor = active.type === 4;
361+
const readmeLabel = `README.md${descriptionOverflow
362+
? " - Content can't be more than 1Mb in size"
363+
: ""
364+
}`
353365

354366
return (
355367
<MainRoot>
@@ -395,13 +407,18 @@ const EditorContainer: React.FC<EditorContainerProps> = ({
395407
}}
396408
/>
397409
</InputBlock>
398-
<Label>README.md</Label>
410+
<Label error={descriptionOverflow}>{readmeLabel} </Label>
399411
<MdeEditor
400412
value={readme}
401413
onChange={(readme: string) => {
414+
const overflow = calculateSize(readme)
415+
setDescriptionOverflow(overflow)
402416
setReadme(readme);
403-
updateProject(title, description, readme);
417+
if(!overflow){
418+
updateProject(title, description, readme);
419+
}
404420
}}
421+
overflow={descriptionOverflow}
405422
/>
406423
</>
407424
)}

src/styles/markdown.css

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.ease-md-red-border .editor-toolbar,
2+
.ease-md-red-border .CodeMirror-wrap{
3+
border-color: #EE431E;
4+
transition: border 0.5s ease-in-out;
5+
}

src/wasm_exec.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@
247247
},
248248

249249
// func walltime() (sec int64, nsec int32)
250-
"runtime.walltime": (sp) => {
250+
"runtime.walltime1": (sp) => {
251251
sp >>>= 0;
252252
const msec = (new Date).getTime();
253253
setInt64(sp + 8, msec / 1000);

0 commit comments

Comments
 (0)