Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 8x 8x 8x 8x 8x 8x 1x 2x 1x | /*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Button, Classes, Dialog, Intent } from '@blueprintjs/core';
import React, { useState } from 'react';
import AceEditor from 'react-ace';
import { validJson } from '../../utils';
import './spec-dialog.scss';
export interface SpecDialogProps {
onSubmit: (spec: JSON) => void;
onClose: () => void;
title: string;
initSpec?: any;
}
export const SpecDialog = React.memo(function SpecDialog(props: SpecDialogProps) {
const { onClose, onSubmit, title, initSpec } = props;
const [spec, setSpec] = useState(() => (initSpec ? JSON.stringify(initSpec, null, 2) : '{\n\n}'));
function postSpec(): void {
if (!validJson(spec)) return;
onSubmit(JSON.parse(spec));
onClose();
}
return (
<Dialog
className="spec-dialog"
isOpen
onClose={onClose}
title={title}
canOutsideClickClose={false}
>
<AceEditor
mode="hjson"
theme="solarized_dark"
className="spec-dialog-textarea"
onChange={setSpec}
fontSize={12}
showPrintMargin={false}
showGutter
highlightActiveLine
value={spec}
width="100%"
setOptions={{
showLineNumbers: true,
tabSize: 2,
}}
style={{}}
/>
<div className={Classes.DIALOG_FOOTER}>
<div className={Classes.DIALOG_FOOTER_ACTIONS}>
<Button text="Close" onClick={onClose} />
<Button
text="Submit"
intent={Intent.PRIMARY}
onClick={postSpec}
disabled={!validJson(spec)}
/>
</div>
</div>
</Dialog>
);
});
|