1
0
mirror of synced 2025-12-20 10:32:35 -05:00
Files
airbyte/docs/integrations/sources/e2e-test.js

88 lines
2.7 KiB
JavaScript

import React, {useState} from 'react';
import CodeBlock from '@theme/CodeBlock';
function simpleProperty(name, type) {
return [name, { type }];
}
function dateProperty(name, format, airbyteType) {
const definition = {
type: ['null', 'string'],
format,
};
if (airbyteType !== null) {
definition.airbyte_type = airbyteType;
}
return [name, definition];
}
const allSupportedColumnTypePropertyGenerators = [
(i) => simpleProperty(`string_${i}`, 'string'),
(i) => simpleProperty(`boolean_${i}`, 'boolean'),
(i) => dateProperty(`date_${i}`, 'date', null),
(i) => dateProperty(`timestamp_wo_tz_${i}`, 'date-time', 'timestamp_without_timezone'),
(i) => dateProperty(`timestamp_w_tz_${i}`, 'date-time', 'timestamp_with_timezone'),
(i) => dateProperty(`time_wo_tz_${i}`, 'time', 'time_without_timezone'),
(i) => dateProperty(`time_w_tz_${i}`, 'time', 'time_with_timezone'),
(i) => simpleProperty(`integer_${i}`, 'integer'),
(i) => simpleProperty(`number_${i}`, 'number'),
(i) => simpleProperty(`array_${i}`, 'array'),
(i) => simpleProperty(`object_${i}`, 'object'),
];
function generateWideSchema(columns) {
const fullSchema = { type: 'object' };
const properties = {};
// Special case id and updated_at column
const id = simpleProperty('id', 'integer');
properties[id[0]] = id[1];
properties['updated_at'] = { type: 'string', format: 'date-time', airbyte_type: 'timestamp_with_timezone' };
let columnCount = 2;
let propertyGeneratorIndex = 0;
while (columnCount < columns) {
const propertyInfo = allSupportedColumnTypePropertyGenerators[propertyGeneratorIndex](columnCount);
properties[propertyInfo[0]] = propertyInfo[1];
propertyGeneratorIndex += 1;
if (propertyGeneratorIndex === allSupportedColumnTypePropertyGenerators.length) {
propertyGeneratorIndex = 0;
}
columnCount += 1;
}
fullSchema.properties = properties;
return fullSchema;
}
export const SchemaGenerator = () => {
const [generatedSchema, updateGeneratedSchema] = useState({
'schema' : JSON.stringify(generateWideSchema(10))
})
function updateSchema(event) {
const columns = parseInt(document.getElementById("schema-generator-column-count").value)
const schema = JSON.stringify(generateWideSchema(columns))
updateGeneratedSchema({'schema': schema})
}
return (
<div>
<label for="schema-generator-column-count">Desired Number of Columns:</label>
<input type="number" id="schema-generator-column-count" name="schema-generator-column-count" onChange={updateSchema}/>
<p>Generated Schema:</p>
<CodeBlock id={"generated_e2e_test_schema"} language={"javascript"}>
{ generatedSchema['schema'] }
</CodeBlock>
</div>
)
}