159 lines
6.3 KiB
TypeScript
159 lines
6.3 KiB
TypeScript
import React, { Fragment } from 'react';
|
|
import Editor from 'react-simple-code-editor';
|
|
import { Menu, Transition } from '@headlessui/react';
|
|
import { ChevronDownIcon } from '@heroicons/react/solid';
|
|
import { highlight, languages } from 'prismjs';
|
|
import 'prismjs/components/prism-clike';
|
|
import 'prismjs/components/prism-yaml';
|
|
import 'prismjs/themes/prism.css';
|
|
import { initialEditorYaml } from './consts';
|
|
|
|
function classNames(...classes: any) {
|
|
return classes.filter(Boolean).join(' ');
|
|
}
|
|
|
|
export const Advanced = () => {
|
|
const [code, setCode] = React.useState(initialEditorYaml);
|
|
|
|
return (
|
|
<>
|
|
<div className="grid grid-flow-col grid-cols-2 gap-8">
|
|
<div>
|
|
<div>
|
|
<div className="px-4 h-16 sm:px-6 bg-gray-200 flex justify-between items-center rounded-t-lg">
|
|
<span className="text-gray-600 text-lg leading-6 font-medium">Edit Configuration</span>
|
|
|
|
<Menu as="div" className="relative inline-block text-left">
|
|
<div>
|
|
<Menu.Button className="inline-flex justify-center w-full rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-100 focus:ring-primary-500">
|
|
Versions
|
|
<ChevronDownIcon className="-mr-1 ml-2 h-5 w-5" aria-hidden="true" />
|
|
</Menu.Button>
|
|
</div>
|
|
|
|
<Transition
|
|
as={Fragment}
|
|
enter="transition ease-out duration-100"
|
|
enterFrom="transform opacity-0 scale-95"
|
|
enterTo="transform opacity-100 scale-100"
|
|
leave="transition ease-in duration-75"
|
|
leaveFrom="transform opacity-100 scale-100"
|
|
leaveTo="transform opacity-0 scale-95"
|
|
>
|
|
<Menu.Items className="z-10 origin-top-right absolute right-0 mt-2 w-56 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5 focus:outline-none">
|
|
<div className="py-1">
|
|
<Menu.Item>
|
|
{({ active }) => (
|
|
<a
|
|
href="#"
|
|
className={classNames(
|
|
active ? 'bg-gray-100 text-gray-900' : 'text-gray-700',
|
|
'block px-4 py-2 text-sm',
|
|
)}
|
|
>
|
|
Save Version
|
|
</a>
|
|
)}
|
|
</Menu.Item>
|
|
<Menu.Item>
|
|
{({ active }) => (
|
|
<a
|
|
href="#"
|
|
className={classNames(
|
|
active ? 'bg-gray-100 text-gray-900' : 'text-gray-700',
|
|
'block px-4 py-2 text-sm',
|
|
)}
|
|
>
|
|
View Version History
|
|
</a>
|
|
)}
|
|
</Menu.Item>
|
|
<Menu.Item>
|
|
{({ active }) => (
|
|
<a
|
|
href="#"
|
|
className={classNames(
|
|
active ? 'bg-gray-100 text-gray-900' : 'text-gray-700',
|
|
'block px-4 py-2 text-sm',
|
|
)}
|
|
>
|
|
Restore Current Version
|
|
</a>
|
|
)}
|
|
</Menu.Item>
|
|
</div>
|
|
</Menu.Items>
|
|
</Transition>
|
|
</Menu>
|
|
</div>
|
|
<div className="px-4 py-5 sm:p-6 border border-t-0 border-gray-200">
|
|
<Editor
|
|
value={code}
|
|
onValueChange={(value) => setCode(value)}
|
|
highlight={(value) => highlight(value, languages.js, 'yaml')}
|
|
preClassName="font-mono whitespace-normal font-light"
|
|
textareaClassName="font-mono overflow-auto font-light"
|
|
className="font-mono text-sm font-light"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div className="bg-gray-100 overflow-hidden rounded-lg">
|
|
<div className="px-4 h-16 sm:px-6 bg-gray-200 flex items-center">
|
|
<span className="text-gray-600 text-lg leading-6 font-medium">Current Configuration</span>
|
|
</div>
|
|
<div className="px-4 py-5 sm:p-6 overflow-x-auto">
|
|
<pre className="font-mono text-sm font-light">
|
|
{`luck: except
|
|
natural: still
|
|
near: though
|
|
search:
|
|
- feature
|
|
- - 1980732354.689713
|
|
- hour
|
|
- butter:
|
|
ordinary: 995901949.8974948
|
|
teeth: true
|
|
whole:
|
|
- -952367353
|
|
- - talk: -1773961379
|
|
temperature: false
|
|
oxygen: true
|
|
laugh:
|
|
flag:
|
|
in: 2144751662
|
|
hospital: -1544066384.1973226
|
|
law: congress
|
|
great: stomach`}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div className="flex justify-end mt-10">
|
|
<button
|
|
type="button"
|
|
className="mr-3 inline-flex items-center px-4 py-2 border border-gray-200 shadow-sm text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary-500"
|
|
>
|
|
Cancel
|
|
</button>
|
|
|
|
<button
|
|
type="button"
|
|
className="mr-3 inline-flex items-center px-4 py-2 shadow-sm text-sm font-medium rounded-md text-primary-700 bg-primary-100 hover:bg-primary-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary-500"
|
|
>
|
|
Verify
|
|
</button>
|
|
|
|
<button
|
|
type="button"
|
|
className="inline-flex items-center px-4 py-2 shadow-sm text-sm font-medium rounded-md text-white bg-primary-600 hover:bg-primary-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary-500"
|
|
>
|
|
Save changes
|
|
</button>
|
|
</div>
|
|
</>
|
|
);
|
|
};
|