mirror of
https://github.com/estruyf/vscode-front-matter.git
synced 2026-06-27 13:32:14 +02:00
#193 - Support for list/array fields
This commit is contained in:
Generated
+1696
-6
File diff suppressed because it is too large
Load Diff
@@ -1296,6 +1296,7 @@
|
||||
"react-dom": "17.0.1",
|
||||
"react-dropzone": "^11.3.4",
|
||||
"react-sortable-hoc": "^2.0.0",
|
||||
"react-toastify": "^8.1.0",
|
||||
"recoil": "^0.4.1",
|
||||
"rimraf": "^3.0.2",
|
||||
"style-loader": "2.0.0",
|
||||
@@ -1304,6 +1305,7 @@
|
||||
"tslint": "6.1.3",
|
||||
"typescript": "^4.5.4",
|
||||
"uniforms": "^3.7.0",
|
||||
"uniforms-antd": "^3.7.0",
|
||||
"uniforms-bridge-json-schema": "^3.7.0",
|
||||
"uniforms-unstyled": "^3.7.0",
|
||||
"url-join-ts": "^1.0.5",
|
||||
|
||||
@@ -10,8 +10,8 @@ import { SETTINGS_CONTENT_DEFAULT_FILETYPE } from "../constants";
|
||||
export class Project {
|
||||
|
||||
private static content = `---
|
||||
title: "{{name}}"
|
||||
slug: "/{{kebabCase name}}/"
|
||||
title:
|
||||
slug:
|
||||
description:
|
||||
author:
|
||||
date: 2019-08-22T15:20:28.000Z
|
||||
|
||||
@@ -2,7 +2,7 @@ import * as React from 'react';
|
||||
import Ajv from 'ajv';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { JSONSchemaBridge } from 'uniforms-bridge-json-schema';
|
||||
import { AutoFields, AutoForm, ErrorsField, SubmitField } from 'uniforms-unstyled';
|
||||
import { AutoFields, AutoForm, ErrorsField } from 'uniforms-antd';
|
||||
import { ErrorBoundary } from '@sentry/react';
|
||||
import { DataFormControls } from './DataFormControls';
|
||||
|
||||
@@ -53,7 +53,9 @@ export const DataForm: React.FunctionComponent<IDataFormProps> = ({ schema, mode
|
||||
model={model || {}}
|
||||
onSubmit={onSubmit}
|
||||
ref={form => form?.reset()}>
|
||||
<AutoFields />
|
||||
<div className={`fields`}>
|
||||
<AutoFields />
|
||||
</div>
|
||||
|
||||
<div className={`errors`}>
|
||||
<ErrorsField />
|
||||
|
||||
@@ -12,7 +12,7 @@ export const DataFormControls: React.FunctionComponent<IDataFormControlsProps> =
|
||||
const { formRef } = useForm();
|
||||
|
||||
return (
|
||||
<div className='text-right'>
|
||||
<div className='text-right border-t border-gray-200 dark:border-vulcan-300'>
|
||||
<SubmitField value={model ? `Update` : `Add`} />
|
||||
<Button className='ml-4' secondary onClick={() => {
|
||||
if (onClear) {
|
||||
|
||||
@@ -16,6 +16,8 @@ import { EmptyView } from './EmptyView';
|
||||
import { Container } from './SortableContainer';
|
||||
import { SortableItem } from './SortableItem';
|
||||
import { ChevronRightIcon } from '@heroicons/react/outline';
|
||||
import { ToastContainer, toast, Slide } from 'react-toastify';
|
||||
import 'react-toastify/dist/ReactToastify.css';
|
||||
|
||||
export interface IDataViewProps {}
|
||||
|
||||
@@ -54,6 +56,7 @@ export const DataView: React.FunctionComponent<IDataViewProps> = (props: React.P
|
||||
});
|
||||
}, [selectedData, dataEntries]);
|
||||
|
||||
|
||||
const onSubmit = useCallback((data: any) => {
|
||||
const dataClone: any[] = Object.assign([], dataEntries);
|
||||
if (selectedIndex !== null && selectedIndex !== undefined) {
|
||||
@@ -70,8 +73,19 @@ export const DataView: React.FunctionComponent<IDataViewProps> = (props: React.P
|
||||
file: selectedData.file,
|
||||
entries: dataClone
|
||||
});
|
||||
|
||||
// Show toast message
|
||||
toast.success("Wow so easy!", {
|
||||
position: "top-right",
|
||||
autoClose: 2000,
|
||||
hideProgressBar: true,
|
||||
closeOnClick: true,
|
||||
pauseOnHover: false,
|
||||
transition: Slide
|
||||
});
|
||||
}, [selectedData, dataEntries, selectedIndex]);
|
||||
|
||||
|
||||
const onSortEnd = useCallback(({ oldIndex, newIndex }: any) => {
|
||||
if (!dataEntries || dataEntries.length === 0) {
|
||||
return null;
|
||||
@@ -93,6 +107,7 @@ export const DataView: React.FunctionComponent<IDataViewProps> = (props: React.P
|
||||
});
|
||||
}, [selectedData, dataEntries, selectedIndex]);
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
Messenger.listen(messageListener);
|
||||
|
||||
@@ -105,7 +120,7 @@ export const DataView: React.FunctionComponent<IDataViewProps> = (props: React.P
|
||||
<div className="flex flex-col h-full overflow-auto inset-y-0">
|
||||
<Header settings={settings} />
|
||||
|
||||
<div className="relative w-full flex-grow max-w-7xl mx-auto border-b border-gray-200 dark:border-vulcan-300">
|
||||
<div className="relative w-full flex-grow mx-auto border-b border-gray-200 dark:border-vulcan-300">
|
||||
|
||||
<div className={`flex w-64 flex-col absolute inset-y-0`}>
|
||||
|
||||
@@ -149,8 +164,8 @@ export const DataView: React.FunctionComponent<IDataViewProps> = (props: React.P
|
||||
{
|
||||
(dataEntries || []).map((dataEntry, idx) => (
|
||||
<SortableItem
|
||||
key={dataEntry[selectedData.labelField]}
|
||||
value={dataEntry[selectedData.labelField]}
|
||||
key={dataEntry[selectedData.labelField] || `entry-${idx}`}
|
||||
value={dataEntry[selectedData.labelField] || `Entry ${idx+1}`}
|
||||
index={idx}
|
||||
crntIndex={idx}
|
||||
selectedIndex={selectedIndex}
|
||||
@@ -197,6 +212,8 @@ export const DataView: React.FunctionComponent<IDataViewProps> = (props: React.P
|
||||
</div>
|
||||
|
||||
<SponsorMsg beta={settings?.beta} version={settings?.versionInfo} />
|
||||
|
||||
<ToastContainer />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -53,9 +53,29 @@
|
||||
}
|
||||
}
|
||||
|
||||
.ant-form-item-has-error .ant-form-item-control-input {
|
||||
@apply relative;
|
||||
}
|
||||
|
||||
.ant-form-item-has-error input {
|
||||
@apply border border-red-400;
|
||||
}
|
||||
|
||||
.ant-form-item-has-error .ant-form-item-children-icon {
|
||||
@apply text-red-400 absolute right-1 top-2;
|
||||
|
||||
svg {
|
||||
@apply w-4 h-4;
|
||||
}
|
||||
}
|
||||
|
||||
.errors {
|
||||
> div {
|
||||
@apply border border-red-400 !important;
|
||||
}
|
||||
|
||||
ul {
|
||||
@apply list-disc mt-4 pl-6 pr-4 py-4 border border-red-300 bg-red-50 bg-opacity-50 text-vulcan-500;
|
||||
@apply list-disc pl-6 pr-4 py-4 bg-opacity-50 text-vulcan-500;
|
||||
}
|
||||
|
||||
li {
|
||||
@@ -79,6 +99,12 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.fields {}
|
||||
|
||||
.ant-list.ant-list-bordered {
|
||||
@apply border-t border-gray-300;
|
||||
}
|
||||
}
|
||||
|
||||
.vscode-dark .autoform {
|
||||
@@ -97,4 +123,8 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-list.ant-list-bordered {
|
||||
@apply border-vulcan-100;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user