@tomino/dynamic-form-semantic-ui
Version:
Semantic UI form renderer based on dynamic form generation
95 lines • 3.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const React = tslib_1.__importStar(require("react"));
const react_apollo_1 = require("react-apollo");
const graphql_tag_1 = tslib_1.__importDefault(require("graphql-tag"));
const common_1 = require("../common");
const mobx_react_1 = require("mobx-react");
const context_1 = require("../context");
const helpers_1 = require("../helpers");
function parseParameter(value, type) {
switch (type) {
case 'number':
return parseFloat(value);
case 'boolean':
return value === 'true' ? true : false;
}
return value;
}
exports.parseParameter = parseParameter;
function parseVariables(props, context) {
const { owner, formElement: { props: { variables, boundVariables, onQuery } } } = props;
let currentVariables = onQuery ? helpers_1.simpleHandle(props, onQuery, owner, context) : {};
if (variables) {
for (let v of variables) {
currentVariables[v.name] = parseParameter(v.value, v.type);
}
}
if (boundVariables) {
for (let v of boundVariables) {
currentVariables[v.name] = owner.getValue(v.source);
}
}
return currentVariables;
}
exports.parseVariables = parseVariables;
exports.ApolloQuery = props => {
const [error, setError] = React.useState(null);
const context = React.useContext(context_1.Context);
const { owner, formElement: { props: { query, loadingText, target, onError, onResult, propTarget } } } = props;
if (!query) {
return React.createElement("div", null, "Please specify the query");
}
let parsedQuery;
try {
parsedQuery = graphql_tag_1.default([query]);
}
catch (ex) {
return React.createElement("pre", null,
"Query Error: ",
ex.message);
}
let currentVariables = parseVariables(props, context);
return (React.createElement(react_apollo_1.Query, { query: parsedQuery, variables: currentVariables, onCompleted: (data) => {
if (target) {
owner.setValue(target, data[Object.getOwnPropertyNames(data)[0]]);
}
if (onResult) {
helpers_1.simpleHandle(props, onResult, context, data);
}
}, onError: (data) => {
console.log(data);
try {
if (onError) {
helpers_1.simpleHandle(props, onError, context, data);
}
if (error) {
setError(null);
}
setError(data.message);
}
catch (ex) {
setError(ex);
}
} }, ({ loading, error, data }) => {
if (error) {
return React.createElement("pre", null,
"Query Error: ",
JSON.stringify(error, null, 2));
}
if (loading)
return loadingText;
if (error)
return `Error! ${error.message}`;
let dataProps = { ...props };
if (propTarget) {
dataProps.dataProps = { [propTarget]: data[Object.getOwnPropertyNames(data)[0]] };
}
return common_1.createComponents(dataProps);
}));
};
exports.ApolloQueryView = {
Component: mobx_react_1.observer(exports.ApolloQuery)
};
//# sourceMappingURL=apollo_query_view.js.map