UNPKG

@selfcommunity/react-ui

Version:

React UI Components to integrate a Community created with SelfCommunity Platform.

107 lines (106 loc) • 8.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const jsx_runtime_1 = require("react/jsx-runtime"); const styles_1 = require("@mui/material/styles"); const material_1 = require("@mui/material"); const Box_1 = tslib_1.__importDefault(require("@mui/material/Box")); const system_1 = require("@mui/system"); const classnames_1 = tslib_1.__importDefault(require("classnames")); const react_1 = require("react"); const react_intl_1 = require("react-intl"); const constants_1 = require("../../constants"); const ProgressBar_1 = tslib_1.__importDefault(require("../../../../shared/ProgressBar")); const types_1 = require("@selfcommunity/types"); const react_lottie_player_1 = require("@lottiefiles/react-lottie-player"); const categoryA_1 = tslib_1.__importDefault(require("../../../../assets/onBoarding/categoryA")); const categoryB_1 = tslib_1.__importDefault(require("../../../../assets/onBoarding/categoryB")); const category_progress_json_1 = tslib_1.__importDefault(require("../../../../assets/onBoarding/progress/category_progress.json")); const classes = { root: `${constants_1.PREFIX}-category-root`, title: `${constants_1.PREFIX}-category-title`, summary: `${constants_1.PREFIX}-category-summary`, image: `${constants_1.PREFIX}-category-image`, action: `${constants_1.PREFIX}-category-action`, button: `${constants_1.PREFIX}-category-button`, success: `${constants_1.PREFIX}-success`, progress: `${constants_1.PREFIX}-category-progress`, animationProgress: `${constants_1.PREFIX}-category-animation-progress` }; function CircledLetter({ letter, statement }) { return ((0, jsx_runtime_1.jsxs)(Box_1.default, Object.assign({ component: "span", sx: { display: 'flex', alignItems: 'center', gap: 1, mb: 1.5 } }, { children: [(0, jsx_runtime_1.jsx)(Box_1.default, Object.assign({ component: "span", sx: { width: 22, height: 22, borderRadius: '50%', backgroundColor: 'black', display: 'flex', justifyContent: 'center', alignItems: 'center' } }, { children: (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ component: "span", sx: { color: 'white', textTransform: 'uppercase', fontWeight: 'bold' } }, { children: letter })) })), statement] }))); } const Root = (0, styles_1.styled)(Box_1.default, { name: constants_1.PREFIX, slot: 'CategoryRoot' })(() => ({})); function Category(inProps) { // PROPS const props = (0, system_1.useThemeProps)({ props: inProps, name: constants_1.PREFIX }); const { className, step, handleCategoriesCreation } = props; // STATE const [hover, setHover] = (0, react_1.useState)(false); const [progress, setProgress] = (0, react_1.useState)(step.completion_percentage); (0, react_1.useEffect)(() => { if (step.status === types_1.SCOnBoardingStepStatusType.IN_PROGRESS) { const intervalId = setInterval(() => { setProgress((prev) => { if (prev < step.completion_percentage) { return prev + 1; } else { clearInterval(intervalId); return prev; } }); }, 1000); return () => clearInterval(intervalId); } }, [step.status, step.completion_percentage]); const getLoadingMessage = (0, react_1.useMemo)(() => { let message; if (progress <= 10) { message = ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.onBoardingWidget.step.categories.loading.a", defaultMessage: "ui.onBoardingWidget.step.categories.loading.a" })); } else if (progress <= 20) { message = ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.onBoardingWidget.step.categories.loading.b", defaultMessage: "ui.onBoardingWidget.step.categories.loading.b" })); } else if (progress <= 40) { message = ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.onBoardingWidget.step.categories.loading.c", defaultMessage: "ui.onBoardingWidget.step.categories.loading.c" })); } else if (progress <= 60) { message = ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.onBoardingWidget.step.categories.loading.d", defaultMessage: "ui.onBoardingWidget.step.categories.loading.d" })); } else { message = ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.onBoardingWidget.step.categories.loading.e", defaultMessage: "ui.onBoardingWidget.step.categories.loading.e" })); } return message; }, [progress]); return ((0, jsx_runtime_1.jsxs)(Root, Object.assign({ className: (0, classnames_1.default)(classes.root, className) }, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "h4", className: classes.title }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.onBoardingWidget.categories", defaultMessage: "ui.onBoardingWidget.categories" }) })), (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ className: classes.summary }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.onBoardingWidget.step.category.summary", defaultMessage: "ui.onBoardingWidget.step.category.summary" }) })), (step === null || step === void 0 ? void 0 : step.status) !== types_1.SCOnBoardingStepStatusType.IN_PROGRESS && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.onBoardingWidget.step.category.generation.steps", defaultMessage: "ui.onBoardingWidget.step.category.generation.steps", values: { // eslint-disable-next-line @typescript-eslint/ban-ts-ignore // @ts-ignore iconA: (...chunks) => (0, jsx_runtime_1.jsx)(CircledLetter, { letter: "a", statement: chunks }), // eslint-disable-next-line @typescript-eslint/ban-ts-ignore // @ts-ignore iconB: (...chunks) => (0, jsx_runtime_1.jsx)(CircledLetter, { letter: "b", statement: chunks }), // eslint-disable-next-line @typescript-eslint/ban-ts-ignore // @ts-ignore iconC: (...chunks) => (0, jsx_runtime_1.jsx)(CircledLetter, { letter: "c", statement: chunks }) } }) }), (0, jsx_runtime_1.jsx)(material_1.CardMedia, { className: classes.image, component: "img", src: categoryA_1.default }), (0, jsx_runtime_1.jsx)(material_1.CardMedia, { className: classes.image, component: "img", src: categoryB_1.default })] })), (0, jsx_runtime_1.jsx)(Box_1.default, Object.assign({ component: "span", className: classes.action }, { children: (step === null || step === void 0 ? void 0 : step.status) === types_1.SCOnBoardingStepStatusType.COMPLETED ? ((0, jsx_runtime_1.jsx)(material_1.Alert, Object.assign({ severity: "success" }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.onBoardingWidget.step.categories.success", defaultMessage: "ui.onBoardingWidget.step.categories.success" }) }))) : (step === null || step === void 0 ? void 0 : step.status) === types_1.SCOnBoardingStepStatusType.IN_PROGRESS ? ((0, jsx_runtime_1.jsxs)(Box_1.default, Object.assign({ className: classes.progress }, { children: [(0, jsx_runtime_1.jsx)(react_lottie_player_1.Player, { autoplay: true, loop: true, src: category_progress_json_1.default, className: classes.animationProgress, controls: false }), (0, jsx_runtime_1.jsx)(ProgressBar_1.default, { value: progress, hideBar: true, loadingMessage: (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "h4" }, { children: getLoadingMessage })) })] }))) : ((0, jsx_runtime_1.jsx)(material_1.Button, Object.assign({ size: "small", variant: "contained", color: "secondary", onClick: handleCategoriesCreation, endIcon: (0, jsx_runtime_1.jsx)(material_1.Icon, { children: hover ? 'ai_stars' : 'magic_wand' }), onMouseEnter: () => setHover(true), onMouseLeave: () => setHover(false) }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { defaultMessage: "ui.onBoardingWidget.step.category.button", id: "ui.onBoardingWidget.step.category.button" }) }))) }))] }))); } exports.default = Category;