Skip to content

Commit 828736f

Browse files
authored
fix: fixed releaseDate issue on import (#368)
1 parent b8d0f27 commit 828736f

File tree

15 files changed

+355
-64
lines changed

15 files changed

+355
-64
lines changed

package-lock.json

Lines changed: 90 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,12 @@
3939
},
4040
"dependencies": {
4141
"@reduxjs/toolkit": "^1.9.5",
42+
"axios": "^1.7.9",
4243
"bootstrap": "^4.6.0",
4344
"bootstrap-italia": "^2.8.8",
4445
"copy-to-clipboard": "^3.3.3",
4546
"countries-list": "^3.0.6",
47+
"date-fns": "^4.1.0",
4648
"design-react-kit": "^5.4.1",
4749
"i18next": "^23.2.2",
4850
"i18next-browser-languagedetector": "^7.2.0",
@@ -75,6 +77,7 @@
7577
"@types/lodash": "^4.14.195",
7678
"@types/mime-db": "^1.43.5",
7779
"@types/node": "^20.3.1",
80+
"@types/node-fetch": "^2.6.12",
7881
"@types/react": "^18.3.3",
7982
"@types/react-dom": "^18.3.0",
8083
"@types/validator": "^13.7.17",
@@ -88,6 +91,7 @@
8891
"gh-pages": "^5.0.0",
8992
"globals": "^15.9.0",
9093
"jest": "^26.6.3",
94+
"node-fetch": "^3.3.2",
9195
"release-it": "^17.4.0",
9296
"swc-loader": "^0.2.3",
9397
"ts-node": "^10.9.1",
@@ -96,4 +100,4 @@
96100
"typescript-eslint": "^8.11.0",
97101
"vite": "^5.4.1"
98102
}
99-
}
103+
}

src/app/components/Editor.tsx

Lines changed: 46 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { FieldErrors, FieldPathByValue, FormProvider, Resolver, useForm } from "react-hook-form";
2-
import PubliccodeYmlLanguages from "./PubliccodeYmlLanguages";
3-
41
import { Col, Container, Icon, notify, Row } from "design-react-kit";
52
import { set } from "lodash";
63
import { useCallback, useEffect, useState } from "react";
4+
import { FieldErrors, FieldPathByValue, FormProvider, Resolver, useForm } from "react-hook-form";
5+
import useFormPersist from "react-hook-form-persist";
76
import { useTranslation } from "react-i18next";
7+
import { RequiredDeep } from "type-fest";
88
import YAML from "yaml";
99
import licenses from "../../generated/licenses.json";
1010
import { allLangs } from "../../i18n";
@@ -13,11 +13,19 @@ import { DEFAULT_COUNTRY_SECTIONS } from "../contents/constants";
1313
import * as countrySection from "../contents/countrySpecificSection";
1414
import developmentStatus from "../contents/developmentStatus";
1515
import maintenanceTypes from "../contents/maintenanceTypes";
16+
import mimeTypes from "../contents/mime-types";
1617
import platforms from "../contents/platforms";
1718
import PublicCode, { defaultItaly, LATEST_VERSION, PublicCodeWithDeprecatedFields } from "../contents/publiccode";
19+
import { getPubliccodeYmlVersionList } from "../contents/publiccode-yml-version";
1820
import softwareTypes from "../contents/softwareTypes";
21+
import fileImporter from "../importers/file.importer";
22+
import importFromGitlab from "../importers/gitlab.importer";
23+
import importStandard from "../importers/standard.importer";
1924
import linter from "../linter";
25+
import publicCodeAdapter from "../publiccode-adapter";
26+
import { isMinorThanLatest, toSemVerObject } from "../semver";
2027
import { useAppDispatch, useAppSelector } from "../store";
28+
import { resetPubliccodeYmlLanguages, setPubliccodeYmlLanguages } from "../store/publiccodeYmlLanguages";
2129
import { validator } from "../validator";
2230
import EditorBoolean from "./EditorBoolean";
2331
import EditorContacts from "./EditorContacts";
@@ -30,21 +38,13 @@ import EditorMultiselect from "./EditorMultiselect";
3038
import EditorRadio from "./EditorRadio";
3139
import EditorScreenshots from "./EditorScreenshots";
3240
import EditorSelect from "./EditorSelect";
41+
import EditorUsedBy from "./EditorUsedBy";
3342
import { Footer } from "./Foot";
3443
import Head from "./Head";
3544
import InfoBox from "./InfoBox";
36-
import { YamlModal } from "./YamlModal";
37-
38-
import useFormPersist from "react-hook-form-persist";
39-
import { RequiredDeep } from "type-fest";
40-
import mimeTypes from "../contents/mime-types";
41-
import { getPubliccodeYmlVersionList } from "../contents/publiccode-yml-version";
42-
import { isMinorThanLatest, toSemVerObject } from "../semver";
43-
import { resetPubliccodeYmlLanguages, setPubliccodeYmlLanguages } from "../store/publiccodeYmlLanguages";
44-
import yamlSerializer from "../yaml-serializer";
45-
import { removeDuplicate } from "../yaml-upload";
46-
import EditorUsedBy from "./EditorUsedBy";
45+
import PubliccodeYmlLanguages from "./PubliccodeYmlLanguages";
4746
import { WarningModal } from "./WarningModal";
47+
import { YamlModal } from "./YamlModal";
4848

4949
const PUBLIC_CODE_EDITOR_WARNINGS = 'PUBLIC_CODE_EDITOR_WARNINGS'
5050

@@ -245,23 +245,19 @@ export default function Editor() {
245245
const setFormDataAfterImport = async (
246246
fetchData: () => Promise<PublicCode | null>
247247
) => {
248-
const publicCode = await fetchData();
249-
250-
if (publicCode) {
251-
const values = { ...defaultValues, ...publicCode } as PublicCode;
252-
253-
if (publicCode.usedBy) {
254-
values.usedBy = removeDuplicate(publicCode.usedBy)
255-
}
248+
try {
249+
const publicCode = await fetchData().then(publicCode => {
250+
return publicCodeAdapter({ publicCode, defaultValues: defaultValues as unknown as Partial<PublicCode> })
251+
});
256252

257253
setLanguages(publicCode);
258-
reset(values);
254+
reset(publicCode);
259255

260256
checkPubliccodeYmlVersion(publicCode);
261257

262258
setPublicCodeImported(true);
263259

264-
const res = await checkWarnings(values)
260+
const res = await checkWarnings(publicCode)
265261

266262
setWarnings(Array.from(res.warnings).map(([key, { message }]) => ({ key, message })));
267263

@@ -278,22 +274,41 @@ export default function Editor() {
278274
duration: _5_SECONDS
279275
})
280276
}
277+
278+
279+
} catch (error: unknown) {
280+
notify('Import error', (error as Error).message, {
281+
dismissable: true,
282+
state: "error",
283+
})
281284
}
282285
};
283286

284287
const loadFileYamlHandler = async (file: File) => {
285-
const fetchDataFn = () => yamlSerializer(file.stream());
288+
const fetchDataFn = () => fileImporter(file);
286289

287290
await setFormDataAfterImport(fetchDataFn);
288291
};
289292

290-
const loadRemoteYamlHandler = async (url: string) => {
291-
const fetchDataFn = () =>
292-
fetch(url)
293-
.then((res) => res.body)
294-
.then((res) => res && yamlSerializer(res));
293+
const loadRemoteYamlHandler = async (urlValue: string) => {
294+
295+
try {
296+
const url = new URL(urlValue);
297+
298+
const isGitlabRepo = url.hostname.includes('gitlab.com')
299+
300+
const fetchDataFn = isGitlabRepo
301+
? async () => await importFromGitlab(url)
302+
: async () => await importStandard(url)
303+
304+
await setFormDataAfterImport(fetchDataFn);
305+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
306+
} catch (error) {
307+
notify(t('editor.notvalidurl'), t('editor.notvalidurl'), {
308+
state: 'error'
309+
})
310+
}
295311

296-
await setFormDataAfterImport(fetchDataFn);
297312
};
298313
//#endregion
299314

0 commit comments

Comments
 (0)