From 65fa34dff415cf377aa2f1b99936b93f4238a00a Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Thu, 20 Feb 2020 14:13:54 +0300 Subject: [PATCH] Web: People: added change user status dialog --- .../dialogs/ChangeUserStatusDialog/i18n.js | 54 +++++++++ .../dialogs/ChangeUserStatusDialog/index.js | 113 ++++++++++++++++++ .../locales/en/translation.json | 13 ++ .../locales/ru/translation.json | 13 ++ .../Client/src/components/dialogs/index.js | 4 +- .../pages/Home/Section/Header/index.js | 35 +++--- 6 files changed, 214 insertions(+), 18 deletions(-) create mode 100644 products/ASC.People/Client/src/components/dialogs/ChangeUserStatusDialog/i18n.js create mode 100644 products/ASC.People/Client/src/components/dialogs/ChangeUserStatusDialog/index.js create mode 100644 products/ASC.People/Client/src/components/dialogs/ChangeUserStatusDialog/locales/en/translation.json create mode 100644 products/ASC.People/Client/src/components/dialogs/ChangeUserStatusDialog/locales/ru/translation.json diff --git a/products/ASC.People/Client/src/components/dialogs/ChangeUserStatusDialog/i18n.js b/products/ASC.People/Client/src/components/dialogs/ChangeUserStatusDialog/i18n.js new file mode 100644 index 0000000000..4faea20972 --- /dev/null +++ b/products/ASC.People/Client/src/components/dialogs/ChangeUserStatusDialog/i18n.js @@ -0,0 +1,54 @@ +import i18n from "i18next"; +import Backend from "i18next-xhr-backend"; +import config from "../../../../package.json"; +import { constants } from 'asc-web-common'; +const { LANGUAGE } = constants; + +const newInstance = i18n.createInstance(); + +if (process.env.NODE_ENV === "production") { + newInstance + .use(Backend) + .init({ + lng: localStorage.getItem(LANGUAGE) || 'en', + fallbackLng: "en", + + interpolation: { + escapeValue: false, // not needed for react as it escapes by default + }, + + react: { + useSuspense: true + }, + backend: { + loadPath: `${config.homepage}/locales/DeleteProfileEverDialog/{{lng}}/{{ns}}.json` + } + }); +} else if (process.env.NODE_ENV === "development") { + + const resources = { + en: { + translation: require("./locales/en/translation.json") + }, + ru: { + translation: require("./locales/ru/translation.json") + }, + }; + + newInstance.init({ + resources: resources, + lng: localStorage.getItem(LANGUAGE) || 'en', + fallbackLng: "en", + debug: true, + + interpolation: { + escapeValue: false, // not needed for react as it escapes by default + }, + + react: { + useSuspense: true + } + }); +} + +export default newInstance; \ No newline at end of file diff --git a/products/ASC.People/Client/src/components/dialogs/ChangeUserStatusDialog/index.js b/products/ASC.People/Client/src/components/dialogs/ChangeUserStatusDialog/index.js new file mode 100644 index 0000000000..f5fc5a880a --- /dev/null +++ b/products/ASC.People/Client/src/components/dialogs/ChangeUserStatusDialog/index.js @@ -0,0 +1,113 @@ +import React, { useCallback, useState } from "react"; +import { connect } from "react-redux"; +import { withRouter } from "react-router"; +import PropTypes from "prop-types"; +import { + toastr, + ModalDialog, + Button, + Text, + ToggleContent +} from "asc-web-components"; +import { withTranslation } from "react-i18next"; +import i18n from "./i18n"; +import { utils } from "asc-web-common"; +import ModalDialogContainer from "../ModalDialogContainer"; +import { updateUserStatus } from "../../../store/people/actions"; + +const { changeLanguage } = utils; + +const ChangeUserStatusDialogComponent = props => { + const { t, onClose, visible, users, userStatus, updateUserStatus } = props; + const usersId = []; + users.map(item => usersId.push(item.id)); + + const [isRequestRunning, setIsRequestRunning] = useState(false); + + changeLanguage(i18n); + + const onChangeUserStatus = useCallback(() => { + setIsRequestRunning(true); + updateUserStatus(userStatus, usersId, true) + .then(() => toastr.success(t("SuccessChangeUserStatus"))) + .catch(error => toastr.error(error)) + .finally(() => { + setIsRequestRunning(false); + onClose(); + }); + }, [t, usersId, userStatus, updateUserStatus, onClose]); + + const statusTranslation = + userStatus === 1 + ? t("ChangeUsersActiveStatus") + : t("ChangeUsersDisableStatus"); + const userStatusTranslation = + userStatus === 1 + ? t("ChangeUsersDisableUserStatus") + : t("ChangeUsersActiveUserStatus"); + + return ( + + + + {t("ChangeUserStatusDialog", { + status: statusTranslation, + userStatus: userStatusTranslation + })} + + {t("ChangeUserStatusDialogMessage")} + + {users.map((item, index) => ( + {item.displayName} + ))} + + + } + footerContent={ + <> +