in src/deequ-constraints/src/components/Suggestions.js [56:190]
export default () => {
const [dataQualitySuggestions, setDataQualitySuggestions] = useState([]);
const [filteredName, setFilteredName] = useState('')
const [formData, setFormData] = useState(initialFormState);
useEffect(() => {
const fetchDataQualitySuggestions = async () => {
const result = await API.graphql(graphqlOperation(listDataQualitySuggestions));
setDataQualitySuggestions(
result.data.listDataQualitySuggestions.items.sort((a, b) => {
if (a.updatedAt > b.updatedAt) return -1;
else return 1;
})
);
};
fetchDataQualitySuggestions();
}, []);
async function createDataQualitySuggestion() {
if (!checkProperties(formData)) {
window.alert(`All fields are required`)
return
}
formData['tableHashKey'] = formData['database'].concat('-', formData['table']);
const { ['database']: db, ['table']: tb, ...newInput } = formData;
const apiData = await API.graphql({ query: createDataQualitySuggestionMutation, variables: { input: newInput } });
setDataQualitySuggestions([ ...dataQualitySuggestions, apiData.data.createDataQualitySuggestion ]);
setFormData(initialFormState);
}
// exclude column list from filter
const excludeColumns = ["id"];
// filter records by search text
const filterData = (value) => {
const lowercasedValue = value.toLowerCase().trim();
if (lowercasedValue === '') return dataQualitySuggestions;
else {
const filteredData = dataQualitySuggestions.filter(item => {
return Object.keys(item).some(key =>
excludeColumns.includes(key) ? false : item[key].toString().toLowerCase().includes(lowercasedValue)
);
});
return filteredData;
}
}
const dataQualitySuggestionsToShow = filterData(filteredName)
const handleFilteredChange = (event) => {
setFilteredName(event.target.value)
}
return (
<Container>
<Title>Filter:</Title> <input placeholder="E.g. mydb-table1 OR my_column" size="50" value={filteredName} onChange={handleFilteredChange}/>
<Divider />
<Title>Add a new suggestion:</Title>
<div> <Label>Column:</Label> <input
onChange={e => setFormData({ ...formData, 'column': e.target.value})}
placeholder="Table Column"
value={formData.column} size="50"
/> </div>
<div> <Label>Constraint:</Label> <input
onChange={e => setFormData({ ...formData, 'constraint': e.target.value})}
placeholder="Constraint"
value={formData.constraint} size="50"
/> </div>
<div> <Label>Constraint Code:</Label> <input
onChange={e => setFormData({ ...formData, 'constraintCode': e.target.value})}
placeholder="Constraint Code"
value={formData.constraintCode} size="50"
/> </div>
<div> <Label>Database:</Label> <input
onChange={e => setFormData({ ...formData, 'database': e.target.value})}
placeholder="Glue Database"
value={formData.database} size="50"
/> </div>
<div> <Label>Table:</Label> <input
onChange={e => setFormData({ ...formData, 'table': e.target.value})}
placeholder="Glue Table"
value={formData.table} size="50"
/> </div>
<div> <Label>Enable:</Label>
<RadioLabel>Y</RadioLabel>
<input
type="radio" name="enable" value="Y" checked={true}
onChange={e => setFormData({ ...formData, 'enable': e.target.value})}
/>
<RadioLabel>N</RadioLabel>
<input
type="radio" name="enable" value="N"
onChange={e => setFormData({ ...formData, 'enable': e.target.value})}
/> </div>
<div> <SubmitButton onClick={createDataQualitySuggestion}>Create suggestion</SubmitButton> </div>
<Divider />
{dataQualitySuggestionsToShow.map(dataQualitySuggestion => (
<Suggestion
key={dataQualitySuggestion.id}
{...dataQualitySuggestion}
toggleEnable={async () => {
var enable = 'Y';
if (dataQualitySuggestion.enable === 'Y') enable='N';
const changedSuggestion = {...dataQualitySuggestion, 'enable': enable};
const {['createdAt']: c, ['updatedAt']: u, ...inputData} = changedSuggestion;
const result = await API.graphql(
graphqlOperation(updateDataQualitySuggestion, {
input: {
...inputData
}
})
);
setDataQualitySuggestions(
dataQualitySuggestionsToShow.map(n => {
return n.id === dataQualitySuggestion.id ? result.data.updateDataQualitySuggestion : n;
})
);
}}
onDelete={async () => {
await API.graphql(
graphqlOperation(deleteDataQualitySuggestion, {
input: {
id: dataQualitySuggestion.id
}
})
);
setDataQualitySuggestions(dataQualitySuggestionsToShow.filter(n => n.id !== dataQualitySuggestion.id));
}}
/>
))}
</Container>
);
};