@adaptabletools/adaptable
Version:
Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements
91 lines (90 loc) • 4.2 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import * as React from 'react';
import { useState } from 'react';
import { useDispatch } from 'react-redux';
import * as NamedQueryRedux from '../../Redux/ActionsReducers/NamedQueryRedux';
import { useAdaptable } from '../AdaptableContext';
import { Card } from '../../components/Card';
import { ButtonEdit } from '../Components/Buttons/ButtonEdit';
import { NamedQueryContext, } from '../../components/ExpressionEditor/NamedQueryContext';
import { OnePageWizard, useOnePageWizardContext } from './OnePageWizards';
import { kebabCase } from '../../Utilities/Extensions/StringExtensions';
import { Box } from '../../components/Flex';
import { twMerge } from '../../twMerge';
export const SummaryTag = (props) => (_jsx(Box, { ...props }));
export const SummaryText = (props) => (_jsx(Box, { ...props, className: twMerge('twa:text-2 twa:mb-3', props.className) }));
export const FormDescriptionText = (props) => _jsx(Box, { ...props, className: twMerge('twa:text-2 twa:mt-1', props.className) });
export const OnePageAdaptableWizardContext = React.createContext({
data: null,
sections: [],
moduleInfo: null,
api: null,
namedQuery: false,
});
export function useOnePageAdaptableWizardContext() {
return React.useContext(OnePageAdaptableWizardContext);
}
export const OnePageAdaptableWizard = (props) => {
const { api } = useAdaptable();
const dispatch = useDispatch();
const saveNamedQuery = React.useCallback((namedQuery) => dispatch(NamedQueryRedux.NamedQueryAdd(namedQuery)), []);
const [namedQuery, setNamedQuery] = useState(false);
const name = props.moduleInfo.FriendlyName
? `${kebabCase(props.moduleInfo.FriendlyName)}-wizard`
: '';
const extraContext = {
data: props.data,
api,
namedQuery,
moduleInfo: props.moduleInfo,
sections: props.sections,
};
const sections = props.sections.map((section) => {
if (section === '-') {
return '-';
}
const isValid = typeof section.isValid === 'function'
? (data, innerContext) => {
return section.isValid(data, api, {
...innerContext,
...extraContext,
});
}
: void 0;
const isVisible = typeof section.isVisible === 'function'
? (data, innerContext) => {
return section.isVisible(data, api, {
...innerContext,
...extraContext,
});
}
: void 0;
return {
...section,
isValid,
isVisible,
};
});
const handleClickFinish = () => {
if (namedQuery && namedQuery.Name) {
saveNamedQuery(namedQuery);
}
props.onFinish?.(props.data);
};
return (_jsx(OnePageAdaptableWizardContext.Provider, { value: extraContext, children: _jsx(NamedQueryContext.Provider, { value: { namedQuery, setNamedQuery }, children: _jsx(OnePageWizard, { ...props, name: name, sections: sections, onFinish: handleClickFinish, moduleName: props.moduleName ?? props.moduleInfo.FriendlyName }) }) }));
};
export const OnePageWizardSummary = () => {
const { data, api } = useOnePageAdaptableWizardContext();
const { sections: visibleSections, setCurrentSection } = useOnePageWizardContext();
return (_jsx(Box, { className: "ab-OnePageWizardSummary twa:flex twa:flex-col twa:gap-3", children: visibleSections
.map((section, index) => {
if (section === '-') {
return null;
}
if (!section.renderSummary) {
return null;
}
return (_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { className: "twa:w-full", children: [_jsx(Box, { className: "twa:font-medium twa:flex-1", children: section.title }), _jsx(ButtonEdit, { onClick: () => setCurrentSection(index) })] }), _jsx(Card.Body, { className: "twa:p-1", children: section.renderSummary?.(data, api) })] }, `${section.title}-${index}`));
})
.filter(Boolean) }));
};