// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: MIT-0 import { AggregateMetrics, CreateFormSchemaRequest, FormJSONSchema, FormSchema } from '@aws/api-typescript'; import { Alert, Button, FormField, Grid, Inline, Input, Modal, } from 'aws-northstar'; import Table, { Column as TableColumn } from 'aws-northstar/components/Table'; import React, { useCallback, useEffect, useState } from 'react'; import { API } from '../../api/client'; import { friendlyPercent, getMetricsForLastThreeMonths } from '../../api/metrics'; import { listAllPages } from '../../api/utils'; import { stringifySchema } from '../../utils/review-panel/schema-helper'; import { ModalButtons } from './modal-buttons'; import { SchemaEditor } from './schema-editor'; export interface DocumentSchemaProps { } const SCHEMA_TEMPLATE: FormJSONSchema = { description: '', typeOf: 'object', properties: { myFormField: { title: 'My Form Field', typeOf: 'string', order: 1, extractionMetadata: { formKey: 'Key for this form field as present in the document', tablePosition: 1, rowPosition: 1, columnPosition: 1, textractQuery: 'What is my form field?', }, }, }, }; /** * Default app content container for the "/" route…displays various metrics * about the processing of disclosure documents, along with a browseable view * of all documents that have been uploaded to the processing backend * @returns Component for creating editing and deleting document schemas. */ const DocumentSchemas: React.FC = () => { const [dataLoaded, setDataLoaded] = useState(false); const [selectedRow, setSelectedRow] = useState(); const [schemas, setSchemas] = useState([]); const [metrics, setMetrics] = useState(); const [isSchemaModalVisible, setIsSchemaModalVisible] = useState(false); const [isSubmittingSchema, setIsSubmittingSchema] = useState(false); const [isSubmittingAddSchema, setIsSubmittingAddSchema] = useState(false); const [isAddSchemaModalVisible, setIsAddSchemaModalVisible] = useState(false); let [newSchema, setNewSchema] = useState(''); let [addNewSchema, setAddNewSchema] = useState(''); let [formTitle, setFormTitle] = useState(''); let [formDesc, setFormDesc] = useState(''); let [errorMessage, setErrorMessage] = useState(); const fetchSchemas = useCallback(async () => { setDataLoaded(false); const [schemasResponse, metricsResponse] = await Promise.all([ listAllPages(API.listFormSchemas.bind(API), 'schemas'), getMetricsForLastThreeMonths(), ]); setSchemas(schemasResponse); setMetrics(metricsResponse); setDataLoaded(true); }, []); useEffect(() => { void (async () => { // Initial fetch await fetchSchemas(); })(); }, []); const actionGroup = (