@novin-dev/formalite
Version:
Generate MUI form with few line of code
80 lines (77 loc) • 3.67 kB
JavaScript
import { __rest, __assign } from 'tslib';
import React, { useState, useCallback, useEffect } from 'react';
import compare from 'react-fast-compare';
import { SelectStateEnum } from './SelectView.type.js';
import { Grid } from '@mui/material';
import { baseMemo } from '../Bases/functions/memo.js';
import { TextViewSkeleton } from '../Bases/SkeletonBase.js';
import SelectViewAllViews from './SelectViewAllViews.js';
import { FetchingDataEnum } from '../../../base/model.js';
var SelectView = function (props) {
var allData = props.allData, name = props.name, formik = props.formik, loading = props.loading, validationSchema = props.validationSchema, translator = props.translator;
var _a = allData.inputProps, helperText = _a.helperText, inputProps = __rest(_a, ["helperText"]);
var _b = useState({
status: SelectStateEnum.PENDING,
data: {},
}), dataStatus = _b[0], setDataStatus = _b[1];
var loadFunction = useCallback(function () {
if (allData.dataFetching.type === FetchingDataEnum.AUTOMATIC) {
setDataStatus({ status: SelectStateEnum.PENDING, data: {} });
var funcResult = allData.dataFetching.options();
funcResult
.then(function (res) {
setDataStatus({
status: SelectStateEnum.READY,
data: res,
});
})
.catch(function (e) {
setDataStatus({
status: SelectStateEnum.REJECTED,
data: {},
error: e,
});
});
}
}, [allData.dataFetching]);
useEffect(function () {
if (allData.dataFetching.type === FetchingDataEnum.AUTOMATIC) {
loadFunction();
}
else if (allData.dataFetching.error ||
(!allData.dataFetching.loading && !allData.dataFetching.data)) {
setDataStatus({
status: SelectStateEnum.REJECTED,
data: {},
});
}
else if (allData.dataFetching.loading) {
setDataStatus({
status: SelectStateEnum.PENDING,
data: {},
});
}
else if (allData.dataFetching.data) {
setDataStatus({
status: SelectStateEnum.READY,
data: allData.dataFetching.data,
});
}
}, [allData.dataFetching]);
if (loading) {
return (React.createElement(Grid, __assign({ item: true }, allData.layoutProps),
React.createElement(TextViewSkeleton, { hasHelper: !!helperText })));
}
return (React.createElement(Grid, __assign({ item: true }, allData.layoutProps, { style: { display: "flex" }, container: true, direction: "column" }),
React.createElement(SelectViewAllViews, __assign({ emptyItemLabel: allData.emptyItemLabel, formik: formik, validationSchema: validationSchema, translator: translator, name: String(name), dataStatus: dataStatus, allInputProps: allData.inputProps, loadFunction: allData.dataFetching.type === FetchingDataEnum.AUTOMATIC
? loadFunction
: allData.dataFetching.onRetry }, inputProps))));
};
var SelectView$1 = React.memo(SelectView, function (prevProps, nextProps) {
var prevDataFetching = prevProps.allData.dataFetching;
var nextDataFetching = nextProps.allData.dataFetching;
return (baseMemo(prevProps, nextProps) &&
compare(prevDataFetching, nextDataFetching));
});
export { SelectView$1 as default };
//# sourceMappingURL=SelectView.js.map