From 19acdd4a6ed7e04a8b09dd71eefd02ea7e76c4a6 Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Tue, 12 Nov 2019 14:55:22 +0300 Subject: [PATCH 01/55] web: Common: Init commit of new js library for common code of any App in AppServer --- .gitignore | 1 + all-clients.code-workspace | 4 + build/build.bat | 7 + build/rebuild.bat | 9 +- config/kafka.json | 2 +- products/ASC.People/Client/package.json | 1 + products/ASC.People/Client/yarn.lock | 9 +- web/ASC.Web.Client/package.json | 1 + web/ASC.Web.Client/yarn.lock | 9 +- web/ASC.Web.Common/.editorconfig | 9 + web/ASC.Web.Common/.eslintignore | 1 + web/ASC.Web.Common/.eslintrc.js | 13 + web/ASC.Web.Common/.gitignore | 14 + web/ASC.Web.Common/.storybook/.babelrc | 7 + web/ASC.Web.Common/.storybook/addons.js | 9 + web/ASC.Web.Common/.storybook/config.js | 52 + .../.storybook/decorators/section/index.js | 12 + .../.storybook/manager-head.html | 1 + .../.storybook/preview-head.html | 13 + web/ASC.Web.Common/.storybook/styles.scss | 8 + .../.storybook/webpack.config.js | 102 ++ web/ASC.Web.Common/README.md | 11 + web/ASC.Web.Common/babel.config.js | 21 + web/ASC.Web.Common/config/setupTest.js | 4 + web/ASC.Web.Common/dist/asc-web-common.esm.js | 1325 ++++++++++++++++ .../dist/asc-web-common.esm.js.map | 1 + web/ASC.Web.Common/dist/asc-web-common.js | 1374 +++++++++++++++++ web/ASC.Web.Common/dist/asc-web-common.js.map | 1 + web/ASC.Web.Common/jest.config.js | 19 + web/ASC.Web.Common/package.json | 109 ++ .../public/empty_screen_filter.png | Bin 0 -> 7586 bytes web/ASC.Web.Common/public/favicon.ico | Bin 0 -> 8348 bytes web/ASC.Web.Common/public/index.html | 38 + .../public/light_small_general.svg | 34 + web/ASC.Web.Common/public/manifest.json | 15 + .../public/modules/community_logolarge.png | Bin 0 -> 9778 bytes .../public/modules/crm_logolarge.png | Bin 0 -> 7910 bytes .../public/modules/documents240.png | Bin 0 -> 51466 bytes .../public/modules/mail_logolarge.png | Bin 0 -> 10235 bytes .../public/modules/people_logolarge.png | Bin 0 -> 9300 bytes .../public/modules/projects_logolarge.png | Bin 0 -> 9797 bytes web/ASC.Web.Common/rollup.config.js | 124 ++ .../scripts/get-babel-preset.js | 134 ++ .../scripts/setup-test-framework.js | 6 + web/ASC.Web.Common/src/constants/index.js | 55 + web/ASC.Web.Common/src/history/index.js | 3 + web/ASC.Web.Common/src/index.js | 2 + web/ASC.Web.Common/src/store/auth/actions.js | 89 ++ web/ASC.Web.Common/src/store/auth/index.js | 5 + web/ASC.Web.Common/src/store/auth/reducers.js | 73 + .../src/store/auth/selectors.js | 12 + .../src/store/services/api/client.js | 104 ++ .../src/store/services/api/index.js | 4 + .../src/store/services/api/people/filter.js | 142 ++ .../src/store/services/api/people/index.js | 16 + web/ASC.Web.Common/src/utils/converter.js | 14 + .../test/replace-module-paths.js | 17 + web/ASC.Web.Common/test/setup-tests.js | 76 + .../test/transform-babel-jest.js | 15 + web/ASC.Web.Common/test/transform-file.js | 1 + 60 files changed, 4124 insertions(+), 4 deletions(-) create mode 100644 web/ASC.Web.Common/.editorconfig create mode 100644 web/ASC.Web.Common/.eslintignore create mode 100644 web/ASC.Web.Common/.eslintrc.js create mode 100644 web/ASC.Web.Common/.gitignore create mode 100644 web/ASC.Web.Common/.storybook/.babelrc create mode 100644 web/ASC.Web.Common/.storybook/addons.js create mode 100644 web/ASC.Web.Common/.storybook/config.js create mode 100644 web/ASC.Web.Common/.storybook/decorators/section/index.js create mode 100644 web/ASC.Web.Common/.storybook/manager-head.html create mode 100644 web/ASC.Web.Common/.storybook/preview-head.html create mode 100644 web/ASC.Web.Common/.storybook/styles.scss create mode 100644 web/ASC.Web.Common/.storybook/webpack.config.js create mode 100644 web/ASC.Web.Common/README.md create mode 100644 web/ASC.Web.Common/babel.config.js create mode 100644 web/ASC.Web.Common/config/setupTest.js create mode 100644 web/ASC.Web.Common/dist/asc-web-common.esm.js create mode 100644 web/ASC.Web.Common/dist/asc-web-common.esm.js.map create mode 100644 web/ASC.Web.Common/dist/asc-web-common.js create mode 100644 web/ASC.Web.Common/dist/asc-web-common.js.map create mode 100644 web/ASC.Web.Common/jest.config.js create mode 100644 web/ASC.Web.Common/package.json create mode 100644 web/ASC.Web.Common/public/empty_screen_filter.png create mode 100644 web/ASC.Web.Common/public/favicon.ico create mode 100644 web/ASC.Web.Common/public/index.html create mode 100644 web/ASC.Web.Common/public/light_small_general.svg create mode 100644 web/ASC.Web.Common/public/manifest.json create mode 100644 web/ASC.Web.Common/public/modules/community_logolarge.png create mode 100644 web/ASC.Web.Common/public/modules/crm_logolarge.png create mode 100644 web/ASC.Web.Common/public/modules/documents240.png create mode 100644 web/ASC.Web.Common/public/modules/mail_logolarge.png create mode 100644 web/ASC.Web.Common/public/modules/people_logolarge.png create mode 100644 web/ASC.Web.Common/public/modules/projects_logolarge.png create mode 100644 web/ASC.Web.Common/rollup.config.js create mode 100644 web/ASC.Web.Common/scripts/get-babel-preset.js create mode 100644 web/ASC.Web.Common/scripts/setup-test-framework.js create mode 100644 web/ASC.Web.Common/src/constants/index.js create mode 100644 web/ASC.Web.Common/src/history/index.js create mode 100644 web/ASC.Web.Common/src/index.js create mode 100644 web/ASC.Web.Common/src/store/auth/actions.js create mode 100644 web/ASC.Web.Common/src/store/auth/index.js create mode 100644 web/ASC.Web.Common/src/store/auth/reducers.js create mode 100644 web/ASC.Web.Common/src/store/auth/selectors.js create mode 100644 web/ASC.Web.Common/src/store/services/api/client.js create mode 100644 web/ASC.Web.Common/src/store/services/api/index.js create mode 100644 web/ASC.Web.Common/src/store/services/api/people/filter.js create mode 100644 web/ASC.Web.Common/src/store/services/api/people/index.js create mode 100644 web/ASC.Web.Common/src/utils/converter.js create mode 100644 web/ASC.Web.Common/test/replace-module-paths.js create mode 100644 web/ASC.Web.Common/test/setup-tests.js create mode 100644 web/ASC.Web.Common/test/transform-babel-jest.js create mode 100644 web/ASC.Web.Common/test/transform-file.js diff --git a/.gitignore b/.gitignore index f7c584e23c..c2f4e1bbb2 100644 --- a/.gitignore +++ b/.gitignore @@ -10,5 +10,6 @@ /build/deploy *.log /packages/asc-web-components +/packages/asc-web-common /products/ASC.People/Data/ Data/ diff --git a/all-clients.code-workspace b/all-clients.code-workspace index 8f83fd19fb..45bc87642c 100644 --- a/all-clients.code-workspace +++ b/all-clients.code-workspace @@ -4,6 +4,10 @@ "name": "ASC.Web.Components" "path": "./web/ASC.Web.Components" }, + { + "name": "ASC.Web.Common" + "path": "./web/ASC.Web.Common" + }, { "name": "ASC.Web.Client" "path": "./web/ASC.Web.Client" diff --git a/build/build.bat b/build/build.bat index e6525898db..9825f73d5a 100644 --- a/build/build.bat +++ b/build/build.bat @@ -10,12 +10,19 @@ echo "ASC.Web.Components" call yarn install --cwd web/ASC.Web.Components --frozen-lockfile > build\ASC.Web.Components.log call yarn link --cwd packages/asc-web-components +echo "ASC.Web.Common" +call yarn link "asc-web-components" --cwd web/ASC.Web.Common +call yarn install --cwd web/ASC.Web.Common --frozen-lockfile > build\ASC.Web.Common.log +call yarn link --cwd packages/asc-web-common + echo "ASC.Web.Client" call yarn link "asc-web-components" --cwd web/ASC.Web.Client +call yarn link "asc-web-common" --cwd web/ASC.Web.Client call yarn install --cwd web/ASC.Web.Client --frozen-lockfile > build\ASC.Web.Client.log echo "ASC.Web.People.Client" call yarn link "asc-web-components" --cwd products/ASC.People/Client +call yarn link "asc-web-common" --cwd products/ASC.People/Client call yarn install --cwd products/ASC.People/Client --frozen-lockfile > build\ASC.Web.People.Client.log xcopy build\cra\*.* products\ASC.People\Client\node_modules\ /E /R /Y diff --git a/build/rebuild.bat b/build/rebuild.bat index c2d324f0b6..6f84b35ed9 100644 --- a/build/rebuild.bat +++ b/build/rebuild.bat @@ -4,20 +4,27 @@ call start\stop.bat PUSHD %~dp0.. del /s /q packages\asc-web-components +del /s /q packages\asc-web-common echo "ASC.Web.Components" call yarn install --cwd web/ASC.Web.Components > build\ASC.Web.Components.log REM xcopy web\ASC.Web.Components\node_modules packages\asc-web-components\node_modules\ /E /R /Y >> build\ASC.Web.Components.log call yarn install --cwd packages/asc-web-components >> build\ASC.Web.Components.log - call yarn link --cwd packages/asc-web-components +echo "ASC.Web.Common" +call yarn link "asc-web-components" --cwd web/ASC.Web.Common +call yarn install --cwd web/ASC.Web.Common > build\ASC.Web.Common.log +call yarn link --cwd packages/asc-web-common + echo "ASC.Web.Client" call yarn link "asc-web-components" --cwd web/ASC.Web.Client +call yarn link "asc-web-common" --cwd web/ASC.Web.Client call yarn install --cwd web/ASC.Web.Client > build\ASC.Web.Client.log echo "ASC.Web.People.Client" call yarn link "asc-web-components" --cwd products/ASC.People/Client +call yarn link "asc-web-common" --cwd products/ASC.People/Client call yarn install --cwd products/ASC.People/Client > build\ASC.Web.People.Client.log xcopy build\cra\*.* products\ASC.People\Client\node_modules\ /E /R /Y diff --git a/config/kafka.json b/config/kafka.json index 661f54c33e..108d04dd46 100644 --- a/config/kafka.json +++ b/config/kafka.json @@ -1,5 +1,5 @@ { "kafka": { - "BootstrapServers": "" + "BootstrapServers": "localhost:9092" } } \ No newline at end of file diff --git a/products/ASC.People/Client/package.json b/products/ASC.People/Client/package.json index 09ee607655..bab5b90f0e 100644 --- a/products/ASC.People/Client/package.json +++ b/products/ASC.People/Client/package.json @@ -5,6 +5,7 @@ "homepage": "/products/people", "dependencies": { "asc-web-components": "file:../../../packages/asc-web-components", + "asc-web-common": "file:../../../packages/asc-web-common", "axios": "^0.19.0", "bootstrap": "4.3.1", "connected-react-router": "6.5.2", diff --git a/products/ASC.People/Client/yarn.lock b/products/ASC.People/Client/yarn.lock index ba029c3a65..04053a1bcb 100644 --- a/products/ASC.People/Client/yarn.lock +++ b/products/ASC.People/Client/yarn.lock @@ -1801,8 +1801,15 @@ asap@~2.0.6: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= +"asc-web-common@file:../../../packages/asc-web-common": + version "1.0.0" + dependencies: + axios "^0.19.0" + history "4.9.0" + universal-cookie "^4.0.2" + "asc-web-components@file:../../../packages/asc-web-components": - version "1.0.152" + version "1.0.166" dependencies: email-addresses "^3.0.3" moment "^2.24.0" diff --git a/web/ASC.Web.Client/package.json b/web/ASC.Web.Client/package.json index e762daafd8..77f7cdaf81 100644 --- a/web/ASC.Web.Client/package.json +++ b/web/ASC.Web.Client/package.json @@ -4,6 +4,7 @@ "private": true, "dependencies": { "asc-web-components": "file:../../packages/asc-web-components", + "asc-web-common": "file:../../packages/asc-web-common", "axios": "^0.19.0", "bootstrap": "4.3.1", "connected-react-router": "6.5.2", diff --git a/web/ASC.Web.Client/yarn.lock b/web/ASC.Web.Client/yarn.lock index e6bc30619f..4509cd2bc5 100644 --- a/web/ASC.Web.Client/yarn.lock +++ b/web/ASC.Web.Client/yarn.lock @@ -1801,8 +1801,15 @@ asap@~2.0.6: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= +"asc-web-common@file:../../packages/asc-web-common": + version "1.0.0" + dependencies: + axios "^0.19.0" + history "4.9.0" + universal-cookie "^4.0.2" + "asc-web-components@file:../../packages/asc-web-components": - version "1.0.152" + version "1.0.166" dependencies: email-addresses "^3.0.3" moment "^2.24.0" diff --git a/web/ASC.Web.Common/.editorconfig b/web/ASC.Web.Common/.editorconfig new file mode 100644 index 0000000000..9d08a1a828 --- /dev/null +++ b/web/ASC.Web.Common/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/web/ASC.Web.Common/.eslintignore b/web/ASC.Web.Common/.eslintignore new file mode 100644 index 0000000000..849ddff3b7 --- /dev/null +++ b/web/ASC.Web.Common/.eslintignore @@ -0,0 +1 @@ +dist/ diff --git a/web/ASC.Web.Common/.eslintrc.js b/web/ASC.Web.Common/.eslintrc.js new file mode 100644 index 0000000000..e2cedf78c9 --- /dev/null +++ b/web/ASC.Web.Common/.eslintrc.js @@ -0,0 +1,13 @@ +module.exports = { + parser: 'babel-eslint', + extends: ['eslint:recommended', 'plugin:react/recommended'], + settings: { + react: { + version: 'detect', + }, + }, + env: { + browser: true, + node: true, + }, +}; diff --git a/web/ASC.Web.Common/.gitignore b/web/ASC.Web.Common/.gitignore new file mode 100644 index 0000000000..7d29b17349 --- /dev/null +++ b/web/ASC.Web.Common/.gitignore @@ -0,0 +1,14 @@ +**/obj/ +**/bin/ +/packages/ +*.suo +*.user +.vs/ +.vscode/ +*-lock.json +*.lock +**/node_modules/ +**/storybook-static/ +/web/ASC.Web.Components/dist +/build/deploy +/coverage diff --git a/web/ASC.Web.Common/.storybook/.babelrc b/web/ASC.Web.Common/.storybook/.babelrc new file mode 100644 index 0000000000..945d8ce8a6 --- /dev/null +++ b/web/ASC.Web.Common/.storybook/.babelrc @@ -0,0 +1,7 @@ +{ + "presets": [ + "@babel/preset-env", + "react-app" + ], + "plugins": [["babel-plugin-styled-components", { "diplayName": true }]] +} diff --git a/web/ASC.Web.Common/.storybook/addons.js b/web/ASC.Web.Common/.storybook/addons.js new file mode 100644 index 0000000000..6dff0062d1 --- /dev/null +++ b/web/ASC.Web.Common/.storybook/addons.js @@ -0,0 +1,9 @@ +import '@storybook/addons'; +import 'storybook-readme/register'; +import '@storybook/addon-knobs/register'; +import '@storybook/addon-storysource/register'; +import '@storybook/addon-actions/register'; +import '@storybook/addon-options/register'; +import '@storybook/addon-links/register'; +import '@storybook/addon-viewport/register'; +import '@storybook/addon-a11y/register'; \ No newline at end of file diff --git a/web/ASC.Web.Common/.storybook/config.js b/web/ASC.Web.Common/.storybook/config.js new file mode 100644 index 0000000000..61e3eccfef --- /dev/null +++ b/web/ASC.Web.Common/.storybook/config.js @@ -0,0 +1,52 @@ +import { configure, addDecorator, addParameters } from '@storybook/react'; +import { withA11y } from '@storybook/addon-a11y'; +import { addReadme } from 'storybook-readme'; +import { withConsole } from '@storybook/addon-console'; + +import '!style-loader!css-loader!./styles.scss'; + +//import 'bootstrap/dist/css/bootstrap.css'; +//import 'react-toastify/dist/ReactToastify.min.css'; +/* +This is a package to make Story panel load and decode all files stories +Also, because of some internal usage, we cannot use the default babel config (for the library) +with this package. + +In order to solve that, it's necessary a custom/simple .babelrc inside .storybook/ folder +*/ +//import requireContext from 'require-context.macro'; + +/* Add A11y panel */ +addDecorator(withA11y); + +/* Enable README for all stories */ +addDecorator(addReadme); + +/* General options for storybook */ +addParameters({ + options: + { + name: 'ASC Storybook', + sortStoriesByKind: true, + showAddonPanel: true, + addonPanelInRight: true + }, + /* Options for storybook-readme plugin */ + readme: { + codeTheme: 'github', + StoryPreview: ({ children }) => children, + }, +}); + +/* automatically import all files ending in *.stories.js inside src folder */ +//const req = requireContext('../src', true, /\.stories\.js$/); +//const req = require.context('../src', true, /\.stories\.js$/); +const srcStories = require.context('../src', true, /\.stories\.js$/); +function loadStories() { + //req.keys().forEach(filename => req(filename)); + srcStories.keys().forEach(filename => srcStories(filename)); +} + +addDecorator((storyFn, context) => withConsole()(storyFn)(context)); + +configure(loadStories, module); diff --git a/web/ASC.Web.Common/.storybook/decorators/section/index.js b/web/ASC.Web.Common/.storybook/decorators/section/index.js new file mode 100644 index 0000000000..b4437630ea --- /dev/null +++ b/web/ASC.Web.Common/.storybook/decorators/section/index.js @@ -0,0 +1,12 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +const sectionStyles = { + padding: 16, +}; + +const Section = props =>
{props.children}
; + +Section.propTypes = { children: PropTypes.node.isRequired }; + +export default Section; \ No newline at end of file diff --git a/web/ASC.Web.Common/.storybook/manager-head.html b/web/ASC.Web.Common/.storybook/manager-head.html new file mode 100644 index 0000000000..ac6e64281c --- /dev/null +++ b/web/ASC.Web.Common/.storybook/manager-head.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/ASC.Web.Common/.storybook/preview-head.html b/web/ASC.Web.Common/.storybook/preview-head.html new file mode 100644 index 0000000000..62e43ae1ea --- /dev/null +++ b/web/ASC.Web.Common/.storybook/preview-head.html @@ -0,0 +1,13 @@ + + \ No newline at end of file diff --git a/web/ASC.Web.Common/.storybook/styles.scss b/web/ASC.Web.Common/.storybook/styles.scss new file mode 100644 index 0000000000..b64ee8c974 --- /dev/null +++ b/web/ASC.Web.Common/.storybook/styles.scss @@ -0,0 +1,8 @@ +/* +Any global style for all stories +It can also be an scss file, however, +you have to go to `webpack.config.js` file +and enable the options in there +*/ +@import '../node_modules/bootstrap/dist/css/bootstrap.css'; +@import '../node_modules/react-toastify/dist/ReactToastify.min.css'; \ No newline at end of file diff --git a/web/ASC.Web.Common/.storybook/webpack.config.js b/web/ASC.Web.Common/.storybook/webpack.config.js new file mode 100644 index 0000000000..155c7c8b85 --- /dev/null +++ b/web/ASC.Web.Common/.storybook/webpack.config.js @@ -0,0 +1,102 @@ +const path = require('path'); + +const sourceFolders = [ + path.resolve(__dirname), + path.resolve(__dirname, '../src'), +]; + +module.exports = ({ config }) => { + + if (process.env.NODE_ENV === 'production') { + // remove progress plugin + // progress plugin outputs a lot of console logs, which makes + // netlify build realllllllllllllllly slow. + config.plugins = config.plugins.filter( + plugin => plugin.constructor.name !== 'ProgressPlugin' + ); + config.devtool = 'none'; // TODO: should we use something differen? + } else { + config.devtool = 'cheap-module-source-map'; // TODO: should we use something differen? + } + + config.devtool = 'cheap-module-source-map'; // TODO: should we use something differen? + config.module.rules = [ + // Disable require.ensure as it's not a standard language feature. + { parser: { requireEnsure: false } }, + // add story source + { + test: /\.stories\.js$/, + loaders: [require.resolve('@storybook/source-loader')], + enforce: 'pre', + }, + // Process JS with Babel. + { + test: /\.js$/, + include: sourceFolders, + use: [ + { + loader: require.resolve('babel-loader'), + options: { + babelrc: false, + compact: false, + presets: [require.resolve('../scripts/get-babel-preset')], + // This is a feature of `babel-loader` for webpack (not Babel itself). + // It enables caching results in ./node_modules/.cache/babel-loader/ + // directory for faster rebuilds. + cacheDirectory: true, + highlightCode: true, + }, + }, + ], + }, + // For svg icons, we want to get them transformed into React components + // when we import them. + { + test: /\.react\.svg$/, + include: sourceFolders, + use: [ + { + loader: require.resolve('babel-loader'), + options: { + babelrc: false, + presets: [require.resolve('../scripts/get-babel-preset')], + // This is a feature of `babel-loader` for webpack (not Babel itself). + // It enables caching results in ./node_modules/.cache/babel-loader/ + // directory for faster rebuilds. + cacheDirectory: true, + highlightCode: true, + }, + }, + { + loader: require.resolve('@svgr/webpack'), + options: { + // NOTE: disable this and manually add `removeViewBox: false` in the SVGO plugins list + // See related PR: https://github.com/smooth-code/svgr/pull/137 + icon: false, + svgoConfig: { + plugins: [ + { removeViewBox: false }, + // Keeps ID's of svgs so they can be targeted with CSS + { cleanupIDs: false }, + ], + }, + }, + }, + ], + }, + { + test: /\.css$/, + use: ['style-loader','css-loader'] + }, + // Storybook uses a plugin to load and render markdown files. + { + test: /\.md$/, + use: [ + { loader: require.resolve('html-loader') }, + { loader: require.resolve('markdown-loader') }, + ], + } + ]; + + return config; +}; diff --git a/web/ASC.Web.Common/README.md b/web/ASC.Web.Common/README.md new file mode 100644 index 0000000000..3f3732d1ea --- /dev/null +++ b/web/ASC.Web.Common/README.md @@ -0,0 +1,11 @@ +# asc-web-common + +# Common components and solutions to build your product + +> + +[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com) + +## License + +AGPL-3.0 © Ascensio System SIA diff --git a/web/ASC.Web.Common/babel.config.js b/web/ASC.Web.Common/babel.config.js new file mode 100644 index 0000000000..d3b8285382 --- /dev/null +++ b/web/ASC.Web.Common/babel.config.js @@ -0,0 +1,21 @@ +const presets = [ + [ + '@babel/preset-env', + { + modules: false, + }, + ], + '@babel/preset-react', +]; + +const plugins = ['@babel/plugin-proposal-class-properties', '@babel/plugin-proposal-export-namespace-from', 'babel-plugin-styled-components']; + +module.exports = { + presets, + plugins, + env: { + test: { + presets: ['@babel/preset-env', '@babel/preset-react'], + }, + }, +}; diff --git a/web/ASC.Web.Common/config/setupTest.js b/web/ASC.Web.Common/config/setupTest.js new file mode 100644 index 0000000000..fc7b0dce1f --- /dev/null +++ b/web/ASC.Web.Common/config/setupTest.js @@ -0,0 +1,4 @@ +import Enzyme from 'enzyme'; +import Adapter from 'enzyme-adapter-react-16'; + +Enzyme.configure({ adapter: new Adapter() }); diff --git a/web/ASC.Web.Common/dist/asc-web-common.esm.js b/web/ASC.Web.Common/dist/asc-web-common.esm.js new file mode 100644 index 0000000000..c5f97da40a --- /dev/null +++ b/web/ASC.Web.Common/dist/asc-web-common.esm.js @@ -0,0 +1,1325 @@ +import axios from 'axios'; +import Cookies from 'universal-cookie'; +import { createBrowserHistory } from 'history'; + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} + +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; +} + +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + +function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + if (enumerableOnly) symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + }); + keys.push.apply(keys, symbols); + } + + return keys; +} + +function _objectSpread2(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + + if (i % 2) { + ownKeys(source, true).forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } else if (Object.getOwnPropertyDescriptors) { + Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); + } else { + ownKeys(source).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + } + + return target; +} + +var toUrlParams = function toUrlParams(obj, skipNull) { + var str = ""; + for (var key in obj) { + if (skipNull && !obj[key]) continue; + if (str !== "") { + str += "&"; + } + str += key + "=" + encodeURIComponent(obj[key]); + } + return str; +}; + +var DEFAULT_PAGE = 0; +var DEFAULT_PAGE_COUNT = 25; +var DEFAULT_TOTAL = 0; +var DEFAULT_SORT_BY = "firstname"; +var DEFAULT_SORT_ORDER = "ascending"; +var DEFAULT_EMPLOYEE_STATUS = null; +var DEFAULT_ACTIVATION_STATUS = null; +var DEFAULT_ROLE = null; +var DEFAULT_SEARCH = null; +var DEFAULT_GROUP = null; +var Filter = +function () { + _createClass(Filter, null, [{ + key: "getDefault", + value: function getDefault() { + var total = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_TOTAL; + return new Filter(DEFAULT_PAGE, DEFAULT_PAGE_COUNT, total); + } + }]); + function Filter() { + var _this = this; + var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_PAGE; + var _pageCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_PAGE_COUNT; + var total = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_TOTAL; + var _sortBy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_SORT_BY; + var _sortOrder = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : DEFAULT_SORT_ORDER; + var _employeeStatus = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : DEFAULT_EMPLOYEE_STATUS; + var _activationStatus = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : DEFAULT_ACTIVATION_STATUS; + var _role = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : DEFAULT_ROLE; + var _search = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : DEFAULT_SEARCH; + var _group = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : DEFAULT_GROUP; + _classCallCheck(this, Filter); + this.getStartIndex = function () { + return _this.page * _this.pageCount; + }; + this.hasNext = function () { + return _this.total - _this.getStartIndex() > _this.pageCount; + }; + this.hasPrev = function () { + return _this.page > 0; + }; + this.toDto = function () { + var pageCount = _this.pageCount, + sortBy = _this.sortBy, + sortOrder = _this.sortOrder, + employeeStatus = _this.employeeStatus, + activationStatus = _this.activationStatus, + role = _this.role, + search = _this.search, + group = _this.group; + var dtoFilter = { + StartIndex: _this.getStartIndex(), + Count: pageCount, + sortby: sortBy, + sortorder: sortOrder, + employeestatus: employeeStatus, + activationstatus: activationStatus, + filtervalue: search, + groupId: group + }; + switch (role) { + case "admin": + dtoFilter.isadministrator = true; + break; + case "user": + dtoFilter.employeeType = 1; + break; + case "guest": + dtoFilter.employeeType = 2; + break; + } + return dtoFilter; + }; + this.toUrlParams = function () { + var dtoFilter = _this.toDto(); + var str = toUrlParams(dtoFilter, true); + return str; + }; + this.page = page; + this.pageCount = _pageCount; + this.sortBy = _sortBy; + this.sortOrder = _sortOrder; + this.employeeStatus = _employeeStatus; + this.activationStatus = _activationStatus; + this.role = _role; + this.search = _search; + this.total = total; + this.group = _group; + } + _createClass(Filter, [{ + key: "clone", + value: function clone(onlySorting) { + return onlySorting ? new Filter(DEFAULT_PAGE, DEFAULT_PAGE_COUNT, DEFAULT_TOTAL, this.sortBy, this.sortOrder) : new Filter(this.page, this.pageCount, this.total, this.sortBy, this.sortOrder, this.employeeStatus, this.activationStatus, this.role, this.search, this.group); + } + }, { + key: "equals", + value: function equals(filter) { + var equals = this.employeeStatus === filter.employeeStatus && this.activationStatus === filter.activationStatus && this.role === filter.role && this.group === filter.group && this.search === filter.search && this.sortBy === filter.sortBy && this.sortOrder === filter.sortOrder && this.page === filter.page && this.pageCount === filter.pageCount; + return equals; + } + }]); + return Filter; +}(); + +var history = createBrowserHistory(); + +var AUTH_KEY = 'asc_auth_key'; +var EmployeeActivationStatus = Object.freeze({ + NotActivated: 0, + Activated: 1, + Pending: 2, + AutoGenerated: 4 +}); +var ConfirmType = Object.freeze({ + EmpInvite: 0, + LinkInvite: 1, + PortalSuspend: 2, + PortalContinue: 3, + PortalRemove: 4, + DnsChange: 5, + PortalOwnerChange: 6, + Activation: 7, + EmailChange: 8, + EmailActivation: 9, + PasswordChange: 10, + ProfileRemove: 11, + PhoneActivation: 12, + PhoneAuth: 13, + Auth: 14, + TfaActivation: 15, + TfaAuth: 16 +}); +var ValidationResult = Object.freeze({ + Ok: 0, + Invalid: 1, + Expired: 2 +}); +var EmployeeStatus = Object.freeze({ + Active: 1, + Disabled: 2 +}); + +var PREFIX = "api"; +var VERSION = "2.0"; +var baseURL = "".concat(window.location.origin, "/").concat(PREFIX, "/").concat(VERSION); +var client = axios.create({ + baseURL: baseURL, + responseType: 'json', + timeout: 30000 +}); +setAuthorizationToken(localStorage.getItem(AUTH_KEY)); +client.interceptors.response.use(function (response) { + return response; +}, function (error) { + if (error.response.status === 401) { + history.push("/login/error=unauthorized"); + } + if (error.response.status === 502) { + history.push("/error/".concat(error.response.status)); + } + return error; +}); +function setAuthorizationToken(token) { + var cookies = new Cookies(); + if (token) { + client.defaults.headers.common['Authorization'] = token; + localStorage.setItem(AUTH_KEY, token); + var current = new Date(); + var nextYear = new Date(); + nextYear.setFullYear(current.getFullYear() + 1); + cookies.set(AUTH_KEY, token, { + path: "/", + expires: nextYear + }); + } else { + localStorage.clear(); + delete client.defaults.headers.common['Authorization']; + cookies.remove(AUTH_KEY, { + path: "/" + }); + } +} +var checkResponseError = function checkResponseError(res) { + if (res && res.data && res.data.error) { + console.error(res.data.error); + throw new Error(res.data.error.message); + } +}; +var request = function request(options) { + var onSuccess = function onSuccess(response) { + checkResponseError(response); + return response.data.response; + }; + var onError = function onError(error) { + console.error("Request Failed:", error.config); + if (error.response) { + console.error("Status:", error.response.status); + console.error("Data:", error.response.data); + console.error("Headers:", error.response.headers); + } else { + console.error("Error Message:", error.message); + } + return Promise.reject(error.response || error.message); + }; + return client(options).then(onSuccess).catch(onError); +}; + +function getUserList() { + var filter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Filter.getDefault(); + var params = filter && filter instanceof Filter ? "/filter.json?".concat(filter.toUrlParams()) : ""; + return request({ + method: "get", + url: "/people".concat(params) + }); +} + +var People = /*#__PURE__*/Object.freeze({ + __proto__: null, + getUserList: getUserList +}); + +var index = { + Filter: Filter, + People: People +}; + +var api = /*#__PURE__*/Object.freeze({ + __proto__: null, + 'default': index +}); + +function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; +} + +var runtime_1 = createCommonjsModule(function (module) { +var runtime = (function (exports) { + var Op = Object.prototype; + var hasOwn = Op.hasOwnProperty; + var undefined$1; + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + function wrap(innerFn, outerFn, self, tryLocsList) { + var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; + var generator = Object.create(protoGenerator.prototype); + var context = new Context(tryLocsList || []); + generator._invoke = makeInvokeMethod(innerFn, self, context); + return generator; + } + exports.wrap = wrap; + function tryCatch(fn, obj, arg) { + try { + return { type: "normal", arg: fn.call(obj, arg) }; + } catch (err) { + return { type: "throw", arg: err }; + } + } + var GenStateSuspendedStart = "suspendedStart"; + var GenStateSuspendedYield = "suspendedYield"; + var GenStateExecuting = "executing"; + var GenStateCompleted = "completed"; + var ContinueSentinel = {}; + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + var IteratorPrototype = {}; + IteratorPrototype[iteratorSymbol] = function () { + return this; + }; + var getProto = Object.getPrototypeOf; + var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); + if (NativeIteratorPrototype && + NativeIteratorPrototype !== Op && + hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { + IteratorPrototype = NativeIteratorPrototype; + } + var Gp = GeneratorFunctionPrototype.prototype = + Generator.prototype = Object.create(IteratorPrototype); + GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; + GeneratorFunctionPrototype.constructor = GeneratorFunction; + GeneratorFunctionPrototype[toStringTagSymbol] = + GeneratorFunction.displayName = "GeneratorFunction"; + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function(method) { + prototype[method] = function(arg) { + return this._invoke(method, arg); + }; + }); + } + exports.isGeneratorFunction = function(genFun) { + var ctor = typeof genFun === "function" && genFun.constructor; + return ctor + ? ctor === GeneratorFunction || + (ctor.displayName || ctor.name) === "GeneratorFunction" + : false; + }; + exports.mark = function(genFun) { + if (Object.setPrototypeOf) { + Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); + } else { + genFun.__proto__ = GeneratorFunctionPrototype; + if (!(toStringTagSymbol in genFun)) { + genFun[toStringTagSymbol] = "GeneratorFunction"; + } + } + genFun.prototype = Object.create(Gp); + return genFun; + }; + exports.awrap = function(arg) { + return { __await: arg }; + }; + function AsyncIterator(generator) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + if (value && + typeof value === "object" && + hasOwn.call(value, "__await")) { + return Promise.resolve(value.__await).then(function(value) { + invoke("next", value, resolve, reject); + }, function(err) { + invoke("throw", err, resolve, reject); + }); + } + return Promise.resolve(value).then(function(unwrapped) { + result.value = unwrapped; + resolve(result); + }, function(error) { + return invoke("throw", error, resolve, reject); + }); + } + } + var previousPromise; + function enqueue(method, arg) { + function callInvokeWithMethodAndArg() { + return new Promise(function(resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + return previousPromise = + previousPromise ? previousPromise.then( + callInvokeWithMethodAndArg, + callInvokeWithMethodAndArg + ) : callInvokeWithMethodAndArg(); + } + this._invoke = enqueue; + } + defineIteratorMethods(AsyncIterator.prototype); + AsyncIterator.prototype[asyncIteratorSymbol] = function () { + return this; + }; + exports.AsyncIterator = AsyncIterator; + exports.async = function(innerFn, outerFn, self, tryLocsList) { + var iter = new AsyncIterator( + wrap(innerFn, outerFn, self, tryLocsList) + ); + return exports.isGeneratorFunction(outerFn) + ? iter + : iter.next().then(function(result) { + return result.done ? result.value : iter.next(); + }); + }; + function makeInvokeMethod(innerFn, self, context) { + var state = GenStateSuspendedStart; + return function invoke(method, arg) { + if (state === GenStateExecuting) { + throw new Error("Generator is already running"); + } + if (state === GenStateCompleted) { + if (method === "throw") { + throw arg; + } + return doneResult(); + } + context.method = method; + context.arg = arg; + while (true) { + var delegate = context.delegate; + if (delegate) { + var delegateResult = maybeInvokeDelegate(delegate, context); + if (delegateResult) { + if (delegateResult === ContinueSentinel) continue; + return delegateResult; + } + } + if (context.method === "next") { + context.sent = context._sent = context.arg; + } else if (context.method === "throw") { + if (state === GenStateSuspendedStart) { + state = GenStateCompleted; + throw context.arg; + } + context.dispatchException(context.arg); + } else if (context.method === "return") { + context.abrupt("return", context.arg); + } + state = GenStateExecuting; + var record = tryCatch(innerFn, self, context); + if (record.type === "normal") { + state = context.done + ? GenStateCompleted + : GenStateSuspendedYield; + if (record.arg === ContinueSentinel) { + continue; + } + return { + value: record.arg, + done: context.done + }; + } else if (record.type === "throw") { + state = GenStateCompleted; + context.method = "throw"; + context.arg = record.arg; + } + } + }; + } + function maybeInvokeDelegate(delegate, context) { + var method = delegate.iterator[context.method]; + if (method === undefined$1) { + context.delegate = null; + if (context.method === "throw") { + if (delegate.iterator["return"]) { + context.method = "return"; + context.arg = undefined$1; + maybeInvokeDelegate(delegate, context); + if (context.method === "throw") { + return ContinueSentinel; + } + } + context.method = "throw"; + context.arg = new TypeError( + "The iterator does not provide a 'throw' method"); + } + return ContinueSentinel; + } + var record = tryCatch(method, delegate.iterator, context.arg); + if (record.type === "throw") { + context.method = "throw"; + context.arg = record.arg; + context.delegate = null; + return ContinueSentinel; + } + var info = record.arg; + if (! info) { + context.method = "throw"; + context.arg = new TypeError("iterator result is not an object"); + context.delegate = null; + return ContinueSentinel; + } + if (info.done) { + context[delegate.resultName] = info.value; + context.next = delegate.nextLoc; + if (context.method !== "return") { + context.method = "next"; + context.arg = undefined$1; + } + } else { + return info; + } + context.delegate = null; + return ContinueSentinel; + } + defineIteratorMethods(Gp); + Gp[toStringTagSymbol] = "Generator"; + Gp[iteratorSymbol] = function() { + return this; + }; + Gp.toString = function() { + return "[object Generator]"; + }; + function pushTryEntry(locs) { + var entry = { tryLoc: locs[0] }; + if (1 in locs) { + entry.catchLoc = locs[1]; + } + if (2 in locs) { + entry.finallyLoc = locs[2]; + entry.afterLoc = locs[3]; + } + this.tryEntries.push(entry); + } + function resetTryEntry(entry) { + var record = entry.completion || {}; + record.type = "normal"; + delete record.arg; + entry.completion = record; + } + function Context(tryLocsList) { + this.tryEntries = [{ tryLoc: "root" }]; + tryLocsList.forEach(pushTryEntry, this); + this.reset(true); + } + exports.keys = function(object) { + var keys = []; + for (var key in object) { + keys.push(key); + } + keys.reverse(); + return function next() { + while (keys.length) { + var key = keys.pop(); + if (key in object) { + next.value = key; + next.done = false; + return next; + } + } + next.done = true; + return next; + }; + }; + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + if (iteratorMethod) { + return iteratorMethod.call(iterable); + } + if (typeof iterable.next === "function") { + return iterable; + } + if (!isNaN(iterable.length)) { + var i = -1, next = function next() { + while (++i < iterable.length) { + if (hasOwn.call(iterable, i)) { + next.value = iterable[i]; + next.done = false; + return next; + } + } + next.value = undefined$1; + next.done = true; + return next; + }; + return next.next = next; + } + } + return { next: doneResult }; + } + exports.values = values; + function doneResult() { + return { value: undefined$1, done: true }; + } + Context.prototype = { + constructor: Context, + reset: function(skipTempReset) { + this.prev = 0; + this.next = 0; + this.sent = this._sent = undefined$1; + this.done = false; + this.delegate = null; + this.method = "next"; + this.arg = undefined$1; + this.tryEntries.forEach(resetTryEntry); + if (!skipTempReset) { + for (var name in this) { + if (name.charAt(0) === "t" && + hasOwn.call(this, name) && + !isNaN(+name.slice(1))) { + this[name] = undefined$1; + } + } + } + }, + stop: function() { + this.done = true; + var rootEntry = this.tryEntries[0]; + var rootRecord = rootEntry.completion; + if (rootRecord.type === "throw") { + throw rootRecord.arg; + } + return this.rval; + }, + dispatchException: function(exception) { + if (this.done) { + throw exception; + } + var context = this; + function handle(loc, caught) { + record.type = "throw"; + record.arg = exception; + context.next = loc; + if (caught) { + context.method = "next"; + context.arg = undefined$1; + } + return !! caught; + } + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + var record = entry.completion; + if (entry.tryLoc === "root") { + return handle("end"); + } + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"); + var hasFinally = hasOwn.call(entry, "finallyLoc"); + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } else if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + } else if (hasCatch) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } + } else if (hasFinally) { + if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + } else { + throw new Error("try statement without catch or finally"); + } + } + } + }, + abrupt: function(type, arg) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc <= this.prev && + hasOwn.call(entry, "finallyLoc") && + this.prev < entry.finallyLoc) { + var finallyEntry = entry; + break; + } + } + if (finallyEntry && + (type === "break" || + type === "continue") && + finallyEntry.tryLoc <= arg && + arg <= finallyEntry.finallyLoc) { + finallyEntry = null; + } + var record = finallyEntry ? finallyEntry.completion : {}; + record.type = type; + record.arg = arg; + if (finallyEntry) { + this.method = "next"; + this.next = finallyEntry.finallyLoc; + return ContinueSentinel; + } + return this.complete(record); + }, + complete: function(record, afterLoc) { + if (record.type === "throw") { + throw record.arg; + } + if (record.type === "break" || + record.type === "continue") { + this.next = record.arg; + } else if (record.type === "return") { + this.rval = this.arg = record.arg; + this.method = "return"; + this.next = "end"; + } else if (record.type === "normal" && afterLoc) { + this.next = afterLoc; + } + return ContinueSentinel; + }, + finish: function(finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.finallyLoc === finallyLoc) { + this.complete(entry.completion, entry.afterLoc); + resetTryEntry(entry); + return ContinueSentinel; + } + } + }, + "catch": function(tryLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc === tryLoc) { + var record = entry.completion; + if (record.type === "throw") { + var thrown = record.arg; + resetTryEntry(entry); + } + return thrown; + } + } + throw new Error("illegal catch attempt"); + }, + delegateYield: function(iterable, resultName, nextLoc) { + this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }; + if (this.method === "next") { + this.arg = undefined$1; + } + return ContinueSentinel; + } + }; + return exports; +}( + module.exports +)); +try { + regeneratorRuntime = runtime; +} catch (accidentalStrictMode) { + Function("r", "regeneratorRuntime = r")(runtime); +} +}); + +var regenerator = runtime_1; + +var LOGIN_POST = "LOGIN_POST"; +var SET_CURRENT_USER = "SET_CURRENT_USER"; +var SET_MODULE = "SET_MODULE"; +var SET_MODULES = "SET_MODULES"; +var SET_SETTINGS = "SET_SETTINGS"; +var SET_IS_LOADED = "SET_IS_LOADED"; +var LOGOUT = "LOGOUT"; +function setModule(module) { + return { + type: SET_MODULE, + module: module + }; +} +function setCurrentUser(user) { + return { + type: SET_CURRENT_USER, + user: user + }; +} +function setModules(modules) { + return { + type: SET_MODULES, + modules: modules + }; +} +function setSettings(settings) { + return { + type: SET_SETTINGS, + settings: settings + }; +} +function setIsLoaded(isLoaded) { + return { + type: SET_IS_LOADED, + isLoaded: isLoaded + }; +} +function setLogout() { + return { + type: LOGOUT + }; +} +function getUserInfo(dispatch, additionalAction) { + var _ref, user, modules, settings, newSettings, inviteLinks; + return regenerator.async(function getUserInfo$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return regenerator.awrap(undefined()); + case 2: + _ref = _context.sent; + user = _ref.user; + modules = _ref.modules; + settings = _ref.settings; + newSettings = settings; + if (!user.isAdmin) { + _context.next = 12; + break; + } + _context.next = 10; + return regenerator.awrap(undefined()); + case 10: + inviteLinks = _context.sent; + newSettings = Object.assign(newSettings, inviteLinks); + case 12: + dispatch(setCurrentUser(user)); + dispatch(setModules(modules)); + dispatch(setSettings(newSettings)); + additionalAction && additionalAction(); + return _context.abrupt("return", dispatch(setIsLoaded(true))); + case 17: + case "end": + return _context.stop(); + } + } + }); +} +function logout() { + return function (dispatch) { + setAuthorizationToken(); + return dispatch(setLogout()); + }; +} + +var actions = /*#__PURE__*/Object.freeze({ + __proto__: null, + LOGIN_POST: LOGIN_POST, + SET_CURRENT_USER: SET_CURRENT_USER, + SET_MODULE: SET_MODULE, + SET_MODULES: SET_MODULES, + SET_SETTINGS: SET_SETTINGS, + SET_IS_LOADED: SET_IS_LOADED, + LOGOUT: LOGOUT, + setModule: setModule, + setCurrentUser: setCurrentUser, + setModules: setModules, + setSettings: setSettings, + setIsLoaded: setIsLoaded, + setLogout: setLogout, + getUserInfo: getUserInfo, + logout: logout +}); + +var objectProto = Object.prototype; +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + return value === proto; +} + +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +var nativeKeys = overArg(Object.keys, Object); + +var objectProto$1 = Object.prototype; +var hasOwnProperty = objectProto$1.hasOwnProperty; +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; +var root = freeGlobal || freeSelf || Function('return this')(); + +var Symbol$1 = root.Symbol; + +var objectProto$2 = Object.prototype; +var hasOwnProperty$1 = objectProto$2.hasOwnProperty; +var nativeObjectToString = objectProto$2.toString; +var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; +function getRawTag(value) { + var isOwn = hasOwnProperty$1.call(value, symToStringTag), + tag = value[symToStringTag]; + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +var objectProto$3 = Object.prototype; +var nativeObjectToString$1 = objectProto$3.toString; +function objectToString(value) { + return nativeObjectToString$1.call(value); +} + +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; +var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag$1 && symToStringTag$1 in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; +function isFunction(value) { + if (!isObject(value)) { + return false; + } + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +var coreJsData = root['__core-js_shared__']; + +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +var funcProto = Function.prototype; +var funcToString = funcProto.toString; +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; +var reIsHostCtor = /^\[object .+?Constructor\]$/; +var funcProto$1 = Function.prototype, + objectProto$4 = Object.prototype; +var funcToString$1 = funcProto$1.toString; +var hasOwnProperty$2 = objectProto$4.hasOwnProperty; +var reIsNative = RegExp('^' + + funcToString$1.call(hasOwnProperty$2).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +var DataView = getNative(root, 'DataView'); + +var Map = getNative(root, 'Map'); + +var Promise$1 = getNative(root, 'Promise'); + +var Set = getNative(root, 'Set'); + +var WeakMap = getNative(root, 'WeakMap'); + +var mapTag = '[object Map]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; +var dataViewTag = '[object DataView]'; +var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise$1), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); +var getTag = baseGetTag; +if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise$1 && getTag(Promise$1.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; +} +var getTag$1 = getTag; + +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +var argsTag = '[object Arguments]'; +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; +} + +var objectProto$5 = Object.prototype; +var hasOwnProperty$3 = objectProto$5.hasOwnProperty; +var propertyIsEnumerable = objectProto$5.propertyIsEnumerable; +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +var isArray = Array.isArray; + +var MAX_SAFE_INTEGER = 9007199254740991; +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +function stubFalse() { + return false; +} + +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; +var moduleExports = freeModule && freeModule.exports === freeExports; +var Buffer = moduleExports ? root.Buffer : undefined; +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; +var isBuffer = nativeIsBuffer || stubFalse; + +var argsTag$1 = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag$1 = '[object Function]', + mapTag$1 = '[object Map]', + numberTag = '[object Number]', + objectTag$1 = '[object Object]', + regexpTag = '[object RegExp]', + setTag$1 = '[object Set]', + stringTag = '[object String]', + weakMapTag$1 = '[object WeakMap]'; +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag$1 = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag$1] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag$1] = +typedArrayTags[mapTag$1] = typedArrayTags[numberTag] = +typedArrayTags[objectTag$1] = typedArrayTags[regexpTag] = +typedArrayTags[setTag$1] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag$1] = false; +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; +var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; +var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; +var freeProcess = moduleExports$1 && freeGlobal.process; +var nodeUtil = (function() { + try { + var types = freeModule$1 && freeModule$1.require && freeModule$1.require('util').types; + if (types) { + return types; + } + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +var mapTag$2 = '[object Map]', + setTag$2 = '[object Set]'; +var objectProto$6 = Object.prototype; +var hasOwnProperty$4 = objectProto$6.hasOwnProperty; +function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag$1(value); + if (tag == mapTag$2 || tag == setTag$2) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty$4.call(value, key)) { + return false; + } + } + return true; +} + +var initialState = { + isAuthenticated: false, + isLoaded: false, + user: {}, + modules: [], + settings: { + currentProductId: null, + culture: "en-US", + trustedDomains: [], + trustedDomainsType: 1, + timezone: "UTC", + utcOffset: "00:00:00", + utcHoursOffset: 0, + homepage: "", + datePattern: "M/d/yyyy", + datePatternJQ: "00/00/0000", + dateTimePattern: "dddd, MMMM d, yyyy h:mm:ss tt", + datepicker: { + datePattern: "mm/dd/yy", + dateTimePattern: "DD, mm dd, yy h:mm:ss tt", + timePattern: "h:mm tt" + }, + hasShortenService: false + } +}; +var authReducer = function authReducer() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; + var action = arguments.length > 1 ? arguments[1] : undefined; + switch (action.type) { + case SET_CURRENT_USER: + return Object.assign({}, state, { + isAuthenticated: !isEmpty(action.user), + user: action.user + }); + case SET_MODULE: + return Object.assign({}, state, { + settings: _objectSpread2({}, state.settings, { + currentProductId: action.module.id, + homepage: action.module.homepage + }) + }); + case SET_MODULES: + return Object.assign({}, state, { + modules: action.modules + }); + case SET_SETTINGS: + return Object.assign({}, state, { + settings: _objectSpread2({}, state.settings, {}, action.settings) + }); + case SET_IS_LOADED: + return Object.assign({}, state, { + isLoaded: action.isLoaded + }); + case LOGOUT: + return Object.assign({}, initialState, { + isLoaded: true + }); + default: + return state; + } +}; + +var reducers = /*#__PURE__*/Object.freeze({ + __proto__: null, + 'default': authReducer +}); + +function isAdmin(user) { + var isPeopleAdmin = user.listAdminModules ? user.listAdminModules.includes('people') : false; + return user.isAdmin || user.isOwner || isPeopleAdmin; +} +function isMe(user, userName) { + return userName === "@self" || userName === user.userName; +} +function getCurrentModule(modules, currentModuleId) { + return modules.find(function (module) { + return module.id === currentModuleId; + }); +} + +var selectors = /*#__PURE__*/Object.freeze({ + __proto__: null, + isAdmin: isAdmin, + isMe: isMe, + getCurrentModule: getCurrentModule +}); + +var index$1 = { + actions: actions, + reducers: reducers, + selectors: selectors +}; + +export { index as Api, index$1 as Auth }; +//# sourceMappingURL=asc-web-common.esm.js.map diff --git a/web/ASC.Web.Common/dist/asc-web-common.esm.js.map b/web/ASC.Web.Common/dist/asc-web-common.esm.js.map new file mode 100644 index 0000000000..f50708bf32 --- /dev/null +++ b/web/ASC.Web.Common/dist/asc-web-common.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"asc-web-common.esm.js","sources":["../src/utils/converter.js","../src/store/services/api/people/filter.js","../src/history/index.js","../src/constants/index.js","../src/store/services/api/client.js","../src/store/services/api/people/index.js","../src/store/services/api/index.js","../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js","../node_modules/@babel/runtime/regenerator/index.js","../src/store/auth/actions.js","../node_modules/lodash-es/_isPrototype.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_nativeKeys.js","../node_modules/lodash-es/_baseKeys.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_DataView.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_Promise.js","../node_modules/lodash-es/_Set.js","../node_modules/lodash-es/_WeakMap.js","../node_modules/lodash-es/_getTag.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/isLength.js","../node_modules/lodash-es/isArrayLike.js","../node_modules/lodash-es/stubFalse.js","../node_modules/lodash-es/isBuffer.js","../node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/lodash-es/_baseUnary.js","../node_modules/lodash-es/_nodeUtil.js","../node_modules/lodash-es/isTypedArray.js","../node_modules/lodash-es/isEmpty.js","../src/store/auth/reducers.js","../src/store/auth/selectors.js","../src/store/auth/index.js"],"sourcesContent":["export const toUrlParams = (obj, skipNull) => {\r\n let str = \"\";\r\n for (var key in obj) {\r\n if (skipNull && !obj[key]) continue;\r\n\r\n if (str !== \"\") {\r\n str += \"&\";\r\n }\r\n\r\n str += key + \"=\" + encodeURIComponent(obj[key]);\r\n }\r\n\r\n return str;\r\n};\r\n","import { toUrlParams } from \"../../../../utils/converter\";\r\n\r\nconst DEFAULT_PAGE = 0;\r\nconst DEFAULT_PAGE_COUNT = 25;\r\nconst DEFAULT_TOTAL = 0;\r\nconst DEFAULT_SORT_BY = \"firstname\";\r\nconst DEFAULT_SORT_ORDER = \"ascending\";\r\nconst DEFAULT_EMPLOYEE_STATUS = null;\r\nconst DEFAULT_ACTIVATION_STATUS = null;\r\nconst DEFAULT_ROLE = null;\r\nconst DEFAULT_SEARCH = null;\r\nconst DEFAULT_GROUP = null;\r\n\r\nclass Filter {\r\n static getDefault(total = DEFAULT_TOTAL) {\r\n return new Filter(DEFAULT_PAGE, DEFAULT_PAGE_COUNT, total);\r\n }\r\n\r\n constructor(\r\n page = DEFAULT_PAGE,\r\n pageCount = DEFAULT_PAGE_COUNT,\r\n total = DEFAULT_TOTAL,\r\n sortBy = DEFAULT_SORT_BY,\r\n sortOrder = DEFAULT_SORT_ORDER,\r\n employeeStatus = DEFAULT_EMPLOYEE_STATUS,\r\n activationStatus = DEFAULT_ACTIVATION_STATUS,\r\n role = DEFAULT_ROLE,\r\n search = DEFAULT_SEARCH,\r\n group = DEFAULT_GROUP\r\n ) {\r\n this.page = page;\r\n this.pageCount = pageCount;\r\n this.sortBy = sortBy;\r\n this.sortOrder = sortOrder;\r\n this.employeeStatus = employeeStatus;\r\n this.activationStatus = activationStatus;\r\n this.role = role;\r\n this.search = search;\r\n this.total = total;\r\n this.group = group;\r\n }\r\n\r\n getStartIndex = () => {\r\n return this.page * this.pageCount;\r\n };\r\n\r\n hasNext = () => {\r\n return this.total - this.getStartIndex() > this.pageCount;\r\n };\r\n\r\n hasPrev = () => {\r\n return this.page > 0;\r\n };\r\n\r\n toDto = () => {\r\n const {\r\n pageCount,\r\n sortBy,\r\n sortOrder,\r\n employeeStatus,\r\n activationStatus,\r\n role,\r\n search,\r\n group\r\n } = this;\r\n\r\n let dtoFilter = {\r\n StartIndex: this.getStartIndex(),\r\n Count: pageCount,\r\n sortby: sortBy,\r\n sortorder: sortOrder,\r\n employeestatus: employeeStatus,\r\n activationstatus: activationStatus,\r\n filtervalue: search,\r\n groupId: group\r\n //fields: \"id,status,isAdmin,isOwner,isVisitor,activationStatus,userName,email,displayName,avatarSmall,\r\n //listAdminModules,birthday,title,location,isLDAP,isSSO\"\r\n };\r\n\r\n switch (role) {\r\n case \"admin\":\r\n dtoFilter.isadministrator = true;\r\n break;\r\n case \"user\":\r\n dtoFilter.employeeType = 1;\r\n break;\r\n case \"guest\":\r\n dtoFilter.employeeType = 2;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return dtoFilter;\r\n };\r\n\r\n toUrlParams = () => {\r\n const dtoFilter = this.toDto();\r\n const str = toUrlParams(dtoFilter, true);\r\n return str;\r\n };\r\n\r\n clone(onlySorting) {\r\n return onlySorting\r\n ? new Filter(\r\n DEFAULT_PAGE,\r\n DEFAULT_PAGE_COUNT,\r\n DEFAULT_TOTAL,\r\n this.sortBy,\r\n this.sortOrder\r\n )\r\n : new Filter(\r\n this.page,\r\n this.pageCount,\r\n this.total,\r\n this.sortBy,\r\n this.sortOrder,\r\n this.employeeStatus,\r\n this.activationStatus,\r\n this.role,\r\n this.search,\r\n this.group\r\n );\r\n }\r\n\r\n equals(filter) {\r\n const equals =\r\n this.employeeStatus === filter.employeeStatus &&\r\n this.activationStatus === filter.activationStatus &&\r\n this.role === filter.role &&\r\n this.group === filter.group &&\r\n this.search === filter.search &&\r\n this.sortBy === filter.sortBy &&\r\n this.sortOrder === filter.sortOrder &&\r\n this.page === filter.page &&\r\n this.pageCount === filter.pageCount;\r\n\r\n return equals;\r\n }\r\n}\r\n\r\nexport default Filter;\r\n","import { createBrowserHistory } from 'history';\r\n\r\nexport default createBrowserHistory();","export const AUTH_KEY = 'asc_auth_key';\r\n\r\n/**\r\n * Enum for employee activation status.\r\n * @readonly\r\n */\r\nexport const EmployeeActivationStatus = Object.freeze({\r\n NotActivated: 0,\r\n Activated: 1,\r\n Pending: 2,\r\n AutoGenerated: 4\r\n});\r\n\r\n/**\r\n * Enum for type of confirm link.\r\n * @readonly\r\n */\r\nexport const ConfirmType = Object.freeze({\r\n EmpInvite: 0,\r\n LinkInvite: 1,\r\n PortalSuspend: 2,\r\n PortalContinue: 3,\r\n PortalRemove: 4,\r\n DnsChange: 5,\r\n PortalOwnerChange: 6,\r\n Activation: 7,\r\n EmailChange: 8,\r\n EmailActivation: 9,\r\n PasswordChange: 10,\r\n ProfileRemove: 11,\r\n PhoneActivation: 12,\r\n PhoneAuth: 13,\r\n Auth: 14,\r\n TfaActivation: 15,\r\n TfaAuth: 16\r\n});\r\n\r\n/**\r\n * Enum for result of validation confirm link.\r\n * @readonly\r\n */\r\nexport const ValidationResult = Object.freeze({\r\n Ok: 0,\r\n Invalid: 1,\r\n Expired: 2\r\n});\r\n\r\n/**\r\n * Enum for employee status.\r\n * @readonly\r\n */\r\nexport const EmployeeStatus = Object.freeze({\r\n Active: 1,\r\n Disabled: 2\r\n});\r\n","import axios from \"axios\";\r\nimport Cookies from \"universal-cookie\";\r\nimport history from \"../../../history\";\r\nimport { AUTH_KEY } from \"../../../constants\";\r\n\r\nconst PREFIX = \"api\";\r\nconst VERSION = \"2.0\";\r\nconst baseURL = `${window.location.origin}/${PREFIX}/${VERSION}`;\r\n\r\n\r\n/**\r\n * @description axios instance for ajax requests\r\n */\r\n\r\nconst client = axios.create({\r\n baseURL: baseURL,\r\n responseType: 'json',\r\n timeout: 30000, // default is `0` (no timeout)\r\n});\r\n\r\nsetAuthorizationToken(localStorage.getItem(AUTH_KEY));\r\n\r\n/**\r\n * @description if any of the API gets 401 status code, this method \r\n calls getAuthToken method to renew accessToken\r\n * updates the error configuration and retries all failed requests \r\n again\r\n*/\r\nclient.interceptors.response.use(\r\n response => {\r\n return response;\r\n },\r\n error => {\r\n if (error.response.status === 401) {\r\n //place your reentry code\r\n history.push(\"/login/error=unauthorized\");\r\n }\r\n\r\n if (error.response.status === 502) {\r\n //toastr.error(error.response);\r\n history.push(`/error/${error.response.status}`);\r\n }\r\n\r\n return error;\r\n }\r\n);\r\n\r\nexport function setAuthorizationToken(token) {\r\n const cookies = new Cookies();\r\n\r\n if (token) {\r\n client.defaults.headers.common['Authorization'] = token;\r\n localStorage.setItem(AUTH_KEY, token);\r\n\r\n const current = new Date();\r\n const nextYear = new Date();\r\n\r\n nextYear.setFullYear(current.getFullYear() + 1);\r\n\r\n cookies.set(AUTH_KEY, token, {\r\n path: \"/\",\r\n expires: nextYear\r\n });\r\n } else {\r\n localStorage.clear();\r\n delete client.defaults.headers.common['Authorization'];\r\n cookies.remove(AUTH_KEY, {\r\n path: \"/\"\r\n });\r\n }\r\n}\r\n\r\nconst checkResponseError = (res) => {\r\n if (res && res.data && res.data.error) {\r\n console.error(res.data.error);\r\n throw new Error(res.data.error.message);\r\n }\r\n}\r\n\r\n/**\r\n * @description wrapper for making ajax requests\r\n * @param {object} object with method,url,data etc.\r\n */\r\nexport const request = function(options) {\r\n const onSuccess = function(response) {\r\n checkResponseError(response);\r\n return response.data.response;\r\n };\r\n const onError = function(error) {\r\n console.error(\"Request Failed:\", error.config);\r\n if (error.response) {\r\n console.error(\"Status:\", error.response.status);\r\n console.error(\"Data:\", error.response.data);\r\n console.error(\"Headers:\", error.response.headers);\r\n } else {\r\n console.error(\"Error Message:\", error.message);\r\n }\r\n return Promise.reject(error.response || error.message);\r\n };\r\n\r\n return client(options)\r\n .then(onSuccess)\r\n .catch(onError);\r\n};\r\n","\r\nimport { request } from \"../client\";\r\n//import axios from \"axios\";\r\nimport Filter from \"./filter\";\r\n\r\nexport function getUserList(filter = Filter.getDefault()) {\r\n const params =\r\n filter && filter instanceof Filter\r\n ? `/filter.json?${filter.toUrlParams()}`\r\n : \"\";\r\n \r\n return request({\r\n method: \"get\",\r\n url: `/people${params}`\r\n });\r\n }","import Filter from \"./people/filter\";\r\nimport * as People from './people';\r\n\r\nexport default { Filter, People };","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","module.exports = require(\"regenerator-runtime\");\n","import * as api from \"../services/api\";\r\n//import { fetchGroups, fetchPeople } from \"../../../../../products/ASC.People/Client/src/store/people/actions\";\r\nimport { setAuthorizationToken } from \"../services/api/client\";\r\n//import { getFilterByLocation } from \"../../../../../products/ASC.People/Client/src/helpers/converters\";\r\n//import config from \"../../../package.json\";\r\n\r\nexport const LOGIN_POST = \"LOGIN_POST\";\r\nexport const SET_CURRENT_USER = \"SET_CURRENT_USER\";\r\nexport const SET_MODULE = \"SET_MODULE\";\r\nexport const SET_MODULES = \"SET_MODULES\";\r\nexport const SET_SETTINGS = \"SET_SETTINGS\";\r\nexport const SET_IS_LOADED = \"SET_IS_LOADED\";\r\nexport const LOGOUT = \"LOGOUT\";\r\n\r\nexport function setModule(module) {\r\n return {\r\n type: SET_MODULE,\r\n module\r\n };\r\n}\r\n\r\nexport function setCurrentUser(user) {\r\n return {\r\n type: SET_CURRENT_USER,\r\n user\r\n };\r\n}\r\n\r\nexport function setModules(modules) {\r\n return {\r\n type: SET_MODULES,\r\n modules\r\n };\r\n}\r\n\r\nexport function setSettings(settings) {\r\n return {\r\n type: SET_SETTINGS,\r\n settings\r\n };\r\n}\r\n\r\nexport function setIsLoaded(isLoaded) {\r\n return {\r\n type: SET_IS_LOADED,\r\n isLoaded\r\n };\r\n}\r\n\r\nexport function setLogout() {\r\n return {\r\n type: LOGOUT\r\n };\r\n}\r\n\r\nexport async function getUserInfo(dispatch, additionalAction) {\r\n const { user, modules, settings } = await api.getInitInfo();\r\n let newSettings = settings;\r\n if (user.isAdmin) {\r\n const inviteLinks = await api.getInvitationLinks();\r\n newSettings = Object.assign(newSettings, inviteLinks);\r\n }\r\n\r\n dispatch(setCurrentUser(user));\r\n dispatch(setModules(modules));\r\n dispatch(setSettings(newSettings));\r\n\r\n additionalAction && additionalAction();\r\n\r\n /*await fetchGroups(dispatch);\r\n\r\n var re = new RegExp(`${config.homepage}((/?)$|/filter)`, \"gm\");\r\n const match = window.location.pathname.match(re);\r\n\r\n if (match && match.length > 0)\r\n {\r\n const newFilter = getFilterByLocation(window.location);\r\n await fetchPeople(newFilter, dispatch);\r\n }*/\r\n\r\n return dispatch(setIsLoaded(true));\r\n}\r\n\r\nexport function logout() {\r\n return dispatch => {\r\n setAuthorizationToken();\r\n return dispatch(setLogout());\r\n };\r\n}\r\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport default isEmpty;\n","import {\r\n SET_CURRENT_USER,\r\n SET_MODULE,\r\n SET_MODULES,\r\n SET_IS_LOADED,\r\n LOGOUT,\r\n SET_SETTINGS\r\n} from \"./actions\";\r\nimport isEmpty from \"lodash/isEmpty\";\r\n\r\nconst initialState = {\r\n isAuthenticated: false,\r\n isLoaded: false,\r\n user: {},\r\n modules: [],\r\n settings: {\r\n currentProductId: null,\r\n culture: \"en-US\",\r\n trustedDomains: [],\r\n trustedDomainsType: 1,\r\n timezone: \"UTC\",\r\n utcOffset: \"00:00:00\",\r\n utcHoursOffset: 0,\r\n homepage: \"\",\r\n datePattern: \"M/d/yyyy\",\r\n datePatternJQ: \"00/00/0000\",\r\n dateTimePattern: \"dddd, MMMM d, yyyy h:mm:ss tt\",\r\n datepicker: {\r\n datePattern: \"mm/dd/yy\",\r\n dateTimePattern: \"DD, mm dd, yy h:mm:ss tt\",\r\n timePattern: \"h:mm tt\"\r\n },\r\n hasShortenService: false\r\n }\r\n};\r\n\r\nconst authReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case SET_CURRENT_USER:\r\n return Object.assign({}, state, {\r\n isAuthenticated: !isEmpty(action.user),\r\n user: action.user\r\n });\r\n case SET_MODULE:\r\n return Object.assign({}, state, {\r\n settings: {\r\n ...state.settings,\r\n currentProductId: action.module.id,\r\n homepage: action.module.homepage\r\n }\r\n });\r\n case SET_MODULES:\r\n return Object.assign({}, state, {\r\n modules: action.modules\r\n });\r\n case SET_SETTINGS:\r\n return Object.assign({}, state, {\r\n settings: { ...state.settings, ...action.settings }\r\n });\r\n case SET_IS_LOADED:\r\n return Object.assign({}, state, {\r\n isLoaded: action.isLoaded\r\n });\r\n case LOGOUT:\r\n return Object.assign({}, initialState, {\r\n isLoaded: true\r\n });\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default authReducer;\r\n","export function isAdmin(user) {\r\n let isPeopleAdmin = user.listAdminModules ? user.listAdminModules.includes('people') : false;\r\n return user.isAdmin || user.isOwner || isPeopleAdmin;\r\n};\r\n\r\nexport function isMe(user, userName) {\r\n return userName === \"@self\" || userName === user.userName;\r\n};\r\n\r\nexport function getCurrentModule(modules, currentModuleId) {\r\n return modules.find(module => module.id === currentModuleId);\r\n}","import * as actions from './actions';\r\nimport * as reducers from './reducers';\r\nimport * as selectors from './selectors';\r\n\r\nexport default { actions, reducers, selectors };"],"names":["toUrlParams","obj","skipNull","str","key","encodeURIComponent","DEFAULT_PAGE","DEFAULT_PAGE_COUNT","DEFAULT_TOTAL","DEFAULT_SORT_BY","DEFAULT_SORT_ORDER","DEFAULT_EMPLOYEE_STATUS","DEFAULT_ACTIVATION_STATUS","DEFAULT_ROLE","DEFAULT_SEARCH","DEFAULT_GROUP","Filter","total","page","pageCount","sortBy","sortOrder","employeeStatus","activationStatus","role","search","group","getStartIndex","hasNext","hasPrev","toDto","dtoFilter","StartIndex","Count","sortby","sortorder","employeestatus","activationstatus","filtervalue","groupId","isadministrator","employeeType","onlySorting","filter","equals","createBrowserHistory","AUTH_KEY","EmployeeActivationStatus","Object","freeze","NotActivated","Activated","Pending","AutoGenerated","ConfirmType","EmpInvite","LinkInvite","PortalSuspend","PortalContinue","PortalRemove","DnsChange","PortalOwnerChange","Activation","EmailChange","EmailActivation","PasswordChange","ProfileRemove","PhoneActivation","PhoneAuth","Auth","TfaActivation","TfaAuth","ValidationResult","Ok","Invalid","Expired","EmployeeStatus","Active","Disabled","PREFIX","VERSION","baseURL","window","location","origin","client","axios","create","responseType","timeout","setAuthorizationToken","localStorage","getItem","interceptors","response","use","error","status","history","push","token","cookies","Cookies","defaults","headers","common","setItem","current","Date","nextYear","setFullYear","getFullYear","set","path","expires","clear","remove","checkResponseError","res","data","console","Error","message","request","options","onSuccess","onError","config","Promise","reject","then","catch","getUserList","getDefault","params","method","url","People","undefined","require$$0","LOGIN_POST","SET_CURRENT_USER","SET_MODULE","SET_MODULES","SET_SETTINGS","SET_IS_LOADED","LOGOUT","setModule","module","type","setCurrentUser","user","setModules","modules","setSettings","settings","setIsLoaded","isLoaded","setLogout","getUserInfo","dispatch","additionalAction","api","newSettings","isAdmin","inviteLinks","assign","logout","objectProto","Symbol","hasOwnProperty","nativeObjectToString","symToStringTag","funcProto","funcToString","argsTag","funcTag","mapTag","objectTag","setTag","weakMapTag","dataViewTag","freeExports","freeModule","moduleExports","getTag","initialState","isAuthenticated","currentProductId","culture","trustedDomains","trustedDomainsType","timezone","utcOffset","utcHoursOffset","homepage","datePattern","datePatternJQ","dateTimePattern","datepicker","timePattern","hasShortenService","authReducer","state","action","isEmpty","id","isPeopleAdmin","listAdminModules","includes","isOwner","isMe","userName","getCurrentModule","currentModuleId","find","actions","reducers","selectors"],"mappings":"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"} \ No newline at end of file diff --git a/web/ASC.Web.Common/dist/asc-web-common.js b/web/ASC.Web.Common/dist/asc-web-common.js new file mode 100644 index 0000000000..91f6efb810 --- /dev/null +++ b/web/ASC.Web.Common/dist/asc-web-common.js @@ -0,0 +1,1374 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var axios = _interopDefault(require('axios')); +var Cookies = _interopDefault(require('universal-cookie')); +var history$1 = require('history'); + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} + +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; +} + +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + +function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + if (enumerableOnly) symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + }); + keys.push.apply(keys, symbols); + } + + return keys; +} + +function _objectSpread2(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + + if (i % 2) { + ownKeys(source, true).forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } else if (Object.getOwnPropertyDescriptors) { + Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); + } else { + ownKeys(source).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + } + + return target; +} + +var toUrlParams = function toUrlParams(obj, skipNull) { + var str = ""; + for (var key in obj) { + if (skipNull && !obj[key]) continue; + if (str !== "") { + str += "&"; + } + str += key + "=" + encodeURIComponent(obj[key]); + } + return str; +}; + +var DEFAULT_PAGE = 0; +var DEFAULT_PAGE_COUNT = 25; +var DEFAULT_TOTAL = 0; +var DEFAULT_SORT_BY = "firstname"; +var DEFAULT_SORT_ORDER = "ascending"; +var DEFAULT_EMPLOYEE_STATUS = null; +var DEFAULT_ACTIVATION_STATUS = null; +var DEFAULT_ROLE = null; +var DEFAULT_SEARCH = null; +var DEFAULT_GROUP = null; +var Filter = +function () { + _createClass(Filter, null, [{ + key: "getDefault", + value: function getDefault() { + var total = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_TOTAL; + return new Filter(DEFAULT_PAGE, DEFAULT_PAGE_COUNT, total); + } + }]); + function Filter() { + var _this = this; + var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_PAGE; + var _pageCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_PAGE_COUNT; + var total = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_TOTAL; + var _sortBy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_SORT_BY; + var _sortOrder = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : DEFAULT_SORT_ORDER; + var _employeeStatus = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : DEFAULT_EMPLOYEE_STATUS; + var _activationStatus = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : DEFAULT_ACTIVATION_STATUS; + var _role = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : DEFAULT_ROLE; + var _search = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : DEFAULT_SEARCH; + var _group = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : DEFAULT_GROUP; + _classCallCheck(this, Filter); + this.getStartIndex = function () { + return _this.page * _this.pageCount; + }; + this.hasNext = function () { + return _this.total - _this.getStartIndex() > _this.pageCount; + }; + this.hasPrev = function () { + return _this.page > 0; + }; + this.toDto = function () { + var pageCount = _this.pageCount, + sortBy = _this.sortBy, + sortOrder = _this.sortOrder, + employeeStatus = _this.employeeStatus, + activationStatus = _this.activationStatus, + role = _this.role, + search = _this.search, + group = _this.group; + var dtoFilter = { + StartIndex: _this.getStartIndex(), + Count: pageCount, + sortby: sortBy, + sortorder: sortOrder, + employeestatus: employeeStatus, + activationstatus: activationStatus, + filtervalue: search, + groupId: group + }; + switch (role) { + case "admin": + dtoFilter.isadministrator = true; + break; + case "user": + dtoFilter.employeeType = 1; + break; + case "guest": + dtoFilter.employeeType = 2; + break; + } + return dtoFilter; + }; + this.toUrlParams = function () { + var dtoFilter = _this.toDto(); + var str = toUrlParams(dtoFilter, true); + return str; + }; + this.page = page; + this.pageCount = _pageCount; + this.sortBy = _sortBy; + this.sortOrder = _sortOrder; + this.employeeStatus = _employeeStatus; + this.activationStatus = _activationStatus; + this.role = _role; + this.search = _search; + this.total = total; + this.group = _group; + } + _createClass(Filter, [{ + key: "clone", + value: function clone(onlySorting) { + return onlySorting ? new Filter(DEFAULT_PAGE, DEFAULT_PAGE_COUNT, DEFAULT_TOTAL, this.sortBy, this.sortOrder) : new Filter(this.page, this.pageCount, this.total, this.sortBy, this.sortOrder, this.employeeStatus, this.activationStatus, this.role, this.search, this.group); + } + }, { + key: "equals", + value: function equals(filter) { + var equals = this.employeeStatus === filter.employeeStatus && this.activationStatus === filter.activationStatus && this.role === filter.role && this.group === filter.group && this.search === filter.search && this.sortBy === filter.sortBy && this.sortOrder === filter.sortOrder && this.page === filter.page && this.pageCount === filter.pageCount; + return equals; + } + }]); + return Filter; +}(); + +var history = history$1.createBrowserHistory(); + +var AUTH_KEY = 'asc_auth_key'; +var EmployeeActivationStatus = Object.freeze({ + NotActivated: 0, + Activated: 1, + Pending: 2, + AutoGenerated: 4 +}); +var ConfirmType = Object.freeze({ + EmpInvite: 0, + LinkInvite: 1, + PortalSuspend: 2, + PortalContinue: 3, + PortalRemove: 4, + DnsChange: 5, + PortalOwnerChange: 6, + Activation: 7, + EmailChange: 8, + EmailActivation: 9, + PasswordChange: 10, + ProfileRemove: 11, + PhoneActivation: 12, + PhoneAuth: 13, + Auth: 14, + TfaActivation: 15, + TfaAuth: 16 +}); +var ValidationResult = Object.freeze({ + Ok: 0, + Invalid: 1, + Expired: 2 +}); +var EmployeeStatus = Object.freeze({ + Active: 1, + Disabled: 2 +}); + +var PREFIX = "api"; +var VERSION = "2.0"; +var baseURL = "".concat(window.location.origin, "/").concat(PREFIX, "/").concat(VERSION); +var client = axios.create({ + baseURL: baseURL, + responseType: 'json', + timeout: 30000 +}); +setAuthorizationToken(localStorage.getItem(AUTH_KEY)); +client.interceptors.response.use(function (response) { + return response; +}, function (error) { + if (error.response.status === 401) { + history.push("/login/error=unauthorized"); + } + if (error.response.status === 502) { + history.push("/error/".concat(error.response.status)); + } + return error; +}); +function setAuthorizationToken(token) { + var cookies = new Cookies(); + if (token) { + client.defaults.headers.common['Authorization'] = token; + localStorage.setItem(AUTH_KEY, token); + var current = new Date(); + var nextYear = new Date(); + nextYear.setFullYear(current.getFullYear() + 1); + cookies.set(AUTH_KEY, token, { + path: "/", + expires: nextYear + }); + } else { + localStorage.clear(); + delete client.defaults.headers.common['Authorization']; + cookies.remove(AUTH_KEY, { + path: "/" + }); + } +} +var checkResponseError = function checkResponseError(res) { + if (res && res.data && res.data.error) { + console.error(res.data.error); + throw new Error(res.data.error.message); + } +}; +var request = function request(options) { + var onSuccess = function onSuccess(response) { + checkResponseError(response); + return response.data.response; + }; + var onError = function onError(error) { + console.error("Request Failed:", error.config); + if (error.response) { + console.error("Status:", error.response.status); + console.error("Data:", error.response.data); + console.error("Headers:", error.response.headers); + } else { + console.error("Error Message:", error.message); + } + return Promise.reject(error.response || error.message); + }; + return client(options).then(onSuccess).catch(onError); +}; + +function getUserList() { + var filter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Filter.getDefault(); + var params = filter && filter instanceof Filter ? "/filter.json?".concat(filter.toUrlParams()) : ""; + return request({ + method: "get", + url: "/people".concat(params) + }); +} + +var People = /*#__PURE__*/Object.freeze({ + __proto__: null, + getUserList: getUserList +}); + +var index = { + Filter: Filter, + People: People +}; + +var api = /*#__PURE__*/Object.freeze({ + __proto__: null, + 'default': index +}); + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; +} + +var runtime_1 = createCommonjsModule(function (module) { +var runtime = (function (exports) { + var Op = Object.prototype; + var hasOwn = Op.hasOwnProperty; + var undefined$1; + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + function wrap(innerFn, outerFn, self, tryLocsList) { + var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; + var generator = Object.create(protoGenerator.prototype); + var context = new Context(tryLocsList || []); + generator._invoke = makeInvokeMethod(innerFn, self, context); + return generator; + } + exports.wrap = wrap; + function tryCatch(fn, obj, arg) { + try { + return { type: "normal", arg: fn.call(obj, arg) }; + } catch (err) { + return { type: "throw", arg: err }; + } + } + var GenStateSuspendedStart = "suspendedStart"; + var GenStateSuspendedYield = "suspendedYield"; + var GenStateExecuting = "executing"; + var GenStateCompleted = "completed"; + var ContinueSentinel = {}; + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + var IteratorPrototype = {}; + IteratorPrototype[iteratorSymbol] = function () { + return this; + }; + var getProto = Object.getPrototypeOf; + var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); + if (NativeIteratorPrototype && + NativeIteratorPrototype !== Op && + hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { + IteratorPrototype = NativeIteratorPrototype; + } + var Gp = GeneratorFunctionPrototype.prototype = + Generator.prototype = Object.create(IteratorPrototype); + GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; + GeneratorFunctionPrototype.constructor = GeneratorFunction; + GeneratorFunctionPrototype[toStringTagSymbol] = + GeneratorFunction.displayName = "GeneratorFunction"; + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function(method) { + prototype[method] = function(arg) { + return this._invoke(method, arg); + }; + }); + } + exports.isGeneratorFunction = function(genFun) { + var ctor = typeof genFun === "function" && genFun.constructor; + return ctor + ? ctor === GeneratorFunction || + (ctor.displayName || ctor.name) === "GeneratorFunction" + : false; + }; + exports.mark = function(genFun) { + if (Object.setPrototypeOf) { + Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); + } else { + genFun.__proto__ = GeneratorFunctionPrototype; + if (!(toStringTagSymbol in genFun)) { + genFun[toStringTagSymbol] = "GeneratorFunction"; + } + } + genFun.prototype = Object.create(Gp); + return genFun; + }; + exports.awrap = function(arg) { + return { __await: arg }; + }; + function AsyncIterator(generator) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + if (value && + typeof value === "object" && + hasOwn.call(value, "__await")) { + return Promise.resolve(value.__await).then(function(value) { + invoke("next", value, resolve, reject); + }, function(err) { + invoke("throw", err, resolve, reject); + }); + } + return Promise.resolve(value).then(function(unwrapped) { + result.value = unwrapped; + resolve(result); + }, function(error) { + return invoke("throw", error, resolve, reject); + }); + } + } + var previousPromise; + function enqueue(method, arg) { + function callInvokeWithMethodAndArg() { + return new Promise(function(resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + return previousPromise = + previousPromise ? previousPromise.then( + callInvokeWithMethodAndArg, + callInvokeWithMethodAndArg + ) : callInvokeWithMethodAndArg(); + } + this._invoke = enqueue; + } + defineIteratorMethods(AsyncIterator.prototype); + AsyncIterator.prototype[asyncIteratorSymbol] = function () { + return this; + }; + exports.AsyncIterator = AsyncIterator; + exports.async = function(innerFn, outerFn, self, tryLocsList) { + var iter = new AsyncIterator( + wrap(innerFn, outerFn, self, tryLocsList) + ); + return exports.isGeneratorFunction(outerFn) + ? iter + : iter.next().then(function(result) { + return result.done ? result.value : iter.next(); + }); + }; + function makeInvokeMethod(innerFn, self, context) { + var state = GenStateSuspendedStart; + return function invoke(method, arg) { + if (state === GenStateExecuting) { + throw new Error("Generator is already running"); + } + if (state === GenStateCompleted) { + if (method === "throw") { + throw arg; + } + return doneResult(); + } + context.method = method; + context.arg = arg; + while (true) { + var delegate = context.delegate; + if (delegate) { + var delegateResult = maybeInvokeDelegate(delegate, context); + if (delegateResult) { + if (delegateResult === ContinueSentinel) continue; + return delegateResult; + } + } + if (context.method === "next") { + context.sent = context._sent = context.arg; + } else if (context.method === "throw") { + if (state === GenStateSuspendedStart) { + state = GenStateCompleted; + throw context.arg; + } + context.dispatchException(context.arg); + } else if (context.method === "return") { + context.abrupt("return", context.arg); + } + state = GenStateExecuting; + var record = tryCatch(innerFn, self, context); + if (record.type === "normal") { + state = context.done + ? GenStateCompleted + : GenStateSuspendedYield; + if (record.arg === ContinueSentinel) { + continue; + } + return { + value: record.arg, + done: context.done + }; + } else if (record.type === "throw") { + state = GenStateCompleted; + context.method = "throw"; + context.arg = record.arg; + } + } + }; + } + function maybeInvokeDelegate(delegate, context) { + var method = delegate.iterator[context.method]; + if (method === undefined$1) { + context.delegate = null; + if (context.method === "throw") { + if (delegate.iterator["return"]) { + context.method = "return"; + context.arg = undefined$1; + maybeInvokeDelegate(delegate, context); + if (context.method === "throw") { + return ContinueSentinel; + } + } + context.method = "throw"; + context.arg = new TypeError( + "The iterator does not provide a 'throw' method"); + } + return ContinueSentinel; + } + var record = tryCatch(method, delegate.iterator, context.arg); + if (record.type === "throw") { + context.method = "throw"; + context.arg = record.arg; + context.delegate = null; + return ContinueSentinel; + } + var info = record.arg; + if (! info) { + context.method = "throw"; + context.arg = new TypeError("iterator result is not an object"); + context.delegate = null; + return ContinueSentinel; + } + if (info.done) { + context[delegate.resultName] = info.value; + context.next = delegate.nextLoc; + if (context.method !== "return") { + context.method = "next"; + context.arg = undefined$1; + } + } else { + return info; + } + context.delegate = null; + return ContinueSentinel; + } + defineIteratorMethods(Gp); + Gp[toStringTagSymbol] = "Generator"; + Gp[iteratorSymbol] = function() { + return this; + }; + Gp.toString = function() { + return "[object Generator]"; + }; + function pushTryEntry(locs) { + var entry = { tryLoc: locs[0] }; + if (1 in locs) { + entry.catchLoc = locs[1]; + } + if (2 in locs) { + entry.finallyLoc = locs[2]; + entry.afterLoc = locs[3]; + } + this.tryEntries.push(entry); + } + function resetTryEntry(entry) { + var record = entry.completion || {}; + record.type = "normal"; + delete record.arg; + entry.completion = record; + } + function Context(tryLocsList) { + this.tryEntries = [{ tryLoc: "root" }]; + tryLocsList.forEach(pushTryEntry, this); + this.reset(true); + } + exports.keys = function(object) { + var keys = []; + for (var key in object) { + keys.push(key); + } + keys.reverse(); + return function next() { + while (keys.length) { + var key = keys.pop(); + if (key in object) { + next.value = key; + next.done = false; + return next; + } + } + next.done = true; + return next; + }; + }; + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + if (iteratorMethod) { + return iteratorMethod.call(iterable); + } + if (typeof iterable.next === "function") { + return iterable; + } + if (!isNaN(iterable.length)) { + var i = -1, next = function next() { + while (++i < iterable.length) { + if (hasOwn.call(iterable, i)) { + next.value = iterable[i]; + next.done = false; + return next; + } + } + next.value = undefined$1; + next.done = true; + return next; + }; + return next.next = next; + } + } + return { next: doneResult }; + } + exports.values = values; + function doneResult() { + return { value: undefined$1, done: true }; + } + Context.prototype = { + constructor: Context, + reset: function(skipTempReset) { + this.prev = 0; + this.next = 0; + this.sent = this._sent = undefined$1; + this.done = false; + this.delegate = null; + this.method = "next"; + this.arg = undefined$1; + this.tryEntries.forEach(resetTryEntry); + if (!skipTempReset) { + for (var name in this) { + if (name.charAt(0) === "t" && + hasOwn.call(this, name) && + !isNaN(+name.slice(1))) { + this[name] = undefined$1; + } + } + } + }, + stop: function() { + this.done = true; + var rootEntry = this.tryEntries[0]; + var rootRecord = rootEntry.completion; + if (rootRecord.type === "throw") { + throw rootRecord.arg; + } + return this.rval; + }, + dispatchException: function(exception) { + if (this.done) { + throw exception; + } + var context = this; + function handle(loc, caught) { + record.type = "throw"; + record.arg = exception; + context.next = loc; + if (caught) { + context.method = "next"; + context.arg = undefined$1; + } + return !! caught; + } + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + var record = entry.completion; + if (entry.tryLoc === "root") { + return handle("end"); + } + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"); + var hasFinally = hasOwn.call(entry, "finallyLoc"); + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } else if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + } else if (hasCatch) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } + } else if (hasFinally) { + if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + } else { + throw new Error("try statement without catch or finally"); + } + } + } + }, + abrupt: function(type, arg) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc <= this.prev && + hasOwn.call(entry, "finallyLoc") && + this.prev < entry.finallyLoc) { + var finallyEntry = entry; + break; + } + } + if (finallyEntry && + (type === "break" || + type === "continue") && + finallyEntry.tryLoc <= arg && + arg <= finallyEntry.finallyLoc) { + finallyEntry = null; + } + var record = finallyEntry ? finallyEntry.completion : {}; + record.type = type; + record.arg = arg; + if (finallyEntry) { + this.method = "next"; + this.next = finallyEntry.finallyLoc; + return ContinueSentinel; + } + return this.complete(record); + }, + complete: function(record, afterLoc) { + if (record.type === "throw") { + throw record.arg; + } + if (record.type === "break" || + record.type === "continue") { + this.next = record.arg; + } else if (record.type === "return") { + this.rval = this.arg = record.arg; + this.method = "return"; + this.next = "end"; + } else if (record.type === "normal" && afterLoc) { + this.next = afterLoc; + } + return ContinueSentinel; + }, + finish: function(finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.finallyLoc === finallyLoc) { + this.complete(entry.completion, entry.afterLoc); + resetTryEntry(entry); + return ContinueSentinel; + } + } + }, + "catch": function(tryLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc === tryLoc) { + var record = entry.completion; + if (record.type === "throw") { + var thrown = record.arg; + resetTryEntry(entry); + } + return thrown; + } + } + throw new Error("illegal catch attempt"); + }, + delegateYield: function(iterable, resultName, nextLoc) { + this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }; + if (this.method === "next") { + this.arg = undefined$1; + } + return ContinueSentinel; + } + }; + return exports; +}( + module.exports +)); +try { + regeneratorRuntime = runtime; +} catch (accidentalStrictMode) { + Function("r", "regeneratorRuntime = r")(runtime); +} +}); + +var regenerator = runtime_1; + +var LOGIN_POST = "LOGIN_POST"; +var SET_CURRENT_USER = "SET_CURRENT_USER"; +var SET_MODULE = "SET_MODULE"; +var SET_MODULES = "SET_MODULES"; +var SET_SETTINGS = "SET_SETTINGS"; +var SET_IS_LOADED = "SET_IS_LOADED"; +var LOGOUT = "LOGOUT"; +function setModule(module) { + return { + type: SET_MODULE, + module: module + }; +} +function setCurrentUser(user) { + return { + type: SET_CURRENT_USER, + user: user + }; +} +function setModules(modules) { + return { + type: SET_MODULES, + modules: modules + }; +} +function setSettings(settings) { + return { + type: SET_SETTINGS, + settings: settings + }; +} +function setIsLoaded(isLoaded) { + return { + type: SET_IS_LOADED, + isLoaded: isLoaded + }; +} +function setLogout() { + return { + type: LOGOUT + }; +} +function getUserInfo(dispatch, additionalAction) { + var _ref, user, modules, settings, newSettings, inviteLinks; + return regenerator.async(function getUserInfo$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return regenerator.awrap(undefined()); + case 2: + _ref = _context.sent; + user = _ref.user; + modules = _ref.modules; + settings = _ref.settings; + newSettings = settings; + if (!user.isAdmin) { + _context.next = 12; + break; + } + _context.next = 10; + return regenerator.awrap(undefined()); + case 10: + inviteLinks = _context.sent; + newSettings = Object.assign(newSettings, inviteLinks); + case 12: + dispatch(setCurrentUser(user)); + dispatch(setModules(modules)); + dispatch(setSettings(newSettings)); + additionalAction && additionalAction(); + return _context.abrupt("return", dispatch(setIsLoaded(true))); + case 17: + case "end": + return _context.stop(); + } + } + }); +} +function logout() { + return function (dispatch) { + setAuthorizationToken(); + return dispatch(setLogout()); + }; +} + +var actions = /*#__PURE__*/Object.freeze({ + __proto__: null, + LOGIN_POST: LOGIN_POST, + SET_CURRENT_USER: SET_CURRENT_USER, + SET_MODULE: SET_MODULE, + SET_MODULES: SET_MODULES, + SET_SETTINGS: SET_SETTINGS, + SET_IS_LOADED: SET_IS_LOADED, + LOGOUT: LOGOUT, + setModule: setModule, + setCurrentUser: setCurrentUser, + setModules: setModules, + setSettings: setSettings, + setIsLoaded: setIsLoaded, + setLogout: setLogout, + getUserInfo: getUserInfo, + logout: logout +}); + +var objectProto = Object.prototype; +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + return value === proto; +} +var _isPrototype = isPrototype; + +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} +var _overArg = overArg; + +var nativeKeys = _overArg(Object.keys, Object); +var _nativeKeys = nativeKeys; + +var objectProto$1 = Object.prototype; +var hasOwnProperty = objectProto$1.hasOwnProperty; +function baseKeys(object) { + if (!_isPrototype(object)) { + return _nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} +var _baseKeys = baseKeys; + +var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; +var _freeGlobal = freeGlobal; + +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; +var root = _freeGlobal || freeSelf || Function('return this')(); +var _root = root; + +var Symbol$1 = _root.Symbol; +var _Symbol = Symbol$1; + +var objectProto$2 = Object.prototype; +var hasOwnProperty$1 = objectProto$2.hasOwnProperty; +var nativeObjectToString = objectProto$2.toString; +var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; +function getRawTag(value) { + var isOwn = hasOwnProperty$1.call(value, symToStringTag), + tag = value[symToStringTag]; + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} +var _getRawTag = getRawTag; + +var objectProto$3 = Object.prototype; +var nativeObjectToString$1 = objectProto$3.toString; +function objectToString(value) { + return nativeObjectToString$1.call(value); +} +var _objectToString = objectToString; + +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; +var symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined; +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag$1 && symToStringTag$1 in Object(value)) + ? _getRawTag(value) + : _objectToString(value); +} +var _baseGetTag = baseGetTag; + +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} +var isObject_1 = isObject; + +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; +function isFunction(value) { + if (!isObject_1(value)) { + return false; + } + var tag = _baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} +var isFunction_1 = isFunction; + +var coreJsData = _root['__core-js_shared__']; +var _coreJsData = coreJsData; + +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} +var _isMasked = isMasked; + +var funcProto = Function.prototype; +var funcToString = funcProto.toString; +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} +var _toSource = toSource; + +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; +var reIsHostCtor = /^\[object .+?Constructor\]$/; +var funcProto$1 = Function.prototype, + objectProto$4 = Object.prototype; +var funcToString$1 = funcProto$1.toString; +var hasOwnProperty$2 = objectProto$4.hasOwnProperty; +var reIsNative = RegExp('^' + + funcToString$1.call(hasOwnProperty$2).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); +function baseIsNative(value) { + if (!isObject_1(value) || _isMasked(value)) { + return false; + } + var pattern = isFunction_1(value) ? reIsNative : reIsHostCtor; + return pattern.test(_toSource(value)); +} +var _baseIsNative = baseIsNative; + +function getValue(object, key) { + return object == null ? undefined : object[key]; +} +var _getValue = getValue; + +function getNative(object, key) { + var value = _getValue(object, key); + return _baseIsNative(value) ? value : undefined; +} +var _getNative = getNative; + +var DataView = _getNative(_root, 'DataView'); +var _DataView = DataView; + +var Map = _getNative(_root, 'Map'); +var _Map = Map; + +var Promise$1 = _getNative(_root, 'Promise'); +var _Promise = Promise$1; + +var Set = _getNative(_root, 'Set'); +var _Set = Set; + +var WeakMap = _getNative(_root, 'WeakMap'); +var _WeakMap = WeakMap; + +var mapTag = '[object Map]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; +var dataViewTag = '[object DataView]'; +var dataViewCtorString = _toSource(_DataView), + mapCtorString = _toSource(_Map), + promiseCtorString = _toSource(_Promise), + setCtorString = _toSource(_Set), + weakMapCtorString = _toSource(_WeakMap); +var getTag = _baseGetTag; +if ((_DataView && getTag(new _DataView(new ArrayBuffer(1))) != dataViewTag) || + (_Map && getTag(new _Map) != mapTag) || + (_Promise && getTag(_Promise.resolve()) != promiseTag) || + (_Set && getTag(new _Set) != setTag) || + (_WeakMap && getTag(new _WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = _baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? _toSource(Ctor) : ''; + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; +} +var _getTag = getTag; + +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} +var isObjectLike_1 = isObjectLike; + +var argsTag = '[object Arguments]'; +function baseIsArguments(value) { + return isObjectLike_1(value) && _baseGetTag(value) == argsTag; +} +var _baseIsArguments = baseIsArguments; + +var objectProto$5 = Object.prototype; +var hasOwnProperty$3 = objectProto$5.hasOwnProperty; +var propertyIsEnumerable = objectProto$5.propertyIsEnumerable; +var isArguments = _baseIsArguments(function() { return arguments; }()) ? _baseIsArguments : function(value) { + return isObjectLike_1(value) && hasOwnProperty$3.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; +var isArguments_1 = isArguments; + +var isArray = Array.isArray; +var isArray_1 = isArray; + +var MAX_SAFE_INTEGER = 9007199254740991; +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} +var isLength_1 = isLength; + +function isArrayLike(value) { + return value != null && isLength_1(value.length) && !isFunction_1(value); +} +var isArrayLike_1 = isArrayLike; + +function stubFalse() { + return false; +} +var stubFalse_1 = stubFalse; + +var isBuffer_1 = createCommonjsModule(function (module, exports) { +var freeExports = exports && !exports.nodeType && exports; +var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; +var moduleExports = freeModule && freeModule.exports === freeExports; +var Buffer = moduleExports ? _root.Buffer : undefined; +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; +var isBuffer = nativeIsBuffer || stubFalse_1; +module.exports = isBuffer; +}); + +var argsTag$1 = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag$1 = '[object Function]', + mapTag$1 = '[object Map]', + numberTag = '[object Number]', + objectTag$1 = '[object Object]', + regexpTag = '[object RegExp]', + setTag$1 = '[object Set]', + stringTag = '[object String]', + weakMapTag$1 = '[object WeakMap]'; +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag$1 = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag$1] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag$1] = +typedArrayTags[mapTag$1] = typedArrayTags[numberTag] = +typedArrayTags[objectTag$1] = typedArrayTags[regexpTag] = +typedArrayTags[setTag$1] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag$1] = false; +function baseIsTypedArray(value) { + return isObjectLike_1(value) && + isLength_1(value.length) && !!typedArrayTags[_baseGetTag(value)]; +} +var _baseIsTypedArray = baseIsTypedArray; + +function baseUnary(func) { + return function(value) { + return func(value); + }; +} +var _baseUnary = baseUnary; + +var _nodeUtil = createCommonjsModule(function (module, exports) { +var freeExports = exports && !exports.nodeType && exports; +var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; +var moduleExports = freeModule && freeModule.exports === freeExports; +var freeProcess = moduleExports && _freeGlobal.process; +var nodeUtil = (function() { + try { + var types = freeModule && freeModule.require && freeModule.require('util').types; + if (types) { + return types; + } + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); +module.exports = nodeUtil; +}); + +var nodeIsTypedArray = _nodeUtil && _nodeUtil.isTypedArray; +var isTypedArray = nodeIsTypedArray ? _baseUnary(nodeIsTypedArray) : _baseIsTypedArray; +var isTypedArray_1 = isTypedArray; + +var mapTag$2 = '[object Map]', + setTag$2 = '[object Set]'; +var objectProto$6 = Object.prototype; +var hasOwnProperty$4 = objectProto$6.hasOwnProperty; +function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike_1(value) && + (isArray_1(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer_1(value) || isTypedArray_1(value) || isArguments_1(value))) { + return !value.length; + } + var tag = _getTag(value); + if (tag == mapTag$2 || tag == setTag$2) { + return !value.size; + } + if (_isPrototype(value)) { + return !_baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty$4.call(value, key)) { + return false; + } + } + return true; +} +var isEmpty_1 = isEmpty; + +var initialState = { + isAuthenticated: false, + isLoaded: false, + user: {}, + modules: [], + settings: { + currentProductId: null, + culture: "en-US", + trustedDomains: [], + trustedDomainsType: 1, + timezone: "UTC", + utcOffset: "00:00:00", + utcHoursOffset: 0, + homepage: "", + datePattern: "M/d/yyyy", + datePatternJQ: "00/00/0000", + dateTimePattern: "dddd, MMMM d, yyyy h:mm:ss tt", + datepicker: { + datePattern: "mm/dd/yy", + dateTimePattern: "DD, mm dd, yy h:mm:ss tt", + timePattern: "h:mm tt" + }, + hasShortenService: false + } +}; +var authReducer = function authReducer() { + var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; + var action = arguments.length > 1 ? arguments[1] : undefined; + switch (action.type) { + case SET_CURRENT_USER: + return Object.assign({}, state, { + isAuthenticated: !isEmpty_1(action.user), + user: action.user + }); + case SET_MODULE: + return Object.assign({}, state, { + settings: _objectSpread2({}, state.settings, { + currentProductId: action.module.id, + homepage: action.module.homepage + }) + }); + case SET_MODULES: + return Object.assign({}, state, { + modules: action.modules + }); + case SET_SETTINGS: + return Object.assign({}, state, { + settings: _objectSpread2({}, state.settings, {}, action.settings) + }); + case SET_IS_LOADED: + return Object.assign({}, state, { + isLoaded: action.isLoaded + }); + case LOGOUT: + return Object.assign({}, initialState, { + isLoaded: true + }); + default: + return state; + } +}; + +var reducers = /*#__PURE__*/Object.freeze({ + __proto__: null, + 'default': authReducer +}); + +function isAdmin(user) { + var isPeopleAdmin = user.listAdminModules ? user.listAdminModules.includes('people') : false; + return user.isAdmin || user.isOwner || isPeopleAdmin; +} +function isMe(user, userName) { + return userName === "@self" || userName === user.userName; +} +function getCurrentModule(modules, currentModuleId) { + return modules.find(function (module) { + return module.id === currentModuleId; + }); +} + +var selectors = /*#__PURE__*/Object.freeze({ + __proto__: null, + isAdmin: isAdmin, + isMe: isMe, + getCurrentModule: getCurrentModule +}); + +var index$1 = { + actions: actions, + reducers: reducers, + selectors: selectors +}; + +exports.Api = index; +exports.Auth = index$1; +//# sourceMappingURL=asc-web-common.js.map diff --git a/web/ASC.Web.Common/dist/asc-web-common.js.map b/web/ASC.Web.Common/dist/asc-web-common.js.map new file mode 100644 index 0000000000..3b3c342b60 --- /dev/null +++ b/web/ASC.Web.Common/dist/asc-web-common.js.map @@ -0,0 +1 @@ +{"version":3,"file":"asc-web-common.js","sources":["../src/utils/converter.js","../src/store/services/api/people/filter.js","../src/history/index.js","../src/constants/index.js","../src/store/services/api/client.js","../src/store/services/api/people/index.js","../src/store/services/api/index.js","../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js","../node_modules/@babel/runtime/regenerator/index.js","../src/store/auth/actions.js","../node_modules/lodash/_isPrototype.js","../node_modules/lodash/_overArg.js","../node_modules/lodash/_nativeKeys.js","../node_modules/lodash/_baseKeys.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObject.js","../node_modules/lodash/isFunction.js","../node_modules/lodash/_coreJsData.js","../node_modules/lodash/_isMasked.js","../node_modules/lodash/_toSource.js","../node_modules/lodash/_baseIsNative.js","../node_modules/lodash/_getValue.js","../node_modules/lodash/_getNative.js","../node_modules/lodash/_DataView.js","../node_modules/lodash/_Map.js","../node_modules/lodash/_Promise.js","../node_modules/lodash/_Set.js","../node_modules/lodash/_WeakMap.js","../node_modules/lodash/_getTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/_baseIsArguments.js","../node_modules/lodash/isArguments.js","../node_modules/lodash/isArray.js","../node_modules/lodash/isLength.js","../node_modules/lodash/isArrayLike.js","../node_modules/lodash/stubFalse.js","../node_modules/lodash/isBuffer.js","../node_modules/lodash/_baseIsTypedArray.js","../node_modules/lodash/_baseUnary.js","../node_modules/lodash/_nodeUtil.js","../node_modules/lodash/isTypedArray.js","../node_modules/lodash/isEmpty.js","../src/store/auth/reducers.js","../src/store/auth/selectors.js","../src/store/auth/index.js"],"sourcesContent":["export const toUrlParams = (obj, skipNull) => {\r\n let str = \"\";\r\n for (var key in obj) {\r\n if (skipNull && !obj[key]) continue;\r\n\r\n if (str !== \"\") {\r\n str += \"&\";\r\n }\r\n\r\n str += key + \"=\" + encodeURIComponent(obj[key]);\r\n }\r\n\r\n return str;\r\n};\r\n","import { toUrlParams } from \"../../../../utils/converter\";\r\n\r\nconst DEFAULT_PAGE = 0;\r\nconst DEFAULT_PAGE_COUNT = 25;\r\nconst DEFAULT_TOTAL = 0;\r\nconst DEFAULT_SORT_BY = \"firstname\";\r\nconst DEFAULT_SORT_ORDER = \"ascending\";\r\nconst DEFAULT_EMPLOYEE_STATUS = null;\r\nconst DEFAULT_ACTIVATION_STATUS = null;\r\nconst DEFAULT_ROLE = null;\r\nconst DEFAULT_SEARCH = null;\r\nconst DEFAULT_GROUP = null;\r\n\r\nclass Filter {\r\n static getDefault(total = DEFAULT_TOTAL) {\r\n return new Filter(DEFAULT_PAGE, DEFAULT_PAGE_COUNT, total);\r\n }\r\n\r\n constructor(\r\n page = DEFAULT_PAGE,\r\n pageCount = DEFAULT_PAGE_COUNT,\r\n total = DEFAULT_TOTAL,\r\n sortBy = DEFAULT_SORT_BY,\r\n sortOrder = DEFAULT_SORT_ORDER,\r\n employeeStatus = DEFAULT_EMPLOYEE_STATUS,\r\n activationStatus = DEFAULT_ACTIVATION_STATUS,\r\n role = DEFAULT_ROLE,\r\n search = DEFAULT_SEARCH,\r\n group = DEFAULT_GROUP\r\n ) {\r\n this.page = page;\r\n this.pageCount = pageCount;\r\n this.sortBy = sortBy;\r\n this.sortOrder = sortOrder;\r\n this.employeeStatus = employeeStatus;\r\n this.activationStatus = activationStatus;\r\n this.role = role;\r\n this.search = search;\r\n this.total = total;\r\n this.group = group;\r\n }\r\n\r\n getStartIndex = () => {\r\n return this.page * this.pageCount;\r\n };\r\n\r\n hasNext = () => {\r\n return this.total - this.getStartIndex() > this.pageCount;\r\n };\r\n\r\n hasPrev = () => {\r\n return this.page > 0;\r\n };\r\n\r\n toDto = () => {\r\n const {\r\n pageCount,\r\n sortBy,\r\n sortOrder,\r\n employeeStatus,\r\n activationStatus,\r\n role,\r\n search,\r\n group\r\n } = this;\r\n\r\n let dtoFilter = {\r\n StartIndex: this.getStartIndex(),\r\n Count: pageCount,\r\n sortby: sortBy,\r\n sortorder: sortOrder,\r\n employeestatus: employeeStatus,\r\n activationstatus: activationStatus,\r\n filtervalue: search,\r\n groupId: group\r\n //fields: \"id,status,isAdmin,isOwner,isVisitor,activationStatus,userName,email,displayName,avatarSmall,\r\n //listAdminModules,birthday,title,location,isLDAP,isSSO\"\r\n };\r\n\r\n switch (role) {\r\n case \"admin\":\r\n dtoFilter.isadministrator = true;\r\n break;\r\n case \"user\":\r\n dtoFilter.employeeType = 1;\r\n break;\r\n case \"guest\":\r\n dtoFilter.employeeType = 2;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return dtoFilter;\r\n };\r\n\r\n toUrlParams = () => {\r\n const dtoFilter = this.toDto();\r\n const str = toUrlParams(dtoFilter, true);\r\n return str;\r\n };\r\n\r\n clone(onlySorting) {\r\n return onlySorting\r\n ? new Filter(\r\n DEFAULT_PAGE,\r\n DEFAULT_PAGE_COUNT,\r\n DEFAULT_TOTAL,\r\n this.sortBy,\r\n this.sortOrder\r\n )\r\n : new Filter(\r\n this.page,\r\n this.pageCount,\r\n this.total,\r\n this.sortBy,\r\n this.sortOrder,\r\n this.employeeStatus,\r\n this.activationStatus,\r\n this.role,\r\n this.search,\r\n this.group\r\n );\r\n }\r\n\r\n equals(filter) {\r\n const equals =\r\n this.employeeStatus === filter.employeeStatus &&\r\n this.activationStatus === filter.activationStatus &&\r\n this.role === filter.role &&\r\n this.group === filter.group &&\r\n this.search === filter.search &&\r\n this.sortBy === filter.sortBy &&\r\n this.sortOrder === filter.sortOrder &&\r\n this.page === filter.page &&\r\n this.pageCount === filter.pageCount;\r\n\r\n return equals;\r\n }\r\n}\r\n\r\nexport default Filter;\r\n","import { createBrowserHistory } from 'history';\r\n\r\nexport default createBrowserHistory();","export const AUTH_KEY = 'asc_auth_key';\r\n\r\n/**\r\n * Enum for employee activation status.\r\n * @readonly\r\n */\r\nexport const EmployeeActivationStatus = Object.freeze({\r\n NotActivated: 0,\r\n Activated: 1,\r\n Pending: 2,\r\n AutoGenerated: 4\r\n});\r\n\r\n/**\r\n * Enum for type of confirm link.\r\n * @readonly\r\n */\r\nexport const ConfirmType = Object.freeze({\r\n EmpInvite: 0,\r\n LinkInvite: 1,\r\n PortalSuspend: 2,\r\n PortalContinue: 3,\r\n PortalRemove: 4,\r\n DnsChange: 5,\r\n PortalOwnerChange: 6,\r\n Activation: 7,\r\n EmailChange: 8,\r\n EmailActivation: 9,\r\n PasswordChange: 10,\r\n ProfileRemove: 11,\r\n PhoneActivation: 12,\r\n PhoneAuth: 13,\r\n Auth: 14,\r\n TfaActivation: 15,\r\n TfaAuth: 16\r\n});\r\n\r\n/**\r\n * Enum for result of validation confirm link.\r\n * @readonly\r\n */\r\nexport const ValidationResult = Object.freeze({\r\n Ok: 0,\r\n Invalid: 1,\r\n Expired: 2\r\n});\r\n\r\n/**\r\n * Enum for employee status.\r\n * @readonly\r\n */\r\nexport const EmployeeStatus = Object.freeze({\r\n Active: 1,\r\n Disabled: 2\r\n});\r\n","import axios from \"axios\";\r\nimport Cookies from \"universal-cookie\";\r\nimport history from \"../../../history\";\r\nimport { AUTH_KEY } from \"../../../constants\";\r\n\r\nconst PREFIX = \"api\";\r\nconst VERSION = \"2.0\";\r\nconst baseURL = `${window.location.origin}/${PREFIX}/${VERSION}`;\r\n\r\n\r\n/**\r\n * @description axios instance for ajax requests\r\n */\r\n\r\nconst client = axios.create({\r\n baseURL: baseURL,\r\n responseType: 'json',\r\n timeout: 30000, // default is `0` (no timeout)\r\n});\r\n\r\nsetAuthorizationToken(localStorage.getItem(AUTH_KEY));\r\n\r\n/**\r\n * @description if any of the API gets 401 status code, this method \r\n calls getAuthToken method to renew accessToken\r\n * updates the error configuration and retries all failed requests \r\n again\r\n*/\r\nclient.interceptors.response.use(\r\n response => {\r\n return response;\r\n },\r\n error => {\r\n if (error.response.status === 401) {\r\n //place your reentry code\r\n history.push(\"/login/error=unauthorized\");\r\n }\r\n\r\n if (error.response.status === 502) {\r\n //toastr.error(error.response);\r\n history.push(`/error/${error.response.status}`);\r\n }\r\n\r\n return error;\r\n }\r\n);\r\n\r\nexport function setAuthorizationToken(token) {\r\n const cookies = new Cookies();\r\n\r\n if (token) {\r\n client.defaults.headers.common['Authorization'] = token;\r\n localStorage.setItem(AUTH_KEY, token);\r\n\r\n const current = new Date();\r\n const nextYear = new Date();\r\n\r\n nextYear.setFullYear(current.getFullYear() + 1);\r\n\r\n cookies.set(AUTH_KEY, token, {\r\n path: \"/\",\r\n expires: nextYear\r\n });\r\n } else {\r\n localStorage.clear();\r\n delete client.defaults.headers.common['Authorization'];\r\n cookies.remove(AUTH_KEY, {\r\n path: \"/\"\r\n });\r\n }\r\n}\r\n\r\nconst checkResponseError = (res) => {\r\n if (res && res.data && res.data.error) {\r\n console.error(res.data.error);\r\n throw new Error(res.data.error.message);\r\n }\r\n}\r\n\r\n/**\r\n * @description wrapper for making ajax requests\r\n * @param {object} object with method,url,data etc.\r\n */\r\nexport const request = function(options) {\r\n const onSuccess = function(response) {\r\n checkResponseError(response);\r\n return response.data.response;\r\n };\r\n const onError = function(error) {\r\n console.error(\"Request Failed:\", error.config);\r\n if (error.response) {\r\n console.error(\"Status:\", error.response.status);\r\n console.error(\"Data:\", error.response.data);\r\n console.error(\"Headers:\", error.response.headers);\r\n } else {\r\n console.error(\"Error Message:\", error.message);\r\n }\r\n return Promise.reject(error.response || error.message);\r\n };\r\n\r\n return client(options)\r\n .then(onSuccess)\r\n .catch(onError);\r\n};\r\n","\r\nimport { request } from \"../client\";\r\n//import axios from \"axios\";\r\nimport Filter from \"./filter\";\r\n\r\nexport function getUserList(filter = Filter.getDefault()) {\r\n const params =\r\n filter && filter instanceof Filter\r\n ? `/filter.json?${filter.toUrlParams()}`\r\n : \"\";\r\n \r\n return request({\r\n method: \"get\",\r\n url: `/people${params}`\r\n });\r\n }","import Filter from \"./people/filter\";\r\nimport * as People from './people';\r\n\r\nexport default { Filter, People };","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","module.exports = require(\"regenerator-runtime\");\n","import * as api from \"../services/api\";\r\n//import { fetchGroups, fetchPeople } from \"../../../../../products/ASC.People/Client/src/store/people/actions\";\r\nimport { setAuthorizationToken } from \"../services/api/client\";\r\n//import { getFilterByLocation } from \"../../../../../products/ASC.People/Client/src/helpers/converters\";\r\n//import config from \"../../../package.json\";\r\n\r\nexport const LOGIN_POST = \"LOGIN_POST\";\r\nexport const SET_CURRENT_USER = \"SET_CURRENT_USER\";\r\nexport const SET_MODULE = \"SET_MODULE\";\r\nexport const SET_MODULES = \"SET_MODULES\";\r\nexport const SET_SETTINGS = \"SET_SETTINGS\";\r\nexport const SET_IS_LOADED = \"SET_IS_LOADED\";\r\nexport const LOGOUT = \"LOGOUT\";\r\n\r\nexport function setModule(module) {\r\n return {\r\n type: SET_MODULE,\r\n module\r\n };\r\n}\r\n\r\nexport function setCurrentUser(user) {\r\n return {\r\n type: SET_CURRENT_USER,\r\n user\r\n };\r\n}\r\n\r\nexport function setModules(modules) {\r\n return {\r\n type: SET_MODULES,\r\n modules\r\n };\r\n}\r\n\r\nexport function setSettings(settings) {\r\n return {\r\n type: SET_SETTINGS,\r\n settings\r\n };\r\n}\r\n\r\nexport function setIsLoaded(isLoaded) {\r\n return {\r\n type: SET_IS_LOADED,\r\n isLoaded\r\n };\r\n}\r\n\r\nexport function setLogout() {\r\n return {\r\n type: LOGOUT\r\n };\r\n}\r\n\r\nexport async function getUserInfo(dispatch, additionalAction) {\r\n const { user, modules, settings } = await api.getInitInfo();\r\n let newSettings = settings;\r\n if (user.isAdmin) {\r\n const inviteLinks = await api.getInvitationLinks();\r\n newSettings = Object.assign(newSettings, inviteLinks);\r\n }\r\n\r\n dispatch(setCurrentUser(user));\r\n dispatch(setModules(modules));\r\n dispatch(setSettings(newSettings));\r\n\r\n additionalAction && additionalAction();\r\n\r\n /*await fetchGroups(dispatch);\r\n\r\n var re = new RegExp(`${config.homepage}((/?)$|/filter)`, \"gm\");\r\n const match = window.location.pathname.match(re);\r\n\r\n if (match && match.length > 0)\r\n {\r\n const newFilter = getFilterByLocation(window.location);\r\n await fetchPeople(newFilter, dispatch);\r\n }*/\r\n\r\n return dispatch(setIsLoaded(true));\r\n}\r\n\r\nexport function logout() {\r\n return dispatch => {\r\n setAuthorizationToken();\r\n return dispatch(setLogout());\r\n };\r\n}\r\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseKeys = require('./_baseKeys'),\n getTag = require('./_getTag'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLike = require('./isArrayLike'),\n isBuffer = require('./isBuffer'),\n isPrototype = require('./_isPrototype'),\n isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = isEmpty;\n","import {\r\n SET_CURRENT_USER,\r\n SET_MODULE,\r\n SET_MODULES,\r\n SET_IS_LOADED,\r\n LOGOUT,\r\n SET_SETTINGS\r\n} from \"./actions\";\r\nimport isEmpty from \"lodash/isEmpty\";\r\n\r\nconst initialState = {\r\n isAuthenticated: false,\r\n isLoaded: false,\r\n user: {},\r\n modules: [],\r\n settings: {\r\n currentProductId: null,\r\n culture: \"en-US\",\r\n trustedDomains: [],\r\n trustedDomainsType: 1,\r\n timezone: \"UTC\",\r\n utcOffset: \"00:00:00\",\r\n utcHoursOffset: 0,\r\n homepage: \"\",\r\n datePattern: \"M/d/yyyy\",\r\n datePatternJQ: \"00/00/0000\",\r\n dateTimePattern: \"dddd, MMMM d, yyyy h:mm:ss tt\",\r\n datepicker: {\r\n datePattern: \"mm/dd/yy\",\r\n dateTimePattern: \"DD, mm dd, yy h:mm:ss tt\",\r\n timePattern: \"h:mm tt\"\r\n },\r\n hasShortenService: false\r\n }\r\n};\r\n\r\nconst authReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case SET_CURRENT_USER:\r\n return Object.assign({}, state, {\r\n isAuthenticated: !isEmpty(action.user),\r\n user: action.user\r\n });\r\n case SET_MODULE:\r\n return Object.assign({}, state, {\r\n settings: {\r\n ...state.settings,\r\n currentProductId: action.module.id,\r\n homepage: action.module.homepage\r\n }\r\n });\r\n case SET_MODULES:\r\n return Object.assign({}, state, {\r\n modules: action.modules\r\n });\r\n case SET_SETTINGS:\r\n return Object.assign({}, state, {\r\n settings: { ...state.settings, ...action.settings }\r\n });\r\n case SET_IS_LOADED:\r\n return Object.assign({}, state, {\r\n isLoaded: action.isLoaded\r\n });\r\n case LOGOUT:\r\n return Object.assign({}, initialState, {\r\n isLoaded: true\r\n });\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default authReducer;\r\n","export function isAdmin(user) {\r\n let isPeopleAdmin = user.listAdminModules ? user.listAdminModules.includes('people') : false;\r\n return user.isAdmin || user.isOwner || isPeopleAdmin;\r\n};\r\n\r\nexport function isMe(user, userName) {\r\n return userName === \"@self\" || userName === user.userName;\r\n};\r\n\r\nexport function getCurrentModule(modules, currentModuleId) {\r\n return modules.find(module => module.id === currentModuleId);\r\n}","import * as actions from './actions';\r\nimport * as reducers from './reducers';\r\nimport * as selectors from './selectors';\r\n\r\nexport default { actions, reducers, selectors };"],"names":["toUrlParams","obj","skipNull","str","key","encodeURIComponent","DEFAULT_PAGE","DEFAULT_PAGE_COUNT","DEFAULT_TOTAL","DEFAULT_SORT_BY","DEFAULT_SORT_ORDER","DEFAULT_EMPLOYEE_STATUS","DEFAULT_ACTIVATION_STATUS","DEFAULT_ROLE","DEFAULT_SEARCH","DEFAULT_GROUP","Filter","total","page","pageCount","sortBy","sortOrder","employeeStatus","activationStatus","role","search","group","getStartIndex","hasNext","hasPrev","toDto","dtoFilter","StartIndex","Count","sortby","sortorder","employeestatus","activationstatus","filtervalue","groupId","isadministrator","employeeType","onlySorting","filter","equals","createBrowserHistory","AUTH_KEY","EmployeeActivationStatus","Object","freeze","NotActivated","Activated","Pending","AutoGenerated","ConfirmType","EmpInvite","LinkInvite","PortalSuspend","PortalContinue","PortalRemove","DnsChange","PortalOwnerChange","Activation","EmailChange","EmailActivation","PasswordChange","ProfileRemove","PhoneActivation","PhoneAuth","Auth","TfaActivation","TfaAuth","ValidationResult","Ok","Invalid","Expired","EmployeeStatus","Active","Disabled","PREFIX","VERSION","baseURL","window","location","origin","client","axios","create","responseType","timeout","setAuthorizationToken","localStorage","getItem","interceptors","response","use","error","status","history","push","token","cookies","Cookies","defaults","headers","common","setItem","current","Date","nextYear","setFullYear","getFullYear","set","path","expires","clear","remove","checkResponseError","res","data","console","Error","message","request","options","onSuccess","onError","config","Promise","reject","then","catch","getUserList","getDefault","params","method","url","People","undefined","require$$0","LOGIN_POST","SET_CURRENT_USER","SET_MODULE","SET_MODULES","SET_SETTINGS","SET_IS_LOADED","LOGOUT","setModule","module","type","setCurrentUser","user","setModules","modules","setSettings","settings","setIsLoaded","isLoaded","setLogout","getUserInfo","dispatch","additionalAction","api","newSettings","isAdmin","inviteLinks","assign","logout","overArg","objectProto","isPrototype","nativeKeys","global","freeGlobal","Symbol","root","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","objectToString","isObject","baseGetTag","coreJsData","funcProto","funcToString","isMasked","isFunction","toSource","getValue","baseIsNative","getNative","DataView","Map","Set","WeakMap","isObjectLike","baseIsArguments","isLength","stubFalse","argsTag","funcTag","mapTag","objectTag","setTag","weakMapTag","dataViewTag","nodeUtil","baseUnary","baseIsTypedArray","isArrayLike","isArray","isBuffer","isTypedArray","isArguments","getTag","baseKeys","initialState","isAuthenticated","currentProductId","culture","trustedDomains","trustedDomainsType","timezone","utcOffset","utcHoursOffset","homepage","datePattern","datePatternJQ","dateTimePattern","datepicker","timePattern","hasShortenService","authReducer","state","action","isEmpty","id","isPeopleAdmin","listAdminModules","includes","isOwner","isMe","userName","getCurrentModule","currentModuleId","find","actions","reducers","selectors"],"mappings":"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"} \ No newline at end of file diff --git a/web/ASC.Web.Common/jest.config.js b/web/ASC.Web.Common/jest.config.js new file mode 100644 index 0000000000..51a20809b7 --- /dev/null +++ b/web/ASC.Web.Common/jest.config.js @@ -0,0 +1,19 @@ +module.exports = { + setupFiles: [ + '/test/setup-tests.js' + ], + setupFilesAfterEnv: [ + '/scripts/setup-test-framework.js' + ], + transform: { + '^.+\\.js$': '/test/transform-babel-jest.js', + }, + /* It solves css/less/scss import issues. + You might have similar issues with different file extensions (e.g. md). + Just search for " jest loader" + */ + moduleNameMapper: { + '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': + '/test/transform-file.js' + }, +}; diff --git a/web/ASC.Web.Common/package.json b/web/ASC.Web.Common/package.json new file mode 100644 index 0000000000..88c13b7d32 --- /dev/null +++ b/web/ASC.Web.Common/package.json @@ -0,0 +1,109 @@ +{ + "name": "asc-web-common", + "version": "1.0.0", + "description": "Ascensio System SIA common components and solutions library", + "license": "AGPL-3.0", + "main": "dist/asc-web-common.js", + "module": "dist/asc-web-common.esm.js", + "jsnext:main": "dist/asc-web-common.es.js", + "files": [ + "dist", + "README.md", + "LICENSE", + "package.json" + ], + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "scripts": { + "build": "rimraf dist && cross-env NODE_ENV=production rollup -c", + "start": "cross-env NODE_ENV=development rollup -c -w", + "prepare": "yarn run build", + "lint": "eslint .", + "test": "jest", + "test:watch": "jest --watch", + "test:coverage": "jest --coverage", + "storybook": "start-storybook -p 6006 -s ./public", + "build:storybook": "build-storybook -c .storybook -o storybook-static -s public", + "bump": "yarn version --no-git-tag-version --patch && git add ./package.json && git commit -m \"web: components: bump version\"" + }, + "peerDependencies": { + "prop-types": "^15.7.2", + "react": "^16.9.0", + "react-dom": "^16.9.0", + "react-values": "^0.3.3", + "styled-components": "^4.3.2" + }, + "devDependencies": { + "@babel/cli": "^7.5.5", + "@babel/core": "^7.5.5", + "@babel/plugin-proposal-class-properties": "^7.5.5", + "@babel/plugin-proposal-export-default-from": "^7.5.2", + "@babel/plugin-proposal-export-namespace-from": "^7.5.2", + "@babel/plugin-transform-runtime": "^7.5.5", + "@babel/preset-env": "^7.5.5", + "@babel/preset-react": "^7.0.0", + "@emotion/babel-preset-css-prop": "^10.0.17", + "@storybook/addon-a11y": "^5.1.11", + "@storybook/addon-actions": "^5.2.5", + "@storybook/addon-console": "^1.2.1", + "@storybook/addon-knobs": "^5.2.5", + "@storybook/addon-links": "^5.2.5", + "@storybook/addon-options": "^5.2.5", + "@storybook/addon-storysource": "^5.2.5", + "@storybook/addon-viewport": "^5.2.5", + "@storybook/addons": "^5.2.5", + "@storybook/react": "^5.2.5", + "@svgr/rollup": "^4.3.3", + "@svgr/webpack": "^4.3.2", + "@testing-library/react": "^8.0.8", + "@types/jest": "^24.0.17", + "babel-eslint": "^10.0.2", + "babel-jest": "^24.8.0", + "babel-loader": "^8.0.6", + "babel-plugin-inline-react-svg": "^1.1.0", + "babel-plugin-transform-dynamic-import": "^2.1.0", + "babel-plugin-transform-rename-import": "^2.3.0", + "cross-env": "^5.2.0", + "css-loader": "^3.2.0", + "enzyme": "^3.10.0", + "enzyme-adapter-react-16": "^1.14.0", + "eslint": "^6.3.0", + "eslint-plugin-react": "^7.14.3", + "jest": "^24.8.0", + "jest-enzyme": "^7.1.0", + "jest-junit": "^8.0.0", + "postcss": "^7.0.17", + "react": "^16.9.0", + "react-dom": "^16.9.0", + "react-values": "^0.3.3", + "rollup": "^1.21.1", + "rollup-plugin-babel": "^4.3.3", + "rollup-plugin-cleanup": "^3.1.1", + "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-copy": "^3.1.0", + "rollup-plugin-generate-package-json": "^3.1.3", + "rollup-plugin-json": "^4.0.0", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-peer-deps-external": "^2.2.0", + "rollup-plugin-postcss": "^2.0.3", + "rollup-plugin-replace": "^2.2.0", + "rollup-plugin-url": "^2.2.2", + "storybook-readme": "^5.0.8", + "styled-components": "^4.3.2", + "svg-inline-loader": "^0.8.0", + "prop-types": "^15.7.2" + }, + "dependencies": { + "lodash": "4.17.15", + "lodash-es": "4.17.15", + "moment": "^2.24.0", + "universal-cookie": "^4.0.2", + "history": "4.9.0", + "axios": "^0.19.0" + }, + "resolutions": { + "js-yaml": "3.13.1" + } +} diff --git a/web/ASC.Web.Common/public/empty_screen_filter.png b/web/ASC.Web.Common/public/empty_screen_filter.png new file mode 100644 index 0000000000000000000000000000000000000000..e79ba5e56fbdac7a2db5720d9ed998233ad82856 GIT binary patch literal 7586 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 literal 0 HcmV?d00001 diff --git a/web/ASC.Web.Common/public/favicon.ico b/web/ASC.Web.Common/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..dcddd3efdfbddbc5a964795adf449731ba8cd6a7 GIT binary patch literal 8348 zcmeHLUrbwN6u&dZH$ts*!I zQeYWb(5*2mbIt*#SxJkd-2f{X!EC8xI(BclrDcHL%Y5ns`TWi;cXqR7m%mF)Z}Q9e zzH@%(_dECWK9wML5YG`LN#IBl2?~OUCkR4;qj-OwAl}C31f0VZLX83W|I0&P;1zY} zmS_wX1FZngG}N~0J@suoS=q^(_3gY+*}pKhWgTbFSR_d98`Xs6*9r?BSX@w3QG& zu$MGPc13`COV6>{6@DZe<$fWn(r?bLn56;Y8Rum8W3P~BfO@^uhvXu?)F-@A%F!j3 ziCxXVJ1OH`Ck=ozR zwA+U#w?6CVZ#AK{0r%iu(2(Ykb{Os}eS_gKVW5fR zCu#NKFSP5giF&jVfCgxRX1GVR^Wu0lwJ=uAF8*AFHWQ*I){f-MJN1frx1L&X>)8c& zIoew2S?~f+nB~E65giyQ6y`??(RKnn!F%oog`On>*R@o@ag4)~K+1#|f& zn)xQ4WiBTo5#kx=aBV%B&$0*pCxD?zjP3rPfTle!=vz45hb_Lb@>U-TMJ^BWc$}zD zaWfNF@;PTHY@7`gpZ1|A0ePqcFI?pKCtTX`PiHMB8+<_wBm+U<7c}_xfsT%zv1#kr zWnDdoMAUIX94)%~P(A-+E=|0L@*+p%<34GQBXykeof@wFNG)g3w%*=(!fnw}!(Wdb z|M4OcCo-(gzDKr09yu$wFg20O(1t9DZw+;J@!##x3wX^v!T zvoh)0>GoG_%?7Q#VW;0+t@FEU#scnY1kwLfRUYJ_4m{vXy;7Wa7RSxrEHljBEDd0w z2*CL=1Ms9Ch}=+q8h1V4!u^mR#6U6-1io)jC%)f|?V#Os( zvi+}hFumzZOn*9x3S0*s@TK1HIQ9LW7w><&xAc$iQtnP)NkJ0ee(y?38Pvo1(as1F wJMQ(ooH>0du?iyGqj6*T*al)7h;1OYf!GFO8;ETnwt?6NVjGBU;NK1W1C@MtqyPW_ literal 0 HcmV?d00001 diff --git a/web/ASC.Web.Common/public/index.html b/web/ASC.Web.Common/public/index.html new file mode 100644 index 0000000000..aba17dad8a --- /dev/null +++ b/web/ASC.Web.Common/public/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + ASC Storybook + + + +
+ + + diff --git a/web/ASC.Web.Common/public/light_small_general.svg b/web/ASC.Web.Common/public/light_small_general.svg new file mode 100644 index 0000000000..968306c3ac --- /dev/null +++ b/web/ASC.Web.Common/public/light_small_general.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/ASC.Web.Common/public/manifest.json b/web/ASC.Web.Common/public/manifest.json new file mode 100644 index 0000000000..2e73d9de9a --- /dev/null +++ b/web/ASC.Web.Common/public/manifest.json @@ -0,0 +1,15 @@ +{ + "short_name": "ASC Web Components Storybook", + "name": "ASC Storybook", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/web/ASC.Web.Common/public/modules/community_logolarge.png b/web/ASC.Web.Common/public/modules/community_logolarge.png new file mode 100644 index 0000000000000000000000000000000000000000..6012a2a7f7aacbedf91d0e6a416d81043ddd35fe GIT binary patch literal 9778 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 LNkvXXu0mjfPF6_} literal 0 HcmV?d00001 diff --git a/web/ASC.Web.Common/public/modules/mail_logolarge.png b/web/ASC.Web.Common/public/modules/mail_logolarge.png new file mode 100644 index 0000000000000000000000000000000000000000..36928a0bab168b846c6723962806860c29f8756a GIT binary patch literal 10235 zcmV0AP8dh>Q%8_I(2HB z5Et8f)5Z;9XdHxCB$635a^&iuzyRLO)rGe*H{+e{ZTWX^-?`x@B=OG?+qP{R^5DV! zF3L*E&`?u@v9S>f3JbAh(SqRz_V1G-K^oAJBS(~O+_>IDK|uj5%YtTTFbo4-U0qzd zbRm20>{-erNCSHL@?{c5QKob?jf(Oz)ZsV|GBPqKD=Vv{sBaPt6oj~OTYUNY%{4PC2MZQ1#`Kx9(4kW&goTI0 z(ZLa(-d>6!Vd0Vu6ofc+^5igao(K;gKgO*)cVTI5gD%~AV&UTDIB@hBX3d`ev}f-= zr6foL*s*Q9tcHfVRc1!|T^()R`lo&Q@(p_S=#EaEI-qy2-gxuw?HX@yZ@K}35CV}f z!pzjvm!{d3&tANMgM%Z~R8{ci)pK0EcpgXg@5Yvm>)(@qNCSEH{CRvpK){EB!s0Q- zMa583QpD|BH&9Vg4#nELi<{eLD=VwJ4HSe>QBodYXk@bW-u?T9s%okzEiJ*LhxZ{N zA&JtG5*Qg7Kb(;GjreQEUH&^+s-}sH6-nenY?8xY7E(`;`TCH&Z{r6F= zRf)yo7@F|bZoKIWCyxG8rk|3Z*?vd$x(RVl@4MTO;XldFRYa}_NF*qT#*GF+h?Ef^ zK+qJLCqyD8KRHNACY#~V!9%pRwb9kp)B3HwiUg%wT^zfBrs)KJfF?BKY0r7_w>lle zSlGY+^S~>wn~?gx&&K>uzKP5q{5K44L)2;rO(TpVXh1h~qEJIdA&NBf4{0oV_2XI&}%_){XV12tf*ro}Gy#t-BrASI{OAdh{G=cO*!S>5w6?U;(bdgY z_k11S^Qcs-OixZIr8klxfoZeWox`5aQ%~j~3}}jwsI-WzRnfbl{>4v`9@>R?!JjaG zVU${}Mt4^yx^Ce6K7s~>h7dITyZn*zA_WM3GB8a`eZM0|jEtFtk%G;nL^f!`b<&K=LgJ$D#)bR3~WbpBB~91W|tkD19y3Z)9G z2KsOuyAj+aVkHw3NExZv!WFa#!T)>+!RW{c(=#(%R(Cmm`~-=30*U0<@uL(A%h-;? zVzEqn!l5sh!JWH+(LIQL_sik$-+ujs*gKy=E}g?0dphp90!FF@9mu3&Sp9uW&&_e> z+z7orU9`8g0w^;D&@~MV4KM(y7E&#uKoUsF|3pYB(G3HD0|yR}%jVd+eFyJ&@B3I@ zF0guVkaD4bY+UR40RwGWTBJu+w~4>_cQ7~H+`R$!sU4Y3<2@D#Xw&# zt?liMjZbm@!k8jM*LAh(VZ?N~&dK=-Upc?TH_k7zcWjB_#VS5vnL0v%{GUdKu45R6 z`uDLTM_9LR9d%d54cgn=SX`WEa{QudMg?IAn#P9yZY;|n`srW7Ubmfeed!0Q)a|WL zrtSBCAG{jCiUpX4ptG%=q1CG?*L+5YM~U1zXA2&m9hqk|?=n%UtCja6EW_l~Qk74g zonv&df@v98nn21Mo(Z)K(^Lyk+11SKEH~Y>l_N)wP%af!2{1J|NvT{?#DzgX%&}Rs zW-Y-j&&J+zJBeC>>E(KJg#5z;qkLv~4uH&S-$3?t{{}L;f)q$4<7`^D8atli&EG!C z=MSG{*@J>7$=3pGO(&9qT|HS`sZsSKE)?o~^2{t!2rNV62IXWWE}FKjHn{;F*|!fg z!G?_+8K0VFc774tiIHENCkg^UP_I?#Y0WWk=UsSfZ=v6g_{h--{$kIW<_H-rRQa{9 z9_M3cW&kjTc3l~f)y*1)hG`m{k8IX+Kud@EDLeP_db2*3`38d{4ip2dWN>Pb}FS3i*vJRia3VZYJ$jIdn(TVQId|J)b+w zo|oK0chbIUi8P$Ak~9tG>jBcSn2&NicXOKM`B`dHA)P}*+}@i3;P7mTtYcE}LvHPB z;pl9E?S6=kB$U^ieTpBxivnd8nx=6z96opu&=?$C#lfS;R8SWP@(c6GC_?DEnl?#i zvuxS2g?y#PM@~+VcLOqxMad1DRC|Htx(}%sC&p&^iw8z{*Iiq<5|@fKvX;qA#bv4P zG1L<0NxeBt4a`J}xruR(9XU$W+Rcn>az|f^Mc3!1Y=YDC6$CmnbxCi^AgKG-waHS- zAHIufSjE*aKflNW4?M{F^&6C|K6>FiMx!`hURp#~8CXQEQen%sovayL&9T`Vp=dxb2t&gV-v_aJa!=UO1Tn+U=vh4ZnoyZe64TjP&OkIEw^mOFdxM3ZW zp27dQ{}k^(IKr1N6}hvgg@uaG(fJa#E>v(w7%M5|PpZB!E$bR&NTpRBIDCYBKF|8K zYjHh~>Df7w=`{I;St{j{dTkU%ssvcSaTBq4Tm^Z@G?*;bc+RG7{_bbCHb=;YmN@Ua zdn-@a&;x}UaZ~4NFeNNhJ*sX%f6AsMW&#jN_{Qi0Z#g)akS=3xxQw5YzY!^_iw=ay59K$NoddsMZ4tg*=joR4T#b)D)F! zjmq)@lVc-jLLdZ6{`{>y-VFL$f9R<&iO}zNFws%+!3g4|MXW=ib6Sg9*O#@Bt>L=UA0X z<2V+YU_2z}%Z{;TRS%=*hDoQ=>i3U4@-VgK z1!gZ@Ac~}l9a2KQUZcEc7}As7%;}@&IdkS5<+epS z)~up6l>%0v`YxuXsZ*y^(8PW+PH~Y ztZrV6${BqG!@P4n7hs5)bq(evXB3=Fb*)c^n|Pn{7uC;Bn$1PZaV5Z{nmGkr5 z+L_|p<8|W6ZZv;^i$@L-t{!CV&}y!PXt)(MN$z>-3u~Iztcz0dLR{nZwR(*cC(lxM z1JQf!I>gy zODE@8v^a+P|AOnYvm?!xjufj~5`6O1G`lyh#wjgv>hv&+OH1t7z7^ZDxB|*bgk|A* zo+3vR;``I`Wh09+4XkTrQ7T>(Iehd4rsc3<<9d>@7`m>h>&M3@c=*6!3dJJha|>ir z3A_jl(;)PHqQFxvh;q5ehD|ro(>F-HRznjKE!zdfdAzsXgSjw|{-ia{5ke#}x(28| ze1?U;djV~K^=Yumbz<8SHk%{(+__oGUdYo1TTo^`U!v}Z%tey8rSru8EHOjJ z4MO&uUu08TlI>k-^5r;sEXnY>vwY*5_px*PP4x71aRpTHbz(7PDZU>dBZ+n`QUs`b z6&jXptIfL>#>Or&eEt$0ot^ae_7HPSbX_P_x>BjA>ii%7=C8OkF~Na@hZ#A4fl|$d zSPH|DSW$piuOXHe*t~T+@nn+x;sUW$4#TezzV{Vqr;lQE#SmVtxfl|amXNhFMh{fJ z_BDzh{U^kV_$gObB&9mB-6@+j**NR6F+~Kxmi81oyVE>0xr6{k#_&>wkDs0)XB*to zlO>EKj;Yb!mSx+vZDd%Vw_X!eVg;*Y)wd04bHVG!6>tJ!8(bT~xj9a`?z`+(0t4 zZaukl0@Khi3>{SmfkJ6%k=~fChThIyUYaH_bn`NK1H@x7+Ap;-cIlFGXQ_0W*0y$B z&qdP>b*+d3v>31q*6urqz3A`Z*FSLmgjkzyC-WQsg@5sB)Q`=gr*hxRRjaI{FXgB; zS8*B5R|!JNs%#8Bs13j z2y9!`5o&{jFi`L1*tYupwJ<-wz=>1CSWb+!YX?XsW0<;zY3c|?Dj-oP#1DnYG{TG;h@vQ`lQ!8f9wF@?NS~US3jzLFX_PgRzpi)CXe0RmH3xSg39nkd* zgR54lBJs%4lWHSw-n|3MGPx3_p<^UsDz0d{Q2NrfaCy{|BgapX&9+=7d5ww}hAz}X zqFgY5Mg(XabYr|>&f>%)qwGF4!KRo&YbJ&6R+))BCd$hQ-&HAoGSy2alT*zp(=e2k zi0UG`4T(Sa3|80L=I6-5AbNqOi%$aNKl-=$CmtmC4||Y71X1{XH`_p7mpZHKx{@Cj z^96*^)%?@U%$(}dnTE#B9b4(@>}V?OJ$B+WGqVc}TqZghcOZ&rYt5?7YY?#lQxgco z;JKeZ$aj`XZ0bz2Z)67M^0bRGgY{*)gA#VFh=Ygjdu-ailczlCX#|0fZQCR}2XOYi zhZq&wp8qEp!06QSr`Go7UU=OW@|X7yv%V$9tG4x%{`tSAcHtzU=c`RZHaGewCD()m z<-c9er&KDFO2n0B?Wxcq*K3_pYon>Nvs%@DH< zs+9`GQiV)9tr~4XW6n$h!qAysuCjljL|@8K8}67E_0BHl!$`S3mS!PLVZ}@a+caLZ zVIx9@%4O+>j#gbl+x-G!-8~q<8^3v$J*Q@yb6ImWk9)s$k!ld}tGfoVS8pM#yGSAV z5kOf+tyWi?m&v3^#A5(TITn_Vj61Abzm{Y&!P((a<`x#X{nndFB@S@2=+}cldpTM>2O%A1k^oMnIqgP_*JAX z39STPs)fxv1{vy3Gh3-)+K#$T(*$}vMaF{rhUfT`ubkqpp|<7-=}kH48vNQ94zsf> z#qB*UNC6W0BOpVg(g={PE!oEfWK9!jQm9Q##%%@$9t*-rMuvy^>Q}$X_8m8|e(lwZ zt>KaLoIX2BXHPeMy}iV2OA%pP211~aOvF`+TPPG1xsKxyH4=_*OyqHez(A<^fJPw< zL4fo_h$1inNAUD?MBS|;g;3u|Z)kB{F*rB9#GiiY6jBqk#jPeghJHj#%wm4N#66!o z%GX}BTj?@YFF^3afe=D%#&V&gnmp}oElTuj010YbRZ379kR}j>w6wOc#oo&3`4Jx3 zf0)_11#aEFUHNT5B@TyyvRzmfhwi7uCruxB(mxY86M#)U;hp_ZQh`+866v^=6Y<{xQSdYjcu7&rmkX? zKqV|hnq2uAP?pi&ZZN;FM8+{VQwTVbudue=q2NZ;{79X66d9hf5)2(Ii`(1cbXXe8 zp~TWPWg&*HDMAh{)|f20q->qaQo#DwM014v^3HyyD|OzzZv+ejKa7Be+WP|%qAKh# zQqz96WzpK2yF!jp)&EM58$hx`B$lZuok(EQ+tWiL9_Ql4OB_9RT5WPB+rp+*Ye**J ziU`M48-$Q6E|(~j1dWur0X03-+0hDanQxq%rW!?LVg|#Dbz~^P5D;RPzOe!fdt#o)u_{WzRs(6_4BtsvxR?ahLHZW!@bYi%*A4rZyvZv%+P=p z$>awK-bx@W6iO9OAvKef99hFK&ksXi6acm36GEi=mHmg>qATk57^)pfo38AT-dmxElOMf(qP9-EEK|xjIxxkVrpNF{%M-Uc}L&Pg~NW z>_*i6NEMufAt>tzh}8VD#g5h(9hP9uml&pw3g)`5mT4F))v9c0OY+Y@wH|bnazt~4 z;Q3TcleT1>k3DY(pC6egbOQjc*FZ#rj8dthTAZEjZCH<&HdGDZ`yoPH--9+n=xVH0 zh!8WeH6e0K_($FF1@Pt-} z5QtD(8Y=P7HC2n$LP=}P9Q>Gf!(3QJV=`OlZ2Ld;gYHHK6Y|23J)i)zgeZ4tCWNDVl zf4v>6w21bc-yrGe)Ps;vUSB395iI8O=(?svLzOx1&Oq7VY*`vD%DTq158 zN(rvGq1tGoNLhz;UC=bJOm1tB(-YGu1|gcEq3J4ysOuFux*(7c7&_sjpT>LF?_oUo zInDJ$L~AbyjmqnP3vc)ko)ZHpt}By@B3N2lR+&_HXUF5nKpnUh%eWz+8wL}F8b=q3 zbR{f`>i$&bq~Zpii^{Ha9c+i4IR{%ngodiAR9z($F=|O55hofwjQ5sTAq)_yCM$K^ z8d|OuIW|xEuYZ>0KYR@_xEWcge$R-j>$*~2OT`lDR6;$Ic!kiX+*GK(EH@M$7|*ll zdaQaZmCo0dD^r%^`N+BtkwjV+xs=21tVvbrUxF2@P??|l8xk?1=~28lJ_os6MzqF| zrRC-53%B|@O`8ZU|MWWn{?_Sl?a3oD?|w8wuFi$=sMBaN08&=hzwAxAzD{A zM@Z~Bzm0Y0^N;Y>*3}J>@lM zKmQL+#*nr?oL_!D){~z~Gz*vx5g_GvFQk$)D3vQplj`bhS8?OJ$xu=V2yQ4y0A1(Q zLPbqzW*tivgK8oX8pWUoVFbECCgpHTdjd0=QJqfD_Z1PU{%G{$k&T0^0SlmQzXk2J z_aZI3$?133M>=twzy1u-*&*cY1r%hYmV%@asHLhgEYqO=FZL}aZ^yJh1dq_DP+%W^w!fURE8-* z)&s~568-9X$aM9PpD*zF;l<`$*1qv&@?J=5rHa`7Jj_?T9$77ejA)RdGNo#@N;aFm z8X4;URrL)BZd{m_p{Dnb%oS;k8&tfAppiY{H)@YCL}~`uR;_c zG)?(U-}7kAWz-{GSHkstMTjN(KbjKk@%1zz-((|qJv8%dZt%eA^Hlv-MID&12fosAi!C=967 z9wQ?_G~$Z{kjjQZXjgd#JX(qL8i4q&ORjj2t6YGjfya%OipGCONLFygJ?NmU;K+Ol z!%}@3+#o^+Wf{12h$66US~79AWz_SL>hO7Ch#UGO^~6db4+3R5YMRBbR5(6c{kOAd8SVhJnz5x=T`o2uH^Y zA{Ofbq9OjtbPE_j1ZY4A6!Hie5+F#LIvLAoY&;+YB`;L+g)T#cX(Ll<6eOSl^$;p~ zP;FV%P`6`fth5<{rFwuHM(RC?WsnIQB0#8xUUykqE^%P7Od_TpAwcz_0F_)eClusf{6K26-8Ni@fpa)c=h^LNM`X33+;1n zLrz_UxC6y9!nTN>{Y%JH8~tX){<#XD8D1dN1X4)mDn8Hb&+>DF8A_=RWPS$ilkY&f z>boH47BDw%;rOn57^_7j69(mqkC1?DXjehdCtJ4*uZq5t_HvU z`|0cP&~RN3q$C721VQBUn_oZ6TMkTs5a5NN>-_Z-`)QBIC?_-U#do0n*RK(k0ti5> zK={&^;dKnrFI;AdRbKn;3w(2U0Za`l0cI}7r~bdy*vTvfsiWWf+k_wfPtZY>K*YfN z!?z%k?FHkv{FmA;m?et|MLq7AKec&Xp0~>cVXQ1 zVon!aDxOC?8B@(EO#pQdS*xS6D?84>+6_EGPN9GNk4cXl#Izxi2R05;fBNgFd4Xy% zq?2k?RuLkD5NT*Ue_J=}T4D@j9r9(rxwN-h_Y6k}KJbhoKJ#;1)x-a#YF&L$5Je;n zO+7{Q+Ap8rEsu^v%mmvYmUVdl-K+V_o!#Vd@IUq@wAcR<(hnd9A_?vv{te~ddOvAh zaBgar=YIJt-yB^)WNfvWn^$Fd;Ae+;=Bf^63uXAXd*B2AiEIJlAcrzk|LGId@BVdi zZh?=Tp5i%QKF31IMPwZH9?##=$)0Bp(AVBU{?rllzxp}Ef&I{}BXkI#b~BaNKY+jS zDV(`DiK`ldQpG)_Dh5&6mCzv5#a(igji34@w6TMjtqEd)_r#~L^c!Es>)HyHC5pvm z<`))~T7e2)5p~a}?D}l)%MwW_*FC4Xen=#1vz1z*)z($FY-+i(!k(jR6be;-aqlRf zJ6|N3ixWubHFf@NcRP3WrZ`;|*kAicVjuknWG;rVb?_}}FaI;DcmEFQr3r?YOT2FX z9A_5mWO510LB#Fdao%%#7j4NH!?TN|KJ-Uedp|?8DuoCUwa4s`a8(YjPS*o zGOye>2N7g54izut)tlS-m+ftowFHGThsnILr|@#zb8*T@A^mY+{I=`>FmP;5V%J@j z(+gE$If%%|@7sm6GZ^IwMB@<#(MbJ$&&LY_m4(VkAT$t>MEx!B;o1=VFULRczjXJ9 zPG0)*u;(H@Nmz3c`8@LSib4tL3~zefD{lSWP1=5b4AA&rjvd)p>};W;hOMJ80?$|0 zA;U8Iz};AqIU+_GKO)oN*I-rZ+jUl7_QqWx$BWlBMhSB03M^1k-|UOAUuwN_6*|K#KQ zx7uc#!xn!2N%G2vpWw+i-o+++9gKCmookOd{LrHSB(WryAu2V1j0Ijww#WN=2H#Xt z1W5v{Gttjy_WP4_zh1I()32t_LOXLfV()F1pL^cN6t23^;@y2NYDuEC`K&f7@ z=U1{V2*s(A`pO^xDV9507mYM(&ll7=BE=Q-88Re7df`u5cKnf$_VgLE&}=lY&6ZnC zJMo0$t_eic{$R(z^LC+i&kjUwEQrDXz}KrdVt4q28rLjl(RLC!*ei$(%@ zjZ?sOwo;=zb$;!2x}AC@%W9u}`4y5RMWa@E{lbebxD~+K;o2lTa#Cuaz%Nop{s(+K z6QLAtTdF;(hQnuILdv_a+M)JvLUtrgrcf!5*+;#H8 zMT^D(tQ+iILEq&$WE1Ed!g57nQb1Ims$}S4B2j>K1|edT!1g++dIrXQo9e~MmYZ+U zTCr+%CC#ev{fP%}zUAf@0BlZRaoEba51>a*fK&fUPD13SR%gx^$ounlg(zOvRicy0 zj*{>(&5VWs-gMJVnhO^#&YI2onoBP@=gf(TUI##mun&dUoYX>q7w#{N8QHR0hB~<@ zQ`|;WZqIhqZ)E`L(`U@s_}gjI@XeQ>-~9GF?|cTJTjDq}^r;iA@IC-rhwr+MhgVRzDhhkN?m3%N zY;px7pQ=O<=$vtA@}-C46wnA)yzZ1^MJbBHE<%>ne&hAmUK<-5dj`OYFy>eaphtv2 zOL-M?`h?TKq&1gijqWYLd0XtHAD9GvtYCY*soIEQg2vm}%M~&R zbTL$5j?&|2ceO@skZcti4pCz2T_VZgbuM|78f_B14P-n?w(Z~dHn0C1_Oppriu_G) z;Y#F%3WisF`Sbew-opK_e#oJ`$B)XWjLN8t$`9UO;nxvHu_^!n002ovPDHLkV1kSI By6yk~ literal 0 HcmV?d00001 diff --git a/web/ASC.Web.Common/public/modules/people_logolarge.png b/web/ASC.Web.Common/public/modules/people_logolarge.png new file mode 100644 index 0000000000000000000000000000000000000000..2311b849dbb2c8ec56d8f6e0a37b29a138e1c8c1 GIT binary patch literal 9300 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 literal 0 HcmV?d00001 diff --git a/web/ASC.Web.Common/rollup.config.js b/web/ASC.Web.Common/rollup.config.js new file mode 100644 index 0000000000..1b4f6eb9b7 --- /dev/null +++ b/web/ASC.Web.Common/rollup.config.js @@ -0,0 +1,124 @@ +import resolve from "rollup-plugin-node-resolve"; +import commonjs from "rollup-plugin-commonjs"; +import json from "rollup-plugin-json"; +import babel from "rollup-plugin-babel"; +import cleanup from "rollup-plugin-cleanup"; +import replace from "rollup-plugin-replace"; +import postcss from 'rollup-plugin-postcss'; +import copy from 'rollup-plugin-copy'; +import svgrPlugin from "@svgr/rollup"; +import generatePackageJson from 'rollup-plugin-generate-package-json' +import pkg from "./package.json"; + +const getBabelPreset = require("./scripts/get-babel-preset"); + +const babelOptions = getBabelPreset(); + +// This list includes common plugins shared between each output format. +// NOTE: the order of the plugins is important! +const configureRollupPlugins = (options = {}) => [ + generatePackageJson({ + baseContents: { + name: pkg.name, + version: pkg.version, + description: pkg.description, + license: pkg.license, + main: pkg.main, + module: pkg.module, + peerDependencies: pkg.peerDependencies + }, + outputFolder: '../../packages/asc-web-common' + }), + replace({ + "process.env.NODE_ENV": JSON.stringify("production") + }), + // To use the nodejs `resolve` algorithm + resolve(), + // See also https://medium.com/@kelin2025/so-you-wanna-use-es6-modules-714f48b3a953 + // Transpile sources using our custom babel preset. + babel({ + exclude: ["node_modules/**"], + runtimeHelpers: true, + ...babelOptions, + plugins: [ + ...babelOptions.plugins, + ...(options.babel && options.babel.plugins ? options.babel.plugins : []) + ] + }), + // To convert CJS modules to ES6 + commonjs({ + include: "node_modules/**" + }), + // To convert JSON files to ES6 + json(), + // To convert SVG Icons to ES6 + svgrPlugin({ + // NOTE: only the files ending with `.react.svg` are supposed to be + // converted to React components + include: ["**/*.react.svg"], + icon: false, + svgoConfig: { + plugins: [ + { removeViewBox: false }, + // Keeps ID's of svgs so they can be targeted with CSS + { cleanupIDs: false } + ] + } + }), + postcss({ + extensions: ['.css'], + }), + // To remove comments, trim trailing spaces, compact empty lines, + // and normalize line endings + cleanup() +]; + +const deps = Object.keys(pkg.dependencies || {}); +const peerDeps = Object.keys(pkg.peerDependencies || {}); +const defaultExternal = ["stream", ...deps.concat(peerDeps)]; + +// We need to define 2 separate configs (`esm` and `cjs`) so that each can be +// further customized. +const config = [ + { + input: "src/index.js", + external: defaultExternal, + output: { + file: pkg.module, + format: "esm", + sourcemap: true + }, + plugins: configureRollupPlugins({ + babel: { + plugins: [ + [ + "transform-rename-import", + { + replacements: [{ original: "lodash", replacement: "lodash-es" }] + } + ] + ] + } + }) + }, + { + input: "src/index.js", + external: defaultExternal, + output: { + file: pkg.main, + format: "cjs", + sourcemap: true + }, + plugins: [ + ...configureRollupPlugins(), + copy({ + targets: [ + { src: 'dist', dest: '../../packages/asc-web-common' }, + { src: 'README.md', dest: '../../packages/asc-web-common' }, + ], + verbose: true + })] + } +]; + +export default config; diff --git a/web/ASC.Web.Common/scripts/get-babel-preset.js b/web/ASC.Web.Common/scripts/get-babel-preset.js new file mode 100644 index 0000000000..4ed4505528 --- /dev/null +++ b/web/ASC.Web.Common/scripts/get-babel-preset.js @@ -0,0 +1,134 @@ +/* eslint-disable global-require */ +module.exports = function getBabelPreset() { + // This is similar to how `env` works in Babel: + // https://babeljs.io/docs/usage/babelrc/#env-option + // We are not using `env` because it’s ignored in versions > babel-core@6.10.4: + // https://github.com/babel/babel/issues/4539 + // https://github.com/facebook/create-react-app/issues/720 + // It’s also nice that we can enforce `NODE_ENV` being specified. + const env = process.env.BABEL_ENV || process.env.NODE_ENV; + const isEnvDevelopment = env === "development"; + const isEnvProduction = env === "production"; + const isEnvTest = env === "test"; + + if (!isEnvDevelopment && !isEnvProduction && !isEnvTest) { + throw new Error( + "The babel preset of requires that you specify `NODE_ENV` or " + + '`BABEL_ENV` environment variables. Valid values are "development", ' + + `"test", and "production". Instead, received: ${JSON.stringify(env)}.` + ); + } + + return { + presets: [ + isEnvTest && [ + // ES features necessary for user's Node version + require("@babel/preset-env").default, + { + targets: { + browsers: ["last 1 versions"], + node: "8" + } + } + ], + (isEnvProduction || isEnvDevelopment) && [ + // Latest stable ECMAScript features + require("@babel/preset-env").default, + { + targets: { + browsers: ["last 1 versions"] + }, + corejs: 2, + // `entry` transforms `@babel/polyfill` into individual requires for + // the targeted browsers. This is safer than `usage` which performs + // static code analysis to determine what's required. + // This is probably a fine default to help trim down bundles when + // end-users inevitably import '@babel/polyfill'. + useBuiltIns: "entry", + // Do not transform modules to CJS + modules: false, + include: ["transform-classes"] + } + ], + [ + require("@babel/preset-react").default, + { + // Adds component stack to warning messages + // Adds __self attribute to JSX which React will use for some warnings + development: isEnvDevelopment || isEnvTest, + // Will use the native built-in instead of trying to polyfill + // behavior for any plugins that require one. + useBuiltIns: true + } + ], + [ + "@emotion/babel-preset-css-prop", + { + sourceMap: isEnvDevelopment, + autoLabel: !isEnvProduction + } + ] + ].filter(Boolean), + plugins: [ + require("babel-plugin-styled-components").default, + // Experimental macros support. Will be documented after it's had some time + // in the wild. + require("babel-plugin-macros").default, + // https://github.com/emotion-js/emotion/tree/master/packages/babel-plugin-emotion + // export { default } from './foo' + require("@babel/plugin-proposal-export-default-from").default, + // export * from './foo' + require("@babel/plugin-proposal-export-namespace-from").default, + // Necessary to include regardless of the environment because + // in practice some other transforms (such as object-rest-spread) + // don't work without it: https://github.com/babel/babel/issues/7215 + require("@babel/plugin-transform-destructuring").default, + // class { handleClick = () => { } } + // Enable loose mode to use assignment instead of defineProperty + // See discussion in https://github.com/facebook/create-react-app/issues/4263 + [ + require("@babel/plugin-proposal-class-properties").default, + { + loose: true + } + ], + // The following two plugins use Object.assign directly, instead of Babel's + // extends helper. Note that this assumes `Object.assign` is available. + // { ...todo, completed: true } + [ + require("@babel/plugin-proposal-object-rest-spread").default, + { + useBuiltIns: true + } + ], + // Polyfills the runtime needed for async/await and generators + [ + require("@babel/plugin-transform-runtime").default, + { + helpers: false, + regenerator: true + } + ], + isEnvProduction && [ + // Remove PropTypes from production build + require("babel-plugin-transform-react-remove-prop-types").default, + { + mode: "wrap" + } + ], + // function* () { yield 42; yield 43; } + !isEnvTest && [ + require("@babel/plugin-transform-regenerator").default, + { + // Async functions are converted to generators by @babel/preset-env + async: false + } + ], + // Adds syntax support for import() + require("@babel/plugin-syntax-dynamic-import").default, + isEnvTest && + // Transform dynamic import to require + require("babel-plugin-transform-dynamic-import").default + ].filter(Boolean) + }; +}; diff --git a/web/ASC.Web.Common/scripts/setup-test-framework.js b/web/ASC.Web.Common/scripts/setup-test-framework.js new file mode 100644 index 0000000000..55d3af94ae --- /dev/null +++ b/web/ASC.Web.Common/scripts/setup-test-framework.js @@ -0,0 +1,6 @@ +// enzyme setup +import 'jest-enzyme'; +import Enzyme from 'enzyme'; +import Adapter from 'enzyme-adapter-react-16'; + +Enzyme.configure({ adapter: new Adapter(), disableLifecycleMethods: true }); diff --git a/web/ASC.Web.Common/src/constants/index.js b/web/ASC.Web.Common/src/constants/index.js new file mode 100644 index 0000000000..3272ab8037 --- /dev/null +++ b/web/ASC.Web.Common/src/constants/index.js @@ -0,0 +1,55 @@ +export const AUTH_KEY = 'asc_auth_key'; + +/** + * Enum for employee activation status. + * @readonly + */ +export const EmployeeActivationStatus = Object.freeze({ + NotActivated: 0, + Activated: 1, + Pending: 2, + AutoGenerated: 4 +}); + +/** + * Enum for type of confirm link. + * @readonly + */ +export const ConfirmType = Object.freeze({ + EmpInvite: 0, + LinkInvite: 1, + PortalSuspend: 2, + PortalContinue: 3, + PortalRemove: 4, + DnsChange: 5, + PortalOwnerChange: 6, + Activation: 7, + EmailChange: 8, + EmailActivation: 9, + PasswordChange: 10, + ProfileRemove: 11, + PhoneActivation: 12, + PhoneAuth: 13, + Auth: 14, + TfaActivation: 15, + TfaAuth: 16 +}); + +/** + * Enum for result of validation confirm link. + * @readonly + */ +export const ValidationResult = Object.freeze({ + Ok: 0, + Invalid: 1, + Expired: 2 +}); + +/** + * Enum for employee status. + * @readonly + */ +export const EmployeeStatus = Object.freeze({ + Active: 1, + Disabled: 2 +}); diff --git a/web/ASC.Web.Common/src/history/index.js b/web/ASC.Web.Common/src/history/index.js new file mode 100644 index 0000000000..37a8a9ec23 --- /dev/null +++ b/web/ASC.Web.Common/src/history/index.js @@ -0,0 +1,3 @@ +import { createBrowserHistory } from 'history'; + +export default createBrowserHistory(); \ No newline at end of file diff --git a/web/ASC.Web.Common/src/index.js b/web/ASC.Web.Common/src/index.js new file mode 100644 index 0000000000..fa441f79c6 --- /dev/null +++ b/web/ASC.Web.Common/src/index.js @@ -0,0 +1,2 @@ +export { default as Api } from './store/services/api'; +export { default as Auth } from './store/auth'; diff --git a/web/ASC.Web.Common/src/store/auth/actions.js b/web/ASC.Web.Common/src/store/auth/actions.js new file mode 100644 index 0000000000..a398badc23 --- /dev/null +++ b/web/ASC.Web.Common/src/store/auth/actions.js @@ -0,0 +1,89 @@ +import * as api from "../services/api"; +//import { fetchGroups, fetchPeople } from "../../../../../products/ASC.People/Client/src/store/people/actions"; +import { setAuthorizationToken } from "../services/api/client"; +//import { getFilterByLocation } from "../../../../../products/ASC.People/Client/src/helpers/converters"; +//import config from "../../../package.json"; + +export const LOGIN_POST = "LOGIN_POST"; +export const SET_CURRENT_USER = "SET_CURRENT_USER"; +export const SET_MODULE = "SET_MODULE"; +export const SET_MODULES = "SET_MODULES"; +export const SET_SETTINGS = "SET_SETTINGS"; +export const SET_IS_LOADED = "SET_IS_LOADED"; +export const LOGOUT = "LOGOUT"; + +export function setModule(module) { + return { + type: SET_MODULE, + module + }; +} + +export function setCurrentUser(user) { + return { + type: SET_CURRENT_USER, + user + }; +} + +export function setModules(modules) { + return { + type: SET_MODULES, + modules + }; +} + +export function setSettings(settings) { + return { + type: SET_SETTINGS, + settings + }; +} + +export function setIsLoaded(isLoaded) { + return { + type: SET_IS_LOADED, + isLoaded + }; +} + +export function setLogout() { + return { + type: LOGOUT + }; +} + +export async function getUserInfo(dispatch, additionalAction) { + const { user, modules, settings } = await api.getInitInfo(); + let newSettings = settings; + if (user.isAdmin) { + const inviteLinks = await api.getInvitationLinks(); + newSettings = Object.assign(newSettings, inviteLinks); + } + + dispatch(setCurrentUser(user)); + dispatch(setModules(modules)); + dispatch(setSettings(newSettings)); + + additionalAction && additionalAction(); + + /*await fetchGroups(dispatch); + + var re = new RegExp(`${config.homepage}((/?)$|/filter)`, "gm"); + const match = window.location.pathname.match(re); + + if (match && match.length > 0) + { + const newFilter = getFilterByLocation(window.location); + await fetchPeople(newFilter, dispatch); + }*/ + + return dispatch(setIsLoaded(true)); +} + +export function logout() { + return dispatch => { + setAuthorizationToken(); + return dispatch(setLogout()); + }; +} diff --git a/web/ASC.Web.Common/src/store/auth/index.js b/web/ASC.Web.Common/src/store/auth/index.js new file mode 100644 index 0000000000..df6b22fb04 --- /dev/null +++ b/web/ASC.Web.Common/src/store/auth/index.js @@ -0,0 +1,5 @@ +import * as actions from './actions'; +import * as reducers from './reducers'; +import * as selectors from './selectors'; + +export default { actions, reducers, selectors }; \ No newline at end of file diff --git a/web/ASC.Web.Common/src/store/auth/reducers.js b/web/ASC.Web.Common/src/store/auth/reducers.js new file mode 100644 index 0000000000..5eae645d4c --- /dev/null +++ b/web/ASC.Web.Common/src/store/auth/reducers.js @@ -0,0 +1,73 @@ +import { + SET_CURRENT_USER, + SET_MODULE, + SET_MODULES, + SET_IS_LOADED, + LOGOUT, + SET_SETTINGS +} from "./actions"; +import isEmpty from "lodash/isEmpty"; + +const initialState = { + isAuthenticated: false, + isLoaded: false, + user: {}, + modules: [], + settings: { + currentProductId: null, + culture: "en-US", + trustedDomains: [], + trustedDomainsType: 1, + timezone: "UTC", + utcOffset: "00:00:00", + utcHoursOffset: 0, + homepage: "", + datePattern: "M/d/yyyy", + datePatternJQ: "00/00/0000", + dateTimePattern: "dddd, MMMM d, yyyy h:mm:ss tt", + datepicker: { + datePattern: "mm/dd/yy", + dateTimePattern: "DD, mm dd, yy h:mm:ss tt", + timePattern: "h:mm tt" + }, + hasShortenService: false + } +}; + +const authReducer = (state = initialState, action) => { + switch (action.type) { + case SET_CURRENT_USER: + return Object.assign({}, state, { + isAuthenticated: !isEmpty(action.user), + user: action.user + }); + case SET_MODULE: + return Object.assign({}, state, { + settings: { + ...state.settings, + currentProductId: action.module.id, + homepage: action.module.homepage + } + }); + case SET_MODULES: + return Object.assign({}, state, { + modules: action.modules + }); + case SET_SETTINGS: + return Object.assign({}, state, { + settings: { ...state.settings, ...action.settings } + }); + case SET_IS_LOADED: + return Object.assign({}, state, { + isLoaded: action.isLoaded + }); + case LOGOUT: + return Object.assign({}, initialState, { + isLoaded: true + }); + default: + return state; + } +}; + +export default authReducer; diff --git a/web/ASC.Web.Common/src/store/auth/selectors.js b/web/ASC.Web.Common/src/store/auth/selectors.js new file mode 100644 index 0000000000..9f4e6a58bb --- /dev/null +++ b/web/ASC.Web.Common/src/store/auth/selectors.js @@ -0,0 +1,12 @@ +export function isAdmin(user) { + let isPeopleAdmin = user.listAdminModules ? user.listAdminModules.includes('people') : false; + return user.isAdmin || user.isOwner || isPeopleAdmin; +}; + +export function isMe(user, userName) { + return userName === "@self" || userName === user.userName; +}; + +export function getCurrentModule(modules, currentModuleId) { + return modules.find(module => module.id === currentModuleId); +} \ No newline at end of file diff --git a/web/ASC.Web.Common/src/store/services/api/client.js b/web/ASC.Web.Common/src/store/services/api/client.js new file mode 100644 index 0000000000..6c6ef5a18e --- /dev/null +++ b/web/ASC.Web.Common/src/store/services/api/client.js @@ -0,0 +1,104 @@ +import axios from "axios"; +import Cookies from "universal-cookie"; +import history from "../../../history"; +import { AUTH_KEY } from "../../../constants"; + +const PREFIX = "api"; +const VERSION = "2.0"; +const baseURL = `${window.location.origin}/${PREFIX}/${VERSION}`; + + +/** + * @description axios instance for ajax requests + */ + +const client = axios.create({ + baseURL: baseURL, + responseType: 'json', + timeout: 30000, // default is `0` (no timeout) +}); + +setAuthorizationToken(localStorage.getItem(AUTH_KEY)); + +/** + * @description if any of the API gets 401 status code, this method + calls getAuthToken method to renew accessToken + * updates the error configuration and retries all failed requests + again +*/ +client.interceptors.response.use( + response => { + return response; + }, + error => { + if (error.response.status === 401) { + //place your reentry code + history.push("/login/error=unauthorized"); + } + + if (error.response.status === 502) { + //toastr.error(error.response); + history.push(`/error/${error.response.status}`); + } + + return error; + } +); + +export function setAuthorizationToken(token) { + const cookies = new Cookies(); + + if (token) { + client.defaults.headers.common['Authorization'] = token; + localStorage.setItem(AUTH_KEY, token); + + const current = new Date(); + const nextYear = new Date(); + + nextYear.setFullYear(current.getFullYear() + 1); + + cookies.set(AUTH_KEY, token, { + path: "/", + expires: nextYear + }); + } else { + localStorage.clear(); + delete client.defaults.headers.common['Authorization']; + cookies.remove(AUTH_KEY, { + path: "/" + }); + } +} + +const checkResponseError = (res) => { + if (res && res.data && res.data.error) { + console.error(res.data.error); + throw new Error(res.data.error.message); + } +} + +/** + * @description wrapper for making ajax requests + * @param {object} object with method,url,data etc. + */ +export const request = function(options) { + const onSuccess = function(response) { + checkResponseError(response); + return response.data.response; + }; + const onError = function(error) { + console.error("Request Failed:", error.config); + if (error.response) { + console.error("Status:", error.response.status); + console.error("Data:", error.response.data); + console.error("Headers:", error.response.headers); + } else { + console.error("Error Message:", error.message); + } + return Promise.reject(error.response || error.message); + }; + + return client(options) + .then(onSuccess) + .catch(onError); +}; diff --git a/web/ASC.Web.Common/src/store/services/api/index.js b/web/ASC.Web.Common/src/store/services/api/index.js new file mode 100644 index 0000000000..14cf03cbe5 --- /dev/null +++ b/web/ASC.Web.Common/src/store/services/api/index.js @@ -0,0 +1,4 @@ +import Filter from "./people/filter"; +import * as People from './people'; + +export default { Filter, People }; \ No newline at end of file diff --git a/web/ASC.Web.Common/src/store/services/api/people/filter.js b/web/ASC.Web.Common/src/store/services/api/people/filter.js new file mode 100644 index 0000000000..224972f8a7 --- /dev/null +++ b/web/ASC.Web.Common/src/store/services/api/people/filter.js @@ -0,0 +1,142 @@ +import { toUrlParams } from "../../../../utils/converter"; + +const DEFAULT_PAGE = 0; +const DEFAULT_PAGE_COUNT = 25; +const DEFAULT_TOTAL = 0; +const DEFAULT_SORT_BY = "firstname"; +const DEFAULT_SORT_ORDER = "ascending"; +const DEFAULT_EMPLOYEE_STATUS = null; +const DEFAULT_ACTIVATION_STATUS = null; +const DEFAULT_ROLE = null; +const DEFAULT_SEARCH = null; +const DEFAULT_GROUP = null; + +class Filter { + static getDefault(total = DEFAULT_TOTAL) { + return new Filter(DEFAULT_PAGE, DEFAULT_PAGE_COUNT, total); + } + + constructor( + page = DEFAULT_PAGE, + pageCount = DEFAULT_PAGE_COUNT, + total = DEFAULT_TOTAL, + sortBy = DEFAULT_SORT_BY, + sortOrder = DEFAULT_SORT_ORDER, + employeeStatus = DEFAULT_EMPLOYEE_STATUS, + activationStatus = DEFAULT_ACTIVATION_STATUS, + role = DEFAULT_ROLE, + search = DEFAULT_SEARCH, + group = DEFAULT_GROUP + ) { + this.page = page; + this.pageCount = pageCount; + this.sortBy = sortBy; + this.sortOrder = sortOrder; + this.employeeStatus = employeeStatus; + this.activationStatus = activationStatus; + this.role = role; + this.search = search; + this.total = total; + this.group = group; + } + + getStartIndex = () => { + return this.page * this.pageCount; + }; + + hasNext = () => { + return this.total - this.getStartIndex() > this.pageCount; + }; + + hasPrev = () => { + return this.page > 0; + }; + + toDto = () => { + const { + pageCount, + sortBy, + sortOrder, + employeeStatus, + activationStatus, + role, + search, + group + } = this; + + let dtoFilter = { + StartIndex: this.getStartIndex(), + Count: pageCount, + sortby: sortBy, + sortorder: sortOrder, + employeestatus: employeeStatus, + activationstatus: activationStatus, + filtervalue: search, + groupId: group + //fields: "id,status,isAdmin,isOwner,isVisitor,activationStatus,userName,email,displayName,avatarSmall, + //listAdminModules,birthday,title,location,isLDAP,isSSO" + }; + + switch (role) { + case "admin": + dtoFilter.isadministrator = true; + break; + case "user": + dtoFilter.employeeType = 1; + break; + case "guest": + dtoFilter.employeeType = 2; + break; + default: + break; + } + + return dtoFilter; + }; + + toUrlParams = () => { + const dtoFilter = this.toDto(); + const str = toUrlParams(dtoFilter, true); + return str; + }; + + clone(onlySorting) { + return onlySorting + ? new Filter( + DEFAULT_PAGE, + DEFAULT_PAGE_COUNT, + DEFAULT_TOTAL, + this.sortBy, + this.sortOrder + ) + : new Filter( + this.page, + this.pageCount, + this.total, + this.sortBy, + this.sortOrder, + this.employeeStatus, + this.activationStatus, + this.role, + this.search, + this.group + ); + } + + equals(filter) { + const equals = + this.employeeStatus === filter.employeeStatus && + this.activationStatus === filter.activationStatus && + this.role === filter.role && + this.group === filter.group && + this.search === filter.search && + this.sortBy === filter.sortBy && + this.sortOrder === filter.sortOrder && + this.page === filter.page && + this.pageCount === filter.pageCount; + + return equals; + } +} + +export default Filter; diff --git a/web/ASC.Web.Common/src/store/services/api/people/index.js b/web/ASC.Web.Common/src/store/services/api/people/index.js new file mode 100644 index 0000000000..444c8f9738 --- /dev/null +++ b/web/ASC.Web.Common/src/store/services/api/people/index.js @@ -0,0 +1,16 @@ + +import { request } from "../client"; +//import axios from "axios"; +import Filter from "./filter"; + +export function getUserList(filter = Filter.getDefault()) { + const params = + filter && filter instanceof Filter + ? `/filter.json?${filter.toUrlParams()}` + : ""; + + return request({ + method: "get", + url: `/people${params}` + }); + } \ No newline at end of file diff --git a/web/ASC.Web.Common/src/utils/converter.js b/web/ASC.Web.Common/src/utils/converter.js new file mode 100644 index 0000000000..6123aae47d --- /dev/null +++ b/web/ASC.Web.Common/src/utils/converter.js @@ -0,0 +1,14 @@ +export const toUrlParams = (obj, skipNull) => { + let str = ""; + for (var key in obj) { + if (skipNull && !obj[key]) continue; + + if (str !== "") { + str += "&"; + } + + str += key + "=" + encodeURIComponent(obj[key]); + } + + return str; +}; diff --git a/web/ASC.Web.Common/test/replace-module-paths.js b/web/ASC.Web.Common/test/replace-module-paths.js new file mode 100644 index 0000000000..486a1168c5 --- /dev/null +++ b/web/ASC.Web.Common/test/replace-module-paths.js @@ -0,0 +1,17 @@ +const path = require('path'); + +module.exports = function replaceImport(originalPath, callingFileName) { + // This replacement rewrites imports of ui-kit to an import using a relative + // path pointing at the root folder. + // This allows to import from the bundled ui-kit using + // import { PrimaryButton } from 'ui-kit' + // instead of + // import { PrimaryButton } from '../../..' + if (originalPath === 'ui-kit' && callingFileName.endsWith('.bundlespec.js')) { + const fromPath = path.dirname(callingFileName); + const toPath = process.cwd(); + const relativePath = path.relative(fromPath, toPath); + return relativePath; + } + return originalPath; +}; diff --git a/web/ASC.Web.Common/test/setup-tests.js b/web/ASC.Web.Common/test/setup-tests.js new file mode 100644 index 0000000000..38f08ab28c --- /dev/null +++ b/web/ASC.Web.Common/test/setup-tests.js @@ -0,0 +1,76 @@ +import fs from 'fs'; +import path from 'path'; +import colors from 'colors/safe'; + +const shouldSilenceWarnings = (...messages) => + [/Warning: componentWillReceiveProps has been renamed/].some(msgRegex => + messages.some(msg => msgRegex.test(msg)) + ); + +global.window.app = { + mcApiUrl: 'http://localhost:8080', +}; + +// setup file +const logOrThrow = (log, method, messages) => { + const warning = `console.${method} calls not allowed in tests`; + if (process.env.CI) { + if (shouldSilenceWarnings(messages)) { + return; + } + + log(warning, '\n', ...messages); + throw new Error(warning); + } else { + log(colors.bgYellow.black(' WARN '), warning, '\n', ...messages); + } +}; + +// eslint-disable-next-line no-console +const logMessage = console.log; +global.console.log = (...messages) => { + logOrThrow(logMessage, 'log', messages); +}; + +// eslint-disable-next-line no-console +const logInfo = console.info; +global.console.info = (...messages) => { + logOrThrow(logInfo, 'info', messages); +}; + +// eslint-disable-next-line no-console +const logWarning = console.warn; +global.console.warn = (...messages) => { + logOrThrow(logWarning, 'warn', messages); +}; + +// eslint-disable-next-line no-console +const logError = console.error; +global.console.error = (...messages) => { + logOrThrow(logError, 'error', messages); +}; + +// Avoid unhandled promise rejections from going unnoticed +// https://github.com/facebook/jest/issues/3251#issuecomment-299183885 +// In Node v7 unhandled promise rejections will terminate the process +if (!process.env.LISTENING_TO_UNHANDLED_REJECTION) { + process.on('unhandledRejection', reason => { + logMessage('UNHANDLED REJECTION', reason); + + // We create a file in case there is an unhandled rejection + // We later check for the existence of this file to fail CI + if (process.env.CI && !process.env.HAS_CREATED_UNHANDLED_REJECTION_FILE) { + const rootPath = process.cwd(); + fs.writeFileSync( + path.join( + rootPath, + './fail-tests-because-there-was-an-unhandled-rejection.lock' + ), + '' + ); + process.env.HAS_CREATED_UNHANDLED_REJECTION_FILE = true; + } + }); + // Avoid memory leak by adding too many listeners + process.env.LISTENING_TO_UNHANDLED_REJECTION = true; +} diff --git a/web/ASC.Web.Common/test/transform-babel-jest.js b/web/ASC.Web.Common/test/transform-babel-jest.js new file mode 100644 index 0000000000..db30cf341e --- /dev/null +++ b/web/ASC.Web.Common/test/transform-babel-jest.js @@ -0,0 +1,15 @@ +const babelPresetJest = require('babel-preset-jest'); +const getBabelPreset = require('../scripts/get-babel-preset'); + +const babelOptions = getBabelPreset(); + +const jestBabelConfig = { + ...babelOptions, + plugins: [ + ...babelOptions.plugins, + ...babelPresetJest().plugins/*, + ['module-rewrite', { replaceFunc: './test/replace-module-paths.js' }],*/ + ], +}; + +module.exports = require('babel-jest').createTransformer(jestBabelConfig); diff --git a/web/ASC.Web.Common/test/transform-file.js b/web/ASC.Web.Common/test/transform-file.js new file mode 100644 index 0000000000..86059f3629 --- /dev/null +++ b/web/ASC.Web.Common/test/transform-file.js @@ -0,0 +1 @@ +module.exports = 'test-file-stub'; From ccb8a6c22af6c8080a11f27c935c868c79b18efb Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Wed, 13 Nov 2019 11:07:25 +0300 Subject: [PATCH 02/55] web: Common: Applied server changes on login/logout for ASC.Web.Common --- .../src/store/services/api/client.js | 29 ++++++------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/web/ASC.Web.Common/src/store/services/api/client.js b/web/ASC.Web.Common/src/store/services/api/client.js index 6c6ef5a18e..9189079e46 100644 --- a/web/ASC.Web.Common/src/store/services/api/client.js +++ b/web/ASC.Web.Common/src/store/services/api/client.js @@ -1,5 +1,4 @@ import axios from "axios"; -import Cookies from "universal-cookie"; import history from "../../../history"; import { AUTH_KEY } from "../../../constants"; @@ -46,27 +45,12 @@ client.interceptors.response.use( ); export function setAuthorizationToken(token) { - const cookies = new Cookies(); - if (token) { - client.defaults.headers.common['Authorization'] = token; - localStorage.setItem(AUTH_KEY, token); - - const current = new Date(); - const nextYear = new Date(); - - nextYear.setFullYear(current.getFullYear() + 1); - - cookies.set(AUTH_KEY, token, { - path: "/", - expires: nextYear - }); + client.defaults.withCredentials = true; + localStorage.setItem(AUTH_KEY, true); } else { + client.defaults.withCredentials = false; localStorage.clear(); - delete client.defaults.headers.common['Authorization']; - cookies.remove(AUTH_KEY, { - path: "/" - }); } } @@ -84,8 +68,13 @@ const checkResponseError = (res) => { export const request = function(options) { const onSuccess = function(response) { checkResponseError(response); - return response.data.response; + return response.data + ? response.data.hasOwnProperty("total") + ? { total: +response.data.total, items: response.data.response } + : response.data.response + : null; }; + const onError = function(error) { console.error("Request Failed:", error.config); if (error.response) { From 39889d028e272f7d391be46c041b93248f3cbbc0 Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Wed, 13 Nov 2019 11:09:39 +0300 Subject: [PATCH 03/55] web: Common: Added folder 'dist' to .gitignore --- .gitignore | 1 + web/ASC.Web.Common/dist/asc-web-common.esm.js | 1325 ---------------- .../dist/asc-web-common.esm.js.map | 1 - web/ASC.Web.Common/dist/asc-web-common.js | 1374 ----------------- web/ASC.Web.Common/dist/asc-web-common.js.map | 1 - 5 files changed, 1 insertion(+), 2701 deletions(-) delete mode 100644 web/ASC.Web.Common/dist/asc-web-common.esm.js delete mode 100644 web/ASC.Web.Common/dist/asc-web-common.esm.js.map delete mode 100644 web/ASC.Web.Common/dist/asc-web-common.js delete mode 100644 web/ASC.Web.Common/dist/asc-web-common.js.map diff --git a/.gitignore b/.gitignore index c2f4e1bbb2..837907f46f 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ **/node_modules/ **/storybook-static/ /web/ASC.Web.Components/dist +/web/ASC.Web.Common/dist /build/deploy *.log /packages/asc-web-components diff --git a/web/ASC.Web.Common/dist/asc-web-common.esm.js b/web/ASC.Web.Common/dist/asc-web-common.esm.js deleted file mode 100644 index c5f97da40a..0000000000 --- a/web/ASC.Web.Common/dist/asc-web-common.esm.js +++ /dev/null @@ -1,1325 +0,0 @@ -import axios from 'axios'; -import Cookies from 'universal-cookie'; -import { createBrowserHistory } from 'history'; - -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} - -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys.push.apply(keys, symbols); - } - - return keys; -} - -function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(source, true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(source).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; -} - -var toUrlParams = function toUrlParams(obj, skipNull) { - var str = ""; - for (var key in obj) { - if (skipNull && !obj[key]) continue; - if (str !== "") { - str += "&"; - } - str += key + "=" + encodeURIComponent(obj[key]); - } - return str; -}; - -var DEFAULT_PAGE = 0; -var DEFAULT_PAGE_COUNT = 25; -var DEFAULT_TOTAL = 0; -var DEFAULT_SORT_BY = "firstname"; -var DEFAULT_SORT_ORDER = "ascending"; -var DEFAULT_EMPLOYEE_STATUS = null; -var DEFAULT_ACTIVATION_STATUS = null; -var DEFAULT_ROLE = null; -var DEFAULT_SEARCH = null; -var DEFAULT_GROUP = null; -var Filter = -function () { - _createClass(Filter, null, [{ - key: "getDefault", - value: function getDefault() { - var total = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_TOTAL; - return new Filter(DEFAULT_PAGE, DEFAULT_PAGE_COUNT, total); - } - }]); - function Filter() { - var _this = this; - var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_PAGE; - var _pageCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_PAGE_COUNT; - var total = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_TOTAL; - var _sortBy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_SORT_BY; - var _sortOrder = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : DEFAULT_SORT_ORDER; - var _employeeStatus = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : DEFAULT_EMPLOYEE_STATUS; - var _activationStatus = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : DEFAULT_ACTIVATION_STATUS; - var _role = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : DEFAULT_ROLE; - var _search = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : DEFAULT_SEARCH; - var _group = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : DEFAULT_GROUP; - _classCallCheck(this, Filter); - this.getStartIndex = function () { - return _this.page * _this.pageCount; - }; - this.hasNext = function () { - return _this.total - _this.getStartIndex() > _this.pageCount; - }; - this.hasPrev = function () { - return _this.page > 0; - }; - this.toDto = function () { - var pageCount = _this.pageCount, - sortBy = _this.sortBy, - sortOrder = _this.sortOrder, - employeeStatus = _this.employeeStatus, - activationStatus = _this.activationStatus, - role = _this.role, - search = _this.search, - group = _this.group; - var dtoFilter = { - StartIndex: _this.getStartIndex(), - Count: pageCount, - sortby: sortBy, - sortorder: sortOrder, - employeestatus: employeeStatus, - activationstatus: activationStatus, - filtervalue: search, - groupId: group - }; - switch (role) { - case "admin": - dtoFilter.isadministrator = true; - break; - case "user": - dtoFilter.employeeType = 1; - break; - case "guest": - dtoFilter.employeeType = 2; - break; - } - return dtoFilter; - }; - this.toUrlParams = function () { - var dtoFilter = _this.toDto(); - var str = toUrlParams(dtoFilter, true); - return str; - }; - this.page = page; - this.pageCount = _pageCount; - this.sortBy = _sortBy; - this.sortOrder = _sortOrder; - this.employeeStatus = _employeeStatus; - this.activationStatus = _activationStatus; - this.role = _role; - this.search = _search; - this.total = total; - this.group = _group; - } - _createClass(Filter, [{ - key: "clone", - value: function clone(onlySorting) { - return onlySorting ? new Filter(DEFAULT_PAGE, DEFAULT_PAGE_COUNT, DEFAULT_TOTAL, this.sortBy, this.sortOrder) : new Filter(this.page, this.pageCount, this.total, this.sortBy, this.sortOrder, this.employeeStatus, this.activationStatus, this.role, this.search, this.group); - } - }, { - key: "equals", - value: function equals(filter) { - var equals = this.employeeStatus === filter.employeeStatus && this.activationStatus === filter.activationStatus && this.role === filter.role && this.group === filter.group && this.search === filter.search && this.sortBy === filter.sortBy && this.sortOrder === filter.sortOrder && this.page === filter.page && this.pageCount === filter.pageCount; - return equals; - } - }]); - return Filter; -}(); - -var history = createBrowserHistory(); - -var AUTH_KEY = 'asc_auth_key'; -var EmployeeActivationStatus = Object.freeze({ - NotActivated: 0, - Activated: 1, - Pending: 2, - AutoGenerated: 4 -}); -var ConfirmType = Object.freeze({ - EmpInvite: 0, - LinkInvite: 1, - PortalSuspend: 2, - PortalContinue: 3, - PortalRemove: 4, - DnsChange: 5, - PortalOwnerChange: 6, - Activation: 7, - EmailChange: 8, - EmailActivation: 9, - PasswordChange: 10, - ProfileRemove: 11, - PhoneActivation: 12, - PhoneAuth: 13, - Auth: 14, - TfaActivation: 15, - TfaAuth: 16 -}); -var ValidationResult = Object.freeze({ - Ok: 0, - Invalid: 1, - Expired: 2 -}); -var EmployeeStatus = Object.freeze({ - Active: 1, - Disabled: 2 -}); - -var PREFIX = "api"; -var VERSION = "2.0"; -var baseURL = "".concat(window.location.origin, "/").concat(PREFIX, "/").concat(VERSION); -var client = axios.create({ - baseURL: baseURL, - responseType: 'json', - timeout: 30000 -}); -setAuthorizationToken(localStorage.getItem(AUTH_KEY)); -client.interceptors.response.use(function (response) { - return response; -}, function (error) { - if (error.response.status === 401) { - history.push("/login/error=unauthorized"); - } - if (error.response.status === 502) { - history.push("/error/".concat(error.response.status)); - } - return error; -}); -function setAuthorizationToken(token) { - var cookies = new Cookies(); - if (token) { - client.defaults.headers.common['Authorization'] = token; - localStorage.setItem(AUTH_KEY, token); - var current = new Date(); - var nextYear = new Date(); - nextYear.setFullYear(current.getFullYear() + 1); - cookies.set(AUTH_KEY, token, { - path: "/", - expires: nextYear - }); - } else { - localStorage.clear(); - delete client.defaults.headers.common['Authorization']; - cookies.remove(AUTH_KEY, { - path: "/" - }); - } -} -var checkResponseError = function checkResponseError(res) { - if (res && res.data && res.data.error) { - console.error(res.data.error); - throw new Error(res.data.error.message); - } -}; -var request = function request(options) { - var onSuccess = function onSuccess(response) { - checkResponseError(response); - return response.data.response; - }; - var onError = function onError(error) { - console.error("Request Failed:", error.config); - if (error.response) { - console.error("Status:", error.response.status); - console.error("Data:", error.response.data); - console.error("Headers:", error.response.headers); - } else { - console.error("Error Message:", error.message); - } - return Promise.reject(error.response || error.message); - }; - return client(options).then(onSuccess).catch(onError); -}; - -function getUserList() { - var filter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Filter.getDefault(); - var params = filter && filter instanceof Filter ? "/filter.json?".concat(filter.toUrlParams()) : ""; - return request({ - method: "get", - url: "/people".concat(params) - }); -} - -var People = /*#__PURE__*/Object.freeze({ - __proto__: null, - getUserList: getUserList -}); - -var index = { - Filter: Filter, - People: People -}; - -var api = /*#__PURE__*/Object.freeze({ - __proto__: null, - 'default': index -}); - -function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; -} - -var runtime_1 = createCommonjsModule(function (module) { -var runtime = (function (exports) { - var Op = Object.prototype; - var hasOwn = Op.hasOwnProperty; - var undefined$1; - var $Symbol = typeof Symbol === "function" ? Symbol : {}; - var iteratorSymbol = $Symbol.iterator || "@@iterator"; - var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; - var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; - function wrap(innerFn, outerFn, self, tryLocsList) { - var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; - var generator = Object.create(protoGenerator.prototype); - var context = new Context(tryLocsList || []); - generator._invoke = makeInvokeMethod(innerFn, self, context); - return generator; - } - exports.wrap = wrap; - function tryCatch(fn, obj, arg) { - try { - return { type: "normal", arg: fn.call(obj, arg) }; - } catch (err) { - return { type: "throw", arg: err }; - } - } - var GenStateSuspendedStart = "suspendedStart"; - var GenStateSuspendedYield = "suspendedYield"; - var GenStateExecuting = "executing"; - var GenStateCompleted = "completed"; - var ContinueSentinel = {}; - function Generator() {} - function GeneratorFunction() {} - function GeneratorFunctionPrototype() {} - var IteratorPrototype = {}; - IteratorPrototype[iteratorSymbol] = function () { - return this; - }; - var getProto = Object.getPrototypeOf; - var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); - if (NativeIteratorPrototype && - NativeIteratorPrototype !== Op && - hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { - IteratorPrototype = NativeIteratorPrototype; - } - var Gp = GeneratorFunctionPrototype.prototype = - Generator.prototype = Object.create(IteratorPrototype); - GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; - GeneratorFunctionPrototype.constructor = GeneratorFunction; - GeneratorFunctionPrototype[toStringTagSymbol] = - GeneratorFunction.displayName = "GeneratorFunction"; - function defineIteratorMethods(prototype) { - ["next", "throw", "return"].forEach(function(method) { - prototype[method] = function(arg) { - return this._invoke(method, arg); - }; - }); - } - exports.isGeneratorFunction = function(genFun) { - var ctor = typeof genFun === "function" && genFun.constructor; - return ctor - ? ctor === GeneratorFunction || - (ctor.displayName || ctor.name) === "GeneratorFunction" - : false; - }; - exports.mark = function(genFun) { - if (Object.setPrototypeOf) { - Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); - } else { - genFun.__proto__ = GeneratorFunctionPrototype; - if (!(toStringTagSymbol in genFun)) { - genFun[toStringTagSymbol] = "GeneratorFunction"; - } - } - genFun.prototype = Object.create(Gp); - return genFun; - }; - exports.awrap = function(arg) { - return { __await: arg }; - }; - function AsyncIterator(generator) { - function invoke(method, arg, resolve, reject) { - var record = tryCatch(generator[method], generator, arg); - if (record.type === "throw") { - reject(record.arg); - } else { - var result = record.arg; - var value = result.value; - if (value && - typeof value === "object" && - hasOwn.call(value, "__await")) { - return Promise.resolve(value.__await).then(function(value) { - invoke("next", value, resolve, reject); - }, function(err) { - invoke("throw", err, resolve, reject); - }); - } - return Promise.resolve(value).then(function(unwrapped) { - result.value = unwrapped; - resolve(result); - }, function(error) { - return invoke("throw", error, resolve, reject); - }); - } - } - var previousPromise; - function enqueue(method, arg) { - function callInvokeWithMethodAndArg() { - return new Promise(function(resolve, reject) { - invoke(method, arg, resolve, reject); - }); - } - return previousPromise = - previousPromise ? previousPromise.then( - callInvokeWithMethodAndArg, - callInvokeWithMethodAndArg - ) : callInvokeWithMethodAndArg(); - } - this._invoke = enqueue; - } - defineIteratorMethods(AsyncIterator.prototype); - AsyncIterator.prototype[asyncIteratorSymbol] = function () { - return this; - }; - exports.AsyncIterator = AsyncIterator; - exports.async = function(innerFn, outerFn, self, tryLocsList) { - var iter = new AsyncIterator( - wrap(innerFn, outerFn, self, tryLocsList) - ); - return exports.isGeneratorFunction(outerFn) - ? iter - : iter.next().then(function(result) { - return result.done ? result.value : iter.next(); - }); - }; - function makeInvokeMethod(innerFn, self, context) { - var state = GenStateSuspendedStart; - return function invoke(method, arg) { - if (state === GenStateExecuting) { - throw new Error("Generator is already running"); - } - if (state === GenStateCompleted) { - if (method === "throw") { - throw arg; - } - return doneResult(); - } - context.method = method; - context.arg = arg; - while (true) { - var delegate = context.delegate; - if (delegate) { - var delegateResult = maybeInvokeDelegate(delegate, context); - if (delegateResult) { - if (delegateResult === ContinueSentinel) continue; - return delegateResult; - } - } - if (context.method === "next") { - context.sent = context._sent = context.arg; - } else if (context.method === "throw") { - if (state === GenStateSuspendedStart) { - state = GenStateCompleted; - throw context.arg; - } - context.dispatchException(context.arg); - } else if (context.method === "return") { - context.abrupt("return", context.arg); - } - state = GenStateExecuting; - var record = tryCatch(innerFn, self, context); - if (record.type === "normal") { - state = context.done - ? GenStateCompleted - : GenStateSuspendedYield; - if (record.arg === ContinueSentinel) { - continue; - } - return { - value: record.arg, - done: context.done - }; - } else if (record.type === "throw") { - state = GenStateCompleted; - context.method = "throw"; - context.arg = record.arg; - } - } - }; - } - function maybeInvokeDelegate(delegate, context) { - var method = delegate.iterator[context.method]; - if (method === undefined$1) { - context.delegate = null; - if (context.method === "throw") { - if (delegate.iterator["return"]) { - context.method = "return"; - context.arg = undefined$1; - maybeInvokeDelegate(delegate, context); - if (context.method === "throw") { - return ContinueSentinel; - } - } - context.method = "throw"; - context.arg = new TypeError( - "The iterator does not provide a 'throw' method"); - } - return ContinueSentinel; - } - var record = tryCatch(method, delegate.iterator, context.arg); - if (record.type === "throw") { - context.method = "throw"; - context.arg = record.arg; - context.delegate = null; - return ContinueSentinel; - } - var info = record.arg; - if (! info) { - context.method = "throw"; - context.arg = new TypeError("iterator result is not an object"); - context.delegate = null; - return ContinueSentinel; - } - if (info.done) { - context[delegate.resultName] = info.value; - context.next = delegate.nextLoc; - if (context.method !== "return") { - context.method = "next"; - context.arg = undefined$1; - } - } else { - return info; - } - context.delegate = null; - return ContinueSentinel; - } - defineIteratorMethods(Gp); - Gp[toStringTagSymbol] = "Generator"; - Gp[iteratorSymbol] = function() { - return this; - }; - Gp.toString = function() { - return "[object Generator]"; - }; - function pushTryEntry(locs) { - var entry = { tryLoc: locs[0] }; - if (1 in locs) { - entry.catchLoc = locs[1]; - } - if (2 in locs) { - entry.finallyLoc = locs[2]; - entry.afterLoc = locs[3]; - } - this.tryEntries.push(entry); - } - function resetTryEntry(entry) { - var record = entry.completion || {}; - record.type = "normal"; - delete record.arg; - entry.completion = record; - } - function Context(tryLocsList) { - this.tryEntries = [{ tryLoc: "root" }]; - tryLocsList.forEach(pushTryEntry, this); - this.reset(true); - } - exports.keys = function(object) { - var keys = []; - for (var key in object) { - keys.push(key); - } - keys.reverse(); - return function next() { - while (keys.length) { - var key = keys.pop(); - if (key in object) { - next.value = key; - next.done = false; - return next; - } - } - next.done = true; - return next; - }; - }; - function values(iterable) { - if (iterable) { - var iteratorMethod = iterable[iteratorSymbol]; - if (iteratorMethod) { - return iteratorMethod.call(iterable); - } - if (typeof iterable.next === "function") { - return iterable; - } - if (!isNaN(iterable.length)) { - var i = -1, next = function next() { - while (++i < iterable.length) { - if (hasOwn.call(iterable, i)) { - next.value = iterable[i]; - next.done = false; - return next; - } - } - next.value = undefined$1; - next.done = true; - return next; - }; - return next.next = next; - } - } - return { next: doneResult }; - } - exports.values = values; - function doneResult() { - return { value: undefined$1, done: true }; - } - Context.prototype = { - constructor: Context, - reset: function(skipTempReset) { - this.prev = 0; - this.next = 0; - this.sent = this._sent = undefined$1; - this.done = false; - this.delegate = null; - this.method = "next"; - this.arg = undefined$1; - this.tryEntries.forEach(resetTryEntry); - if (!skipTempReset) { - for (var name in this) { - if (name.charAt(0) === "t" && - hasOwn.call(this, name) && - !isNaN(+name.slice(1))) { - this[name] = undefined$1; - } - } - } - }, - stop: function() { - this.done = true; - var rootEntry = this.tryEntries[0]; - var rootRecord = rootEntry.completion; - if (rootRecord.type === "throw") { - throw rootRecord.arg; - } - return this.rval; - }, - dispatchException: function(exception) { - if (this.done) { - throw exception; - } - var context = this; - function handle(loc, caught) { - record.type = "throw"; - record.arg = exception; - context.next = loc; - if (caught) { - context.method = "next"; - context.arg = undefined$1; - } - return !! caught; - } - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - var record = entry.completion; - if (entry.tryLoc === "root") { - return handle("end"); - } - if (entry.tryLoc <= this.prev) { - var hasCatch = hasOwn.call(entry, "catchLoc"); - var hasFinally = hasOwn.call(entry, "finallyLoc"); - if (hasCatch && hasFinally) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } else if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - } else if (hasCatch) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } - } else if (hasFinally) { - if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - } else { - throw new Error("try statement without catch or finally"); - } - } - } - }, - abrupt: function(type, arg) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.tryLoc <= this.prev && - hasOwn.call(entry, "finallyLoc") && - this.prev < entry.finallyLoc) { - var finallyEntry = entry; - break; - } - } - if (finallyEntry && - (type === "break" || - type === "continue") && - finallyEntry.tryLoc <= arg && - arg <= finallyEntry.finallyLoc) { - finallyEntry = null; - } - var record = finallyEntry ? finallyEntry.completion : {}; - record.type = type; - record.arg = arg; - if (finallyEntry) { - this.method = "next"; - this.next = finallyEntry.finallyLoc; - return ContinueSentinel; - } - return this.complete(record); - }, - complete: function(record, afterLoc) { - if (record.type === "throw") { - throw record.arg; - } - if (record.type === "break" || - record.type === "continue") { - this.next = record.arg; - } else if (record.type === "return") { - this.rval = this.arg = record.arg; - this.method = "return"; - this.next = "end"; - } else if (record.type === "normal" && afterLoc) { - this.next = afterLoc; - } - return ContinueSentinel; - }, - finish: function(finallyLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.finallyLoc === finallyLoc) { - this.complete(entry.completion, entry.afterLoc); - resetTryEntry(entry); - return ContinueSentinel; - } - } - }, - "catch": function(tryLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.tryLoc === tryLoc) { - var record = entry.completion; - if (record.type === "throw") { - var thrown = record.arg; - resetTryEntry(entry); - } - return thrown; - } - } - throw new Error("illegal catch attempt"); - }, - delegateYield: function(iterable, resultName, nextLoc) { - this.delegate = { - iterator: values(iterable), - resultName: resultName, - nextLoc: nextLoc - }; - if (this.method === "next") { - this.arg = undefined$1; - } - return ContinueSentinel; - } - }; - return exports; -}( - module.exports -)); -try { - regeneratorRuntime = runtime; -} catch (accidentalStrictMode) { - Function("r", "regeneratorRuntime = r")(runtime); -} -}); - -var regenerator = runtime_1; - -var LOGIN_POST = "LOGIN_POST"; -var SET_CURRENT_USER = "SET_CURRENT_USER"; -var SET_MODULE = "SET_MODULE"; -var SET_MODULES = "SET_MODULES"; -var SET_SETTINGS = "SET_SETTINGS"; -var SET_IS_LOADED = "SET_IS_LOADED"; -var LOGOUT = "LOGOUT"; -function setModule(module) { - return { - type: SET_MODULE, - module: module - }; -} -function setCurrentUser(user) { - return { - type: SET_CURRENT_USER, - user: user - }; -} -function setModules(modules) { - return { - type: SET_MODULES, - modules: modules - }; -} -function setSettings(settings) { - return { - type: SET_SETTINGS, - settings: settings - }; -} -function setIsLoaded(isLoaded) { - return { - type: SET_IS_LOADED, - isLoaded: isLoaded - }; -} -function setLogout() { - return { - type: LOGOUT - }; -} -function getUserInfo(dispatch, additionalAction) { - var _ref, user, modules, settings, newSettings, inviteLinks; - return regenerator.async(function getUserInfo$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return regenerator.awrap(undefined()); - case 2: - _ref = _context.sent; - user = _ref.user; - modules = _ref.modules; - settings = _ref.settings; - newSettings = settings; - if (!user.isAdmin) { - _context.next = 12; - break; - } - _context.next = 10; - return regenerator.awrap(undefined()); - case 10: - inviteLinks = _context.sent; - newSettings = Object.assign(newSettings, inviteLinks); - case 12: - dispatch(setCurrentUser(user)); - dispatch(setModules(modules)); - dispatch(setSettings(newSettings)); - additionalAction && additionalAction(); - return _context.abrupt("return", dispatch(setIsLoaded(true))); - case 17: - case "end": - return _context.stop(); - } - } - }); -} -function logout() { - return function (dispatch) { - setAuthorizationToken(); - return dispatch(setLogout()); - }; -} - -var actions = /*#__PURE__*/Object.freeze({ - __proto__: null, - LOGIN_POST: LOGIN_POST, - SET_CURRENT_USER: SET_CURRENT_USER, - SET_MODULE: SET_MODULE, - SET_MODULES: SET_MODULES, - SET_SETTINGS: SET_SETTINGS, - SET_IS_LOADED: SET_IS_LOADED, - LOGOUT: LOGOUT, - setModule: setModule, - setCurrentUser: setCurrentUser, - setModules: setModules, - setSettings: setSettings, - setIsLoaded: setIsLoaded, - setLogout: setLogout, - getUserInfo: getUserInfo, - logout: logout -}); - -var objectProto = Object.prototype; -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - return value === proto; -} - -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} - -var nativeKeys = overArg(Object.keys, Object); - -var objectProto$1 = Object.prototype; -var hasOwnProperty = objectProto$1.hasOwnProperty; -function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; -} - -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; -var root = freeGlobal || freeSelf || Function('return this')(); - -var Symbol$1 = root.Symbol; - -var objectProto$2 = Object.prototype; -var hasOwnProperty$1 = objectProto$2.hasOwnProperty; -var nativeObjectToString = objectProto$2.toString; -var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; -function getRawTag(value) { - var isOwn = hasOwnProperty$1.call(value, symToStringTag), - tag = value[symToStringTag]; - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; -} - -var objectProto$3 = Object.prototype; -var nativeObjectToString$1 = objectProto$3.toString; -function objectToString(value) { - return nativeObjectToString$1.call(value); -} - -var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; -var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; -function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag$1 && symToStringTag$1 in Object(value)) - ? getRawTag(value) - : objectToString(value); -} - -function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); -} - -var asyncTag = '[object AsyncFunction]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; -function isFunction(value) { - if (!isObject(value)) { - return false; - } - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; -} - -var coreJsData = root['__core-js_shared__']; - -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -var funcProto = Function.prototype; -var funcToString = funcProto.toString; -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; -var reIsHostCtor = /^\[object .+?Constructor\]$/; -var funcProto$1 = Function.prototype, - objectProto$4 = Object.prototype; -var funcToString$1 = funcProto$1.toString; -var hasOwnProperty$2 = objectProto$4.hasOwnProperty; -var reIsNative = RegExp('^' + - funcToString$1.call(hasOwnProperty$2).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -var DataView = getNative(root, 'DataView'); - -var Map = getNative(root, 'Map'); - -var Promise$1 = getNative(root, 'Promise'); - -var Set = getNative(root, 'Set'); - -var WeakMap = getNative(root, 'WeakMap'); - -var mapTag = '[object Map]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - setTag = '[object Set]', - weakMapTag = '[object WeakMap]'; -var dataViewTag = '[object DataView]'; -var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise$1), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); -var getTag = baseGetTag; -if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || - (Promise$1 && getTag(Promise$1.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = baseGetTag(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : ''; - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; -} -var getTag$1 = getTag; - -function isObjectLike(value) { - return value != null && typeof value == 'object'; -} - -var argsTag = '[object Arguments]'; -function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; -} - -var objectProto$5 = Object.prototype; -var hasOwnProperty$3 = objectProto$5.hasOwnProperty; -var propertyIsEnumerable = objectProto$5.propertyIsEnumerable; -var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); -}; - -var isArray = Array.isArray; - -var MAX_SAFE_INTEGER = 9007199254740991; -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); -} - -function stubFalse() { - return false; -} - -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; -var moduleExports = freeModule && freeModule.exports === freeExports; -var Buffer = moduleExports ? root.Buffer : undefined; -var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; -var isBuffer = nativeIsBuffer || stubFalse; - -var argsTag$1 = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag$1 = '[object Function]', - mapTag$1 = '[object Map]', - numberTag = '[object Number]', - objectTag$1 = '[object Object]', - regexpTag = '[object RegExp]', - setTag$1 = '[object Set]', - stringTag = '[object String]', - weakMapTag$1 = '[object WeakMap]'; -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag$1 = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag$1] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[funcTag$1] = -typedArrayTags[mapTag$1] = typedArrayTags[numberTag] = -typedArrayTags[objectTag$1] = typedArrayTags[regexpTag] = -typedArrayTags[setTag$1] = typedArrayTags[stringTag] = -typedArrayTags[weakMapTag$1] = false; -function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; -} - -function baseUnary(func) { - return function(value) { - return func(value); - }; -} - -var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; -var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; -var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; -var freeProcess = moduleExports$1 && freeGlobal.process; -var nodeUtil = (function() { - try { - var types = freeModule$1 && freeModule$1.require && freeModule$1.require('util').types; - if (types) { - return types; - } - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} -}()); - -var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; -var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - -var mapTag$2 = '[object Map]', - setTag$2 = '[object Set]'; -var objectProto$6 = Object.prototype; -var hasOwnProperty$4 = objectProto$6.hasOwnProperty; -function isEmpty(value) { - if (value == null) { - return true; - } - if (isArrayLike(value) && - (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || - isBuffer(value) || isTypedArray(value) || isArguments(value))) { - return !value.length; - } - var tag = getTag$1(value); - if (tag == mapTag$2 || tag == setTag$2) { - return !value.size; - } - if (isPrototype(value)) { - return !baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty$4.call(value, key)) { - return false; - } - } - return true; -} - -var initialState = { - isAuthenticated: false, - isLoaded: false, - user: {}, - modules: [], - settings: { - currentProductId: null, - culture: "en-US", - trustedDomains: [], - trustedDomainsType: 1, - timezone: "UTC", - utcOffset: "00:00:00", - utcHoursOffset: 0, - homepage: "", - datePattern: "M/d/yyyy", - datePatternJQ: "00/00/0000", - dateTimePattern: "dddd, MMMM d, yyyy h:mm:ss tt", - datepicker: { - datePattern: "mm/dd/yy", - dateTimePattern: "DD, mm dd, yy h:mm:ss tt", - timePattern: "h:mm tt" - }, - hasShortenService: false - } -}; -var authReducer = function authReducer() { - var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; - var action = arguments.length > 1 ? arguments[1] : undefined; - switch (action.type) { - case SET_CURRENT_USER: - return Object.assign({}, state, { - isAuthenticated: !isEmpty(action.user), - user: action.user - }); - case SET_MODULE: - return Object.assign({}, state, { - settings: _objectSpread2({}, state.settings, { - currentProductId: action.module.id, - homepage: action.module.homepage - }) - }); - case SET_MODULES: - return Object.assign({}, state, { - modules: action.modules - }); - case SET_SETTINGS: - return Object.assign({}, state, { - settings: _objectSpread2({}, state.settings, {}, action.settings) - }); - case SET_IS_LOADED: - return Object.assign({}, state, { - isLoaded: action.isLoaded - }); - case LOGOUT: - return Object.assign({}, initialState, { - isLoaded: true - }); - default: - return state; - } -}; - -var reducers = /*#__PURE__*/Object.freeze({ - __proto__: null, - 'default': authReducer -}); - -function isAdmin(user) { - var isPeopleAdmin = user.listAdminModules ? user.listAdminModules.includes('people') : false; - return user.isAdmin || user.isOwner || isPeopleAdmin; -} -function isMe(user, userName) { - return userName === "@self" || userName === user.userName; -} -function getCurrentModule(modules, currentModuleId) { - return modules.find(function (module) { - return module.id === currentModuleId; - }); -} - -var selectors = /*#__PURE__*/Object.freeze({ - __proto__: null, - isAdmin: isAdmin, - isMe: isMe, - getCurrentModule: getCurrentModule -}); - -var index$1 = { - actions: actions, - reducers: reducers, - selectors: selectors -}; - -export { index as Api, index$1 as Auth }; -//# sourceMappingURL=asc-web-common.esm.js.map diff --git a/web/ASC.Web.Common/dist/asc-web-common.esm.js.map b/web/ASC.Web.Common/dist/asc-web-common.esm.js.map deleted file mode 100644 index f50708bf32..0000000000 --- a/web/ASC.Web.Common/dist/asc-web-common.esm.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"asc-web-common.esm.js","sources":["../src/utils/converter.js","../src/store/services/api/people/filter.js","../src/history/index.js","../src/constants/index.js","../src/store/services/api/client.js","../src/store/services/api/people/index.js","../src/store/services/api/index.js","../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js","../node_modules/@babel/runtime/regenerator/index.js","../src/store/auth/actions.js","../node_modules/lodash-es/_isPrototype.js","../node_modules/lodash-es/_overArg.js","../node_modules/lodash-es/_nativeKeys.js","../node_modules/lodash-es/_baseKeys.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_DataView.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_Promise.js","../node_modules/lodash-es/_Set.js","../node_modules/lodash-es/_WeakMap.js","../node_modules/lodash-es/_getTag.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/_baseIsArguments.js","../node_modules/lodash-es/isArguments.js","../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/isLength.js","../node_modules/lodash-es/isArrayLike.js","../node_modules/lodash-es/stubFalse.js","../node_modules/lodash-es/isBuffer.js","../node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/lodash-es/_baseUnary.js","../node_modules/lodash-es/_nodeUtil.js","../node_modules/lodash-es/isTypedArray.js","../node_modules/lodash-es/isEmpty.js","../src/store/auth/reducers.js","../src/store/auth/selectors.js","../src/store/auth/index.js"],"sourcesContent":["export const toUrlParams = (obj, skipNull) => {\r\n let str = \"\";\r\n for (var key in obj) {\r\n if (skipNull && !obj[key]) continue;\r\n\r\n if (str !== \"\") {\r\n str += \"&\";\r\n }\r\n\r\n str += key + \"=\" + encodeURIComponent(obj[key]);\r\n }\r\n\r\n return str;\r\n};\r\n","import { toUrlParams } from \"../../../../utils/converter\";\r\n\r\nconst DEFAULT_PAGE = 0;\r\nconst DEFAULT_PAGE_COUNT = 25;\r\nconst DEFAULT_TOTAL = 0;\r\nconst DEFAULT_SORT_BY = \"firstname\";\r\nconst DEFAULT_SORT_ORDER = \"ascending\";\r\nconst DEFAULT_EMPLOYEE_STATUS = null;\r\nconst DEFAULT_ACTIVATION_STATUS = null;\r\nconst DEFAULT_ROLE = null;\r\nconst DEFAULT_SEARCH = null;\r\nconst DEFAULT_GROUP = null;\r\n\r\nclass Filter {\r\n static getDefault(total = DEFAULT_TOTAL) {\r\n return new Filter(DEFAULT_PAGE, DEFAULT_PAGE_COUNT, total);\r\n }\r\n\r\n constructor(\r\n page = DEFAULT_PAGE,\r\n pageCount = DEFAULT_PAGE_COUNT,\r\n total = DEFAULT_TOTAL,\r\n sortBy = DEFAULT_SORT_BY,\r\n sortOrder = DEFAULT_SORT_ORDER,\r\n employeeStatus = DEFAULT_EMPLOYEE_STATUS,\r\n activationStatus = DEFAULT_ACTIVATION_STATUS,\r\n role = DEFAULT_ROLE,\r\n search = DEFAULT_SEARCH,\r\n group = DEFAULT_GROUP\r\n ) {\r\n this.page = page;\r\n this.pageCount = pageCount;\r\n this.sortBy = sortBy;\r\n this.sortOrder = sortOrder;\r\n this.employeeStatus = employeeStatus;\r\n this.activationStatus = activationStatus;\r\n this.role = role;\r\n this.search = search;\r\n this.total = total;\r\n this.group = group;\r\n }\r\n\r\n getStartIndex = () => {\r\n return this.page * this.pageCount;\r\n };\r\n\r\n hasNext = () => {\r\n return this.total - this.getStartIndex() > this.pageCount;\r\n };\r\n\r\n hasPrev = () => {\r\n return this.page > 0;\r\n };\r\n\r\n toDto = () => {\r\n const {\r\n pageCount,\r\n sortBy,\r\n sortOrder,\r\n employeeStatus,\r\n activationStatus,\r\n role,\r\n search,\r\n group\r\n } = this;\r\n\r\n let dtoFilter = {\r\n StartIndex: this.getStartIndex(),\r\n Count: pageCount,\r\n sortby: sortBy,\r\n sortorder: sortOrder,\r\n employeestatus: employeeStatus,\r\n activationstatus: activationStatus,\r\n filtervalue: search,\r\n groupId: group\r\n //fields: \"id,status,isAdmin,isOwner,isVisitor,activationStatus,userName,email,displayName,avatarSmall,\r\n //listAdminModules,birthday,title,location,isLDAP,isSSO\"\r\n };\r\n\r\n switch (role) {\r\n case \"admin\":\r\n dtoFilter.isadministrator = true;\r\n break;\r\n case \"user\":\r\n dtoFilter.employeeType = 1;\r\n break;\r\n case \"guest\":\r\n dtoFilter.employeeType = 2;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return dtoFilter;\r\n };\r\n\r\n toUrlParams = () => {\r\n const dtoFilter = this.toDto();\r\n const str = toUrlParams(dtoFilter, true);\r\n return str;\r\n };\r\n\r\n clone(onlySorting) {\r\n return onlySorting\r\n ? new Filter(\r\n DEFAULT_PAGE,\r\n DEFAULT_PAGE_COUNT,\r\n DEFAULT_TOTAL,\r\n this.sortBy,\r\n this.sortOrder\r\n )\r\n : new Filter(\r\n this.page,\r\n this.pageCount,\r\n this.total,\r\n this.sortBy,\r\n this.sortOrder,\r\n this.employeeStatus,\r\n this.activationStatus,\r\n this.role,\r\n this.search,\r\n this.group\r\n );\r\n }\r\n\r\n equals(filter) {\r\n const equals =\r\n this.employeeStatus === filter.employeeStatus &&\r\n this.activationStatus === filter.activationStatus &&\r\n this.role === filter.role &&\r\n this.group === filter.group &&\r\n this.search === filter.search &&\r\n this.sortBy === filter.sortBy &&\r\n this.sortOrder === filter.sortOrder &&\r\n this.page === filter.page &&\r\n this.pageCount === filter.pageCount;\r\n\r\n return equals;\r\n }\r\n}\r\n\r\nexport default Filter;\r\n","import { createBrowserHistory } from 'history';\r\n\r\nexport default createBrowserHistory();","export const AUTH_KEY = 'asc_auth_key';\r\n\r\n/**\r\n * Enum for employee activation status.\r\n * @readonly\r\n */\r\nexport const EmployeeActivationStatus = Object.freeze({\r\n NotActivated: 0,\r\n Activated: 1,\r\n Pending: 2,\r\n AutoGenerated: 4\r\n});\r\n\r\n/**\r\n * Enum for type of confirm link.\r\n * @readonly\r\n */\r\nexport const ConfirmType = Object.freeze({\r\n EmpInvite: 0,\r\n LinkInvite: 1,\r\n PortalSuspend: 2,\r\n PortalContinue: 3,\r\n PortalRemove: 4,\r\n DnsChange: 5,\r\n PortalOwnerChange: 6,\r\n Activation: 7,\r\n EmailChange: 8,\r\n EmailActivation: 9,\r\n PasswordChange: 10,\r\n ProfileRemove: 11,\r\n PhoneActivation: 12,\r\n PhoneAuth: 13,\r\n Auth: 14,\r\n TfaActivation: 15,\r\n TfaAuth: 16\r\n});\r\n\r\n/**\r\n * Enum for result of validation confirm link.\r\n * @readonly\r\n */\r\nexport const ValidationResult = Object.freeze({\r\n Ok: 0,\r\n Invalid: 1,\r\n Expired: 2\r\n});\r\n\r\n/**\r\n * Enum for employee status.\r\n * @readonly\r\n */\r\nexport const EmployeeStatus = Object.freeze({\r\n Active: 1,\r\n Disabled: 2\r\n});\r\n","import axios from \"axios\";\r\nimport Cookies from \"universal-cookie\";\r\nimport history from \"../../../history\";\r\nimport { AUTH_KEY } from \"../../../constants\";\r\n\r\nconst PREFIX = \"api\";\r\nconst VERSION = \"2.0\";\r\nconst baseURL = `${window.location.origin}/${PREFIX}/${VERSION}`;\r\n\r\n\r\n/**\r\n * @description axios instance for ajax requests\r\n */\r\n\r\nconst client = axios.create({\r\n baseURL: baseURL,\r\n responseType: 'json',\r\n timeout: 30000, // default is `0` (no timeout)\r\n});\r\n\r\nsetAuthorizationToken(localStorage.getItem(AUTH_KEY));\r\n\r\n/**\r\n * @description if any of the API gets 401 status code, this method \r\n calls getAuthToken method to renew accessToken\r\n * updates the error configuration and retries all failed requests \r\n again\r\n*/\r\nclient.interceptors.response.use(\r\n response => {\r\n return response;\r\n },\r\n error => {\r\n if (error.response.status === 401) {\r\n //place your reentry code\r\n history.push(\"/login/error=unauthorized\");\r\n }\r\n\r\n if (error.response.status === 502) {\r\n //toastr.error(error.response);\r\n history.push(`/error/${error.response.status}`);\r\n }\r\n\r\n return error;\r\n }\r\n);\r\n\r\nexport function setAuthorizationToken(token) {\r\n const cookies = new Cookies();\r\n\r\n if (token) {\r\n client.defaults.headers.common['Authorization'] = token;\r\n localStorage.setItem(AUTH_KEY, token);\r\n\r\n const current = new Date();\r\n const nextYear = new Date();\r\n\r\n nextYear.setFullYear(current.getFullYear() + 1);\r\n\r\n cookies.set(AUTH_KEY, token, {\r\n path: \"/\",\r\n expires: nextYear\r\n });\r\n } else {\r\n localStorage.clear();\r\n delete client.defaults.headers.common['Authorization'];\r\n cookies.remove(AUTH_KEY, {\r\n path: \"/\"\r\n });\r\n }\r\n}\r\n\r\nconst checkResponseError = (res) => {\r\n if (res && res.data && res.data.error) {\r\n console.error(res.data.error);\r\n throw new Error(res.data.error.message);\r\n }\r\n}\r\n\r\n/**\r\n * @description wrapper for making ajax requests\r\n * @param {object} object with method,url,data etc.\r\n */\r\nexport const request = function(options) {\r\n const onSuccess = function(response) {\r\n checkResponseError(response);\r\n return response.data.response;\r\n };\r\n const onError = function(error) {\r\n console.error(\"Request Failed:\", error.config);\r\n if (error.response) {\r\n console.error(\"Status:\", error.response.status);\r\n console.error(\"Data:\", error.response.data);\r\n console.error(\"Headers:\", error.response.headers);\r\n } else {\r\n console.error(\"Error Message:\", error.message);\r\n }\r\n return Promise.reject(error.response || error.message);\r\n };\r\n\r\n return client(options)\r\n .then(onSuccess)\r\n .catch(onError);\r\n};\r\n","\r\nimport { request } from \"../client\";\r\n//import axios from \"axios\";\r\nimport Filter from \"./filter\";\r\n\r\nexport function getUserList(filter = Filter.getDefault()) {\r\n const params =\r\n filter && filter instanceof Filter\r\n ? `/filter.json?${filter.toUrlParams()}`\r\n : \"\";\r\n \r\n return request({\r\n method: \"get\",\r\n url: `/people${params}`\r\n });\r\n }","import Filter from \"./people/filter\";\r\nimport * as People from './people';\r\n\r\nexport default { Filter, People };","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","module.exports = require(\"regenerator-runtime\");\n","import * as api from \"../services/api\";\r\n//import { fetchGroups, fetchPeople } from \"../../../../../products/ASC.People/Client/src/store/people/actions\";\r\nimport { setAuthorizationToken } from \"../services/api/client\";\r\n//import { getFilterByLocation } from \"../../../../../products/ASC.People/Client/src/helpers/converters\";\r\n//import config from \"../../../package.json\";\r\n\r\nexport const LOGIN_POST = \"LOGIN_POST\";\r\nexport const SET_CURRENT_USER = \"SET_CURRENT_USER\";\r\nexport const SET_MODULE = \"SET_MODULE\";\r\nexport const SET_MODULES = \"SET_MODULES\";\r\nexport const SET_SETTINGS = \"SET_SETTINGS\";\r\nexport const SET_IS_LOADED = \"SET_IS_LOADED\";\r\nexport const LOGOUT = \"LOGOUT\";\r\n\r\nexport function setModule(module) {\r\n return {\r\n type: SET_MODULE,\r\n module\r\n };\r\n}\r\n\r\nexport function setCurrentUser(user) {\r\n return {\r\n type: SET_CURRENT_USER,\r\n user\r\n };\r\n}\r\n\r\nexport function setModules(modules) {\r\n return {\r\n type: SET_MODULES,\r\n modules\r\n };\r\n}\r\n\r\nexport function setSettings(settings) {\r\n return {\r\n type: SET_SETTINGS,\r\n settings\r\n };\r\n}\r\n\r\nexport function setIsLoaded(isLoaded) {\r\n return {\r\n type: SET_IS_LOADED,\r\n isLoaded\r\n };\r\n}\r\n\r\nexport function setLogout() {\r\n return {\r\n type: LOGOUT\r\n };\r\n}\r\n\r\nexport async function getUserInfo(dispatch, additionalAction) {\r\n const { user, modules, settings } = await api.getInitInfo();\r\n let newSettings = settings;\r\n if (user.isAdmin) {\r\n const inviteLinks = await api.getInvitationLinks();\r\n newSettings = Object.assign(newSettings, inviteLinks);\r\n }\r\n\r\n dispatch(setCurrentUser(user));\r\n dispatch(setModules(modules));\r\n dispatch(setSettings(newSettings));\r\n\r\n additionalAction && additionalAction();\r\n\r\n /*await fetchGroups(dispatch);\r\n\r\n var re = new RegExp(`${config.homepage}((/?)$|/filter)`, \"gm\");\r\n const match = window.location.pathname.match(re);\r\n\r\n if (match && match.length > 0)\r\n {\r\n const newFilter = getFilterByLocation(window.location);\r\n await fetchPeople(newFilter, dispatch);\r\n }*/\r\n\r\n return dispatch(setIsLoaded(true));\r\n}\r\n\r\nexport function logout() {\r\n return dispatch => {\r\n setAuthorizationToken();\r\n return dispatch(setLogout());\r\n };\r\n}\r\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport default isEmpty;\n","import {\r\n SET_CURRENT_USER,\r\n SET_MODULE,\r\n SET_MODULES,\r\n SET_IS_LOADED,\r\n LOGOUT,\r\n SET_SETTINGS\r\n} from \"./actions\";\r\nimport isEmpty from \"lodash/isEmpty\";\r\n\r\nconst initialState = {\r\n isAuthenticated: false,\r\n isLoaded: false,\r\n user: {},\r\n modules: [],\r\n settings: {\r\n currentProductId: null,\r\n culture: \"en-US\",\r\n trustedDomains: [],\r\n trustedDomainsType: 1,\r\n timezone: \"UTC\",\r\n utcOffset: \"00:00:00\",\r\n utcHoursOffset: 0,\r\n homepage: \"\",\r\n datePattern: \"M/d/yyyy\",\r\n datePatternJQ: \"00/00/0000\",\r\n dateTimePattern: \"dddd, MMMM d, yyyy h:mm:ss tt\",\r\n datepicker: {\r\n datePattern: \"mm/dd/yy\",\r\n dateTimePattern: \"DD, mm dd, yy h:mm:ss tt\",\r\n timePattern: \"h:mm tt\"\r\n },\r\n hasShortenService: false\r\n }\r\n};\r\n\r\nconst authReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case SET_CURRENT_USER:\r\n return Object.assign({}, state, {\r\n isAuthenticated: !isEmpty(action.user),\r\n user: action.user\r\n });\r\n case SET_MODULE:\r\n return Object.assign({}, state, {\r\n settings: {\r\n ...state.settings,\r\n currentProductId: action.module.id,\r\n homepage: action.module.homepage\r\n }\r\n });\r\n case SET_MODULES:\r\n return Object.assign({}, state, {\r\n modules: action.modules\r\n });\r\n case SET_SETTINGS:\r\n return Object.assign({}, state, {\r\n settings: { ...state.settings, ...action.settings }\r\n });\r\n case SET_IS_LOADED:\r\n return Object.assign({}, state, {\r\n isLoaded: action.isLoaded\r\n });\r\n case LOGOUT:\r\n return Object.assign({}, initialState, {\r\n isLoaded: true\r\n });\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default authReducer;\r\n","export function isAdmin(user) {\r\n let isPeopleAdmin = user.listAdminModules ? user.listAdminModules.includes('people') : false;\r\n return user.isAdmin || user.isOwner || isPeopleAdmin;\r\n};\r\n\r\nexport function isMe(user, userName) {\r\n return userName === \"@self\" || userName === user.userName;\r\n};\r\n\r\nexport function getCurrentModule(modules, currentModuleId) {\r\n return modules.find(module => module.id === currentModuleId);\r\n}","import * as actions from './actions';\r\nimport * as reducers from './reducers';\r\nimport * as selectors from './selectors';\r\n\r\nexport default { actions, reducers, selectors };"],"names":["toUrlParams","obj","skipNull","str","key","encodeURIComponent","DEFAULT_PAGE","DEFAULT_PAGE_COUNT","DEFAULT_TOTAL","DEFAULT_SORT_BY","DEFAULT_SORT_ORDER","DEFAULT_EMPLOYEE_STATUS","DEFAULT_ACTIVATION_STATUS","DEFAULT_ROLE","DEFAULT_SEARCH","DEFAULT_GROUP","Filter","total","page","pageCount","sortBy","sortOrder","employeeStatus","activationStatus","role","search","group","getStartIndex","hasNext","hasPrev","toDto","dtoFilter","StartIndex","Count","sortby","sortorder","employeestatus","activationstatus","filtervalue","groupId","isadministrator","employeeType","onlySorting","filter","equals","createBrowserHistory","AUTH_KEY","EmployeeActivationStatus","Object","freeze","NotActivated","Activated","Pending","AutoGenerated","ConfirmType","EmpInvite","LinkInvite","PortalSuspend","PortalContinue","PortalRemove","DnsChange","PortalOwnerChange","Activation","EmailChange","EmailActivation","PasswordChange","ProfileRemove","PhoneActivation","PhoneAuth","Auth","TfaActivation","TfaAuth","ValidationResult","Ok","Invalid","Expired","EmployeeStatus","Active","Disabled","PREFIX","VERSION","baseURL","window","location","origin","client","axios","create","responseType","timeout","setAuthorizationToken","localStorage","getItem","interceptors","response","use","error","status","history","push","token","cookies","Cookies","defaults","headers","common","setItem","current","Date","nextYear","setFullYear","getFullYear","set","path","expires","clear","remove","checkResponseError","res","data","console","Error","message","request","options","onSuccess","onError","config","Promise","reject","then","catch","getUserList","getDefault","params","method","url","People","undefined","require$$0","LOGIN_POST","SET_CURRENT_USER","SET_MODULE","SET_MODULES","SET_SETTINGS","SET_IS_LOADED","LOGOUT","setModule","module","type","setCurrentUser","user","setModules","modules","setSettings","settings","setIsLoaded","isLoaded","setLogout","getUserInfo","dispatch","additionalAction","api","newSettings","isAdmin","inviteLinks","assign","logout","objectProto","Symbol","hasOwnProperty","nativeObjectToString","symToStringTag","funcProto","funcToString","argsTag","funcTag","mapTag","objectTag","setTag","weakMapTag","dataViewTag","freeExports","freeModule","moduleExports","getTag","initialState","isAuthenticated","currentProductId","culture","trustedDomains","trustedDomainsType","timezone","utcOffset","utcHoursOffset","homepage","datePattern","datePatternJQ","dateTimePattern","datepicker","timePattern","hasShortenService","authReducer","state","action","isEmpty","id","isPeopleAdmin","listAdminModules","includes","isOwner","isMe","userName","getCurrentModule","currentModuleId","find","actions","reducers","selectors"],"mappings":"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"} \ No newline at end of file diff --git a/web/ASC.Web.Common/dist/asc-web-common.js b/web/ASC.Web.Common/dist/asc-web-common.js deleted file mode 100644 index 91f6efb810..0000000000 --- a/web/ASC.Web.Common/dist/asc-web-common.js +++ /dev/null @@ -1,1374 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var axios = _interopDefault(require('axios')); -var Cookies = _interopDefault(require('universal-cookie')); -var history$1 = require('history'); - -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} - -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys.push.apply(keys, symbols); - } - - return keys; -} - -function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(source, true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(source).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; -} - -var toUrlParams = function toUrlParams(obj, skipNull) { - var str = ""; - for (var key in obj) { - if (skipNull && !obj[key]) continue; - if (str !== "") { - str += "&"; - } - str += key + "=" + encodeURIComponent(obj[key]); - } - return str; -}; - -var DEFAULT_PAGE = 0; -var DEFAULT_PAGE_COUNT = 25; -var DEFAULT_TOTAL = 0; -var DEFAULT_SORT_BY = "firstname"; -var DEFAULT_SORT_ORDER = "ascending"; -var DEFAULT_EMPLOYEE_STATUS = null; -var DEFAULT_ACTIVATION_STATUS = null; -var DEFAULT_ROLE = null; -var DEFAULT_SEARCH = null; -var DEFAULT_GROUP = null; -var Filter = -function () { - _createClass(Filter, null, [{ - key: "getDefault", - value: function getDefault() { - var total = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_TOTAL; - return new Filter(DEFAULT_PAGE, DEFAULT_PAGE_COUNT, total); - } - }]); - function Filter() { - var _this = this; - var page = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_PAGE; - var _pageCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_PAGE_COUNT; - var total = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_TOTAL; - var _sortBy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_SORT_BY; - var _sortOrder = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : DEFAULT_SORT_ORDER; - var _employeeStatus = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : DEFAULT_EMPLOYEE_STATUS; - var _activationStatus = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : DEFAULT_ACTIVATION_STATUS; - var _role = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : DEFAULT_ROLE; - var _search = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : DEFAULT_SEARCH; - var _group = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : DEFAULT_GROUP; - _classCallCheck(this, Filter); - this.getStartIndex = function () { - return _this.page * _this.pageCount; - }; - this.hasNext = function () { - return _this.total - _this.getStartIndex() > _this.pageCount; - }; - this.hasPrev = function () { - return _this.page > 0; - }; - this.toDto = function () { - var pageCount = _this.pageCount, - sortBy = _this.sortBy, - sortOrder = _this.sortOrder, - employeeStatus = _this.employeeStatus, - activationStatus = _this.activationStatus, - role = _this.role, - search = _this.search, - group = _this.group; - var dtoFilter = { - StartIndex: _this.getStartIndex(), - Count: pageCount, - sortby: sortBy, - sortorder: sortOrder, - employeestatus: employeeStatus, - activationstatus: activationStatus, - filtervalue: search, - groupId: group - }; - switch (role) { - case "admin": - dtoFilter.isadministrator = true; - break; - case "user": - dtoFilter.employeeType = 1; - break; - case "guest": - dtoFilter.employeeType = 2; - break; - } - return dtoFilter; - }; - this.toUrlParams = function () { - var dtoFilter = _this.toDto(); - var str = toUrlParams(dtoFilter, true); - return str; - }; - this.page = page; - this.pageCount = _pageCount; - this.sortBy = _sortBy; - this.sortOrder = _sortOrder; - this.employeeStatus = _employeeStatus; - this.activationStatus = _activationStatus; - this.role = _role; - this.search = _search; - this.total = total; - this.group = _group; - } - _createClass(Filter, [{ - key: "clone", - value: function clone(onlySorting) { - return onlySorting ? new Filter(DEFAULT_PAGE, DEFAULT_PAGE_COUNT, DEFAULT_TOTAL, this.sortBy, this.sortOrder) : new Filter(this.page, this.pageCount, this.total, this.sortBy, this.sortOrder, this.employeeStatus, this.activationStatus, this.role, this.search, this.group); - } - }, { - key: "equals", - value: function equals(filter) { - var equals = this.employeeStatus === filter.employeeStatus && this.activationStatus === filter.activationStatus && this.role === filter.role && this.group === filter.group && this.search === filter.search && this.sortBy === filter.sortBy && this.sortOrder === filter.sortOrder && this.page === filter.page && this.pageCount === filter.pageCount; - return equals; - } - }]); - return Filter; -}(); - -var history = history$1.createBrowserHistory(); - -var AUTH_KEY = 'asc_auth_key'; -var EmployeeActivationStatus = Object.freeze({ - NotActivated: 0, - Activated: 1, - Pending: 2, - AutoGenerated: 4 -}); -var ConfirmType = Object.freeze({ - EmpInvite: 0, - LinkInvite: 1, - PortalSuspend: 2, - PortalContinue: 3, - PortalRemove: 4, - DnsChange: 5, - PortalOwnerChange: 6, - Activation: 7, - EmailChange: 8, - EmailActivation: 9, - PasswordChange: 10, - ProfileRemove: 11, - PhoneActivation: 12, - PhoneAuth: 13, - Auth: 14, - TfaActivation: 15, - TfaAuth: 16 -}); -var ValidationResult = Object.freeze({ - Ok: 0, - Invalid: 1, - Expired: 2 -}); -var EmployeeStatus = Object.freeze({ - Active: 1, - Disabled: 2 -}); - -var PREFIX = "api"; -var VERSION = "2.0"; -var baseURL = "".concat(window.location.origin, "/").concat(PREFIX, "/").concat(VERSION); -var client = axios.create({ - baseURL: baseURL, - responseType: 'json', - timeout: 30000 -}); -setAuthorizationToken(localStorage.getItem(AUTH_KEY)); -client.interceptors.response.use(function (response) { - return response; -}, function (error) { - if (error.response.status === 401) { - history.push("/login/error=unauthorized"); - } - if (error.response.status === 502) { - history.push("/error/".concat(error.response.status)); - } - return error; -}); -function setAuthorizationToken(token) { - var cookies = new Cookies(); - if (token) { - client.defaults.headers.common['Authorization'] = token; - localStorage.setItem(AUTH_KEY, token); - var current = new Date(); - var nextYear = new Date(); - nextYear.setFullYear(current.getFullYear() + 1); - cookies.set(AUTH_KEY, token, { - path: "/", - expires: nextYear - }); - } else { - localStorage.clear(); - delete client.defaults.headers.common['Authorization']; - cookies.remove(AUTH_KEY, { - path: "/" - }); - } -} -var checkResponseError = function checkResponseError(res) { - if (res && res.data && res.data.error) { - console.error(res.data.error); - throw new Error(res.data.error.message); - } -}; -var request = function request(options) { - var onSuccess = function onSuccess(response) { - checkResponseError(response); - return response.data.response; - }; - var onError = function onError(error) { - console.error("Request Failed:", error.config); - if (error.response) { - console.error("Status:", error.response.status); - console.error("Data:", error.response.data); - console.error("Headers:", error.response.headers); - } else { - console.error("Error Message:", error.message); - } - return Promise.reject(error.response || error.message); - }; - return client(options).then(onSuccess).catch(onError); -}; - -function getUserList() { - var filter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Filter.getDefault(); - var params = filter && filter instanceof Filter ? "/filter.json?".concat(filter.toUrlParams()) : ""; - return request({ - method: "get", - url: "/people".concat(params) - }); -} - -var People = /*#__PURE__*/Object.freeze({ - __proto__: null, - getUserList: getUserList -}); - -var index = { - Filter: Filter, - People: People -}; - -var api = /*#__PURE__*/Object.freeze({ - __proto__: null, - 'default': index -}); - -var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - -function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; -} - -var runtime_1 = createCommonjsModule(function (module) { -var runtime = (function (exports) { - var Op = Object.prototype; - var hasOwn = Op.hasOwnProperty; - var undefined$1; - var $Symbol = typeof Symbol === "function" ? Symbol : {}; - var iteratorSymbol = $Symbol.iterator || "@@iterator"; - var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; - var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; - function wrap(innerFn, outerFn, self, tryLocsList) { - var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; - var generator = Object.create(protoGenerator.prototype); - var context = new Context(tryLocsList || []); - generator._invoke = makeInvokeMethod(innerFn, self, context); - return generator; - } - exports.wrap = wrap; - function tryCatch(fn, obj, arg) { - try { - return { type: "normal", arg: fn.call(obj, arg) }; - } catch (err) { - return { type: "throw", arg: err }; - } - } - var GenStateSuspendedStart = "suspendedStart"; - var GenStateSuspendedYield = "suspendedYield"; - var GenStateExecuting = "executing"; - var GenStateCompleted = "completed"; - var ContinueSentinel = {}; - function Generator() {} - function GeneratorFunction() {} - function GeneratorFunctionPrototype() {} - var IteratorPrototype = {}; - IteratorPrototype[iteratorSymbol] = function () { - return this; - }; - var getProto = Object.getPrototypeOf; - var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); - if (NativeIteratorPrototype && - NativeIteratorPrototype !== Op && - hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { - IteratorPrototype = NativeIteratorPrototype; - } - var Gp = GeneratorFunctionPrototype.prototype = - Generator.prototype = Object.create(IteratorPrototype); - GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; - GeneratorFunctionPrototype.constructor = GeneratorFunction; - GeneratorFunctionPrototype[toStringTagSymbol] = - GeneratorFunction.displayName = "GeneratorFunction"; - function defineIteratorMethods(prototype) { - ["next", "throw", "return"].forEach(function(method) { - prototype[method] = function(arg) { - return this._invoke(method, arg); - }; - }); - } - exports.isGeneratorFunction = function(genFun) { - var ctor = typeof genFun === "function" && genFun.constructor; - return ctor - ? ctor === GeneratorFunction || - (ctor.displayName || ctor.name) === "GeneratorFunction" - : false; - }; - exports.mark = function(genFun) { - if (Object.setPrototypeOf) { - Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); - } else { - genFun.__proto__ = GeneratorFunctionPrototype; - if (!(toStringTagSymbol in genFun)) { - genFun[toStringTagSymbol] = "GeneratorFunction"; - } - } - genFun.prototype = Object.create(Gp); - return genFun; - }; - exports.awrap = function(arg) { - return { __await: arg }; - }; - function AsyncIterator(generator) { - function invoke(method, arg, resolve, reject) { - var record = tryCatch(generator[method], generator, arg); - if (record.type === "throw") { - reject(record.arg); - } else { - var result = record.arg; - var value = result.value; - if (value && - typeof value === "object" && - hasOwn.call(value, "__await")) { - return Promise.resolve(value.__await).then(function(value) { - invoke("next", value, resolve, reject); - }, function(err) { - invoke("throw", err, resolve, reject); - }); - } - return Promise.resolve(value).then(function(unwrapped) { - result.value = unwrapped; - resolve(result); - }, function(error) { - return invoke("throw", error, resolve, reject); - }); - } - } - var previousPromise; - function enqueue(method, arg) { - function callInvokeWithMethodAndArg() { - return new Promise(function(resolve, reject) { - invoke(method, arg, resolve, reject); - }); - } - return previousPromise = - previousPromise ? previousPromise.then( - callInvokeWithMethodAndArg, - callInvokeWithMethodAndArg - ) : callInvokeWithMethodAndArg(); - } - this._invoke = enqueue; - } - defineIteratorMethods(AsyncIterator.prototype); - AsyncIterator.prototype[asyncIteratorSymbol] = function () { - return this; - }; - exports.AsyncIterator = AsyncIterator; - exports.async = function(innerFn, outerFn, self, tryLocsList) { - var iter = new AsyncIterator( - wrap(innerFn, outerFn, self, tryLocsList) - ); - return exports.isGeneratorFunction(outerFn) - ? iter - : iter.next().then(function(result) { - return result.done ? result.value : iter.next(); - }); - }; - function makeInvokeMethod(innerFn, self, context) { - var state = GenStateSuspendedStart; - return function invoke(method, arg) { - if (state === GenStateExecuting) { - throw new Error("Generator is already running"); - } - if (state === GenStateCompleted) { - if (method === "throw") { - throw arg; - } - return doneResult(); - } - context.method = method; - context.arg = arg; - while (true) { - var delegate = context.delegate; - if (delegate) { - var delegateResult = maybeInvokeDelegate(delegate, context); - if (delegateResult) { - if (delegateResult === ContinueSentinel) continue; - return delegateResult; - } - } - if (context.method === "next") { - context.sent = context._sent = context.arg; - } else if (context.method === "throw") { - if (state === GenStateSuspendedStart) { - state = GenStateCompleted; - throw context.arg; - } - context.dispatchException(context.arg); - } else if (context.method === "return") { - context.abrupt("return", context.arg); - } - state = GenStateExecuting; - var record = tryCatch(innerFn, self, context); - if (record.type === "normal") { - state = context.done - ? GenStateCompleted - : GenStateSuspendedYield; - if (record.arg === ContinueSentinel) { - continue; - } - return { - value: record.arg, - done: context.done - }; - } else if (record.type === "throw") { - state = GenStateCompleted; - context.method = "throw"; - context.arg = record.arg; - } - } - }; - } - function maybeInvokeDelegate(delegate, context) { - var method = delegate.iterator[context.method]; - if (method === undefined$1) { - context.delegate = null; - if (context.method === "throw") { - if (delegate.iterator["return"]) { - context.method = "return"; - context.arg = undefined$1; - maybeInvokeDelegate(delegate, context); - if (context.method === "throw") { - return ContinueSentinel; - } - } - context.method = "throw"; - context.arg = new TypeError( - "The iterator does not provide a 'throw' method"); - } - return ContinueSentinel; - } - var record = tryCatch(method, delegate.iterator, context.arg); - if (record.type === "throw") { - context.method = "throw"; - context.arg = record.arg; - context.delegate = null; - return ContinueSentinel; - } - var info = record.arg; - if (! info) { - context.method = "throw"; - context.arg = new TypeError("iterator result is not an object"); - context.delegate = null; - return ContinueSentinel; - } - if (info.done) { - context[delegate.resultName] = info.value; - context.next = delegate.nextLoc; - if (context.method !== "return") { - context.method = "next"; - context.arg = undefined$1; - } - } else { - return info; - } - context.delegate = null; - return ContinueSentinel; - } - defineIteratorMethods(Gp); - Gp[toStringTagSymbol] = "Generator"; - Gp[iteratorSymbol] = function() { - return this; - }; - Gp.toString = function() { - return "[object Generator]"; - }; - function pushTryEntry(locs) { - var entry = { tryLoc: locs[0] }; - if (1 in locs) { - entry.catchLoc = locs[1]; - } - if (2 in locs) { - entry.finallyLoc = locs[2]; - entry.afterLoc = locs[3]; - } - this.tryEntries.push(entry); - } - function resetTryEntry(entry) { - var record = entry.completion || {}; - record.type = "normal"; - delete record.arg; - entry.completion = record; - } - function Context(tryLocsList) { - this.tryEntries = [{ tryLoc: "root" }]; - tryLocsList.forEach(pushTryEntry, this); - this.reset(true); - } - exports.keys = function(object) { - var keys = []; - for (var key in object) { - keys.push(key); - } - keys.reverse(); - return function next() { - while (keys.length) { - var key = keys.pop(); - if (key in object) { - next.value = key; - next.done = false; - return next; - } - } - next.done = true; - return next; - }; - }; - function values(iterable) { - if (iterable) { - var iteratorMethod = iterable[iteratorSymbol]; - if (iteratorMethod) { - return iteratorMethod.call(iterable); - } - if (typeof iterable.next === "function") { - return iterable; - } - if (!isNaN(iterable.length)) { - var i = -1, next = function next() { - while (++i < iterable.length) { - if (hasOwn.call(iterable, i)) { - next.value = iterable[i]; - next.done = false; - return next; - } - } - next.value = undefined$1; - next.done = true; - return next; - }; - return next.next = next; - } - } - return { next: doneResult }; - } - exports.values = values; - function doneResult() { - return { value: undefined$1, done: true }; - } - Context.prototype = { - constructor: Context, - reset: function(skipTempReset) { - this.prev = 0; - this.next = 0; - this.sent = this._sent = undefined$1; - this.done = false; - this.delegate = null; - this.method = "next"; - this.arg = undefined$1; - this.tryEntries.forEach(resetTryEntry); - if (!skipTempReset) { - for (var name in this) { - if (name.charAt(0) === "t" && - hasOwn.call(this, name) && - !isNaN(+name.slice(1))) { - this[name] = undefined$1; - } - } - } - }, - stop: function() { - this.done = true; - var rootEntry = this.tryEntries[0]; - var rootRecord = rootEntry.completion; - if (rootRecord.type === "throw") { - throw rootRecord.arg; - } - return this.rval; - }, - dispatchException: function(exception) { - if (this.done) { - throw exception; - } - var context = this; - function handle(loc, caught) { - record.type = "throw"; - record.arg = exception; - context.next = loc; - if (caught) { - context.method = "next"; - context.arg = undefined$1; - } - return !! caught; - } - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - var record = entry.completion; - if (entry.tryLoc === "root") { - return handle("end"); - } - if (entry.tryLoc <= this.prev) { - var hasCatch = hasOwn.call(entry, "catchLoc"); - var hasFinally = hasOwn.call(entry, "finallyLoc"); - if (hasCatch && hasFinally) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } else if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - } else if (hasCatch) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } - } else if (hasFinally) { - if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - } else { - throw new Error("try statement without catch or finally"); - } - } - } - }, - abrupt: function(type, arg) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.tryLoc <= this.prev && - hasOwn.call(entry, "finallyLoc") && - this.prev < entry.finallyLoc) { - var finallyEntry = entry; - break; - } - } - if (finallyEntry && - (type === "break" || - type === "continue") && - finallyEntry.tryLoc <= arg && - arg <= finallyEntry.finallyLoc) { - finallyEntry = null; - } - var record = finallyEntry ? finallyEntry.completion : {}; - record.type = type; - record.arg = arg; - if (finallyEntry) { - this.method = "next"; - this.next = finallyEntry.finallyLoc; - return ContinueSentinel; - } - return this.complete(record); - }, - complete: function(record, afterLoc) { - if (record.type === "throw") { - throw record.arg; - } - if (record.type === "break" || - record.type === "continue") { - this.next = record.arg; - } else if (record.type === "return") { - this.rval = this.arg = record.arg; - this.method = "return"; - this.next = "end"; - } else if (record.type === "normal" && afterLoc) { - this.next = afterLoc; - } - return ContinueSentinel; - }, - finish: function(finallyLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.finallyLoc === finallyLoc) { - this.complete(entry.completion, entry.afterLoc); - resetTryEntry(entry); - return ContinueSentinel; - } - } - }, - "catch": function(tryLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.tryLoc === tryLoc) { - var record = entry.completion; - if (record.type === "throw") { - var thrown = record.arg; - resetTryEntry(entry); - } - return thrown; - } - } - throw new Error("illegal catch attempt"); - }, - delegateYield: function(iterable, resultName, nextLoc) { - this.delegate = { - iterator: values(iterable), - resultName: resultName, - nextLoc: nextLoc - }; - if (this.method === "next") { - this.arg = undefined$1; - } - return ContinueSentinel; - } - }; - return exports; -}( - module.exports -)); -try { - regeneratorRuntime = runtime; -} catch (accidentalStrictMode) { - Function("r", "regeneratorRuntime = r")(runtime); -} -}); - -var regenerator = runtime_1; - -var LOGIN_POST = "LOGIN_POST"; -var SET_CURRENT_USER = "SET_CURRENT_USER"; -var SET_MODULE = "SET_MODULE"; -var SET_MODULES = "SET_MODULES"; -var SET_SETTINGS = "SET_SETTINGS"; -var SET_IS_LOADED = "SET_IS_LOADED"; -var LOGOUT = "LOGOUT"; -function setModule(module) { - return { - type: SET_MODULE, - module: module - }; -} -function setCurrentUser(user) { - return { - type: SET_CURRENT_USER, - user: user - }; -} -function setModules(modules) { - return { - type: SET_MODULES, - modules: modules - }; -} -function setSettings(settings) { - return { - type: SET_SETTINGS, - settings: settings - }; -} -function setIsLoaded(isLoaded) { - return { - type: SET_IS_LOADED, - isLoaded: isLoaded - }; -} -function setLogout() { - return { - type: LOGOUT - }; -} -function getUserInfo(dispatch, additionalAction) { - var _ref, user, modules, settings, newSettings, inviteLinks; - return regenerator.async(function getUserInfo$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return regenerator.awrap(undefined()); - case 2: - _ref = _context.sent; - user = _ref.user; - modules = _ref.modules; - settings = _ref.settings; - newSettings = settings; - if (!user.isAdmin) { - _context.next = 12; - break; - } - _context.next = 10; - return regenerator.awrap(undefined()); - case 10: - inviteLinks = _context.sent; - newSettings = Object.assign(newSettings, inviteLinks); - case 12: - dispatch(setCurrentUser(user)); - dispatch(setModules(modules)); - dispatch(setSettings(newSettings)); - additionalAction && additionalAction(); - return _context.abrupt("return", dispatch(setIsLoaded(true))); - case 17: - case "end": - return _context.stop(); - } - } - }); -} -function logout() { - return function (dispatch) { - setAuthorizationToken(); - return dispatch(setLogout()); - }; -} - -var actions = /*#__PURE__*/Object.freeze({ - __proto__: null, - LOGIN_POST: LOGIN_POST, - SET_CURRENT_USER: SET_CURRENT_USER, - SET_MODULE: SET_MODULE, - SET_MODULES: SET_MODULES, - SET_SETTINGS: SET_SETTINGS, - SET_IS_LOADED: SET_IS_LOADED, - LOGOUT: LOGOUT, - setModule: setModule, - setCurrentUser: setCurrentUser, - setModules: setModules, - setSettings: setSettings, - setIsLoaded: setIsLoaded, - setLogout: setLogout, - getUserInfo: getUserInfo, - logout: logout -}); - -var objectProto = Object.prototype; -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - return value === proto; -} -var _isPrototype = isPrototype; - -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} -var _overArg = overArg; - -var nativeKeys = _overArg(Object.keys, Object); -var _nativeKeys = nativeKeys; - -var objectProto$1 = Object.prototype; -var hasOwnProperty = objectProto$1.hasOwnProperty; -function baseKeys(object) { - if (!_isPrototype(object)) { - return _nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; -} -var _baseKeys = baseKeys; - -var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; -var _freeGlobal = freeGlobal; - -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; -var root = _freeGlobal || freeSelf || Function('return this')(); -var _root = root; - -var Symbol$1 = _root.Symbol; -var _Symbol = Symbol$1; - -var objectProto$2 = Object.prototype; -var hasOwnProperty$1 = objectProto$2.hasOwnProperty; -var nativeObjectToString = objectProto$2.toString; -var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; -function getRawTag(value) { - var isOwn = hasOwnProperty$1.call(value, symToStringTag), - tag = value[symToStringTag]; - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; -} -var _getRawTag = getRawTag; - -var objectProto$3 = Object.prototype; -var nativeObjectToString$1 = objectProto$3.toString; -function objectToString(value) { - return nativeObjectToString$1.call(value); -} -var _objectToString = objectToString; - -var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; -var symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined; -function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag$1 && symToStringTag$1 in Object(value)) - ? _getRawTag(value) - : _objectToString(value); -} -var _baseGetTag = baseGetTag; - -function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); -} -var isObject_1 = isObject; - -var asyncTag = '[object AsyncFunction]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; -function isFunction(value) { - if (!isObject_1(value)) { - return false; - } - var tag = _baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; -} -var isFunction_1 = isFunction; - -var coreJsData = _root['__core-js_shared__']; -var _coreJsData = coreJsData; - -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} -var _isMasked = isMasked; - -var funcProto = Function.prototype; -var funcToString = funcProto.toString; -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} -var _toSource = toSource; - -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; -var reIsHostCtor = /^\[object .+?Constructor\]$/; -var funcProto$1 = Function.prototype, - objectProto$4 = Object.prototype; -var funcToString$1 = funcProto$1.toString; -var hasOwnProperty$2 = objectProto$4.hasOwnProperty; -var reIsNative = RegExp('^' + - funcToString$1.call(hasOwnProperty$2).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); -function baseIsNative(value) { - if (!isObject_1(value) || _isMasked(value)) { - return false; - } - var pattern = isFunction_1(value) ? reIsNative : reIsHostCtor; - return pattern.test(_toSource(value)); -} -var _baseIsNative = baseIsNative; - -function getValue(object, key) { - return object == null ? undefined : object[key]; -} -var _getValue = getValue; - -function getNative(object, key) { - var value = _getValue(object, key); - return _baseIsNative(value) ? value : undefined; -} -var _getNative = getNative; - -var DataView = _getNative(_root, 'DataView'); -var _DataView = DataView; - -var Map = _getNative(_root, 'Map'); -var _Map = Map; - -var Promise$1 = _getNative(_root, 'Promise'); -var _Promise = Promise$1; - -var Set = _getNative(_root, 'Set'); -var _Set = Set; - -var WeakMap = _getNative(_root, 'WeakMap'); -var _WeakMap = WeakMap; - -var mapTag = '[object Map]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - setTag = '[object Set]', - weakMapTag = '[object WeakMap]'; -var dataViewTag = '[object DataView]'; -var dataViewCtorString = _toSource(_DataView), - mapCtorString = _toSource(_Map), - promiseCtorString = _toSource(_Promise), - setCtorString = _toSource(_Set), - weakMapCtorString = _toSource(_WeakMap); -var getTag = _baseGetTag; -if ((_DataView && getTag(new _DataView(new ArrayBuffer(1))) != dataViewTag) || - (_Map && getTag(new _Map) != mapTag) || - (_Promise && getTag(_Promise.resolve()) != promiseTag) || - (_Set && getTag(new _Set) != setTag) || - (_WeakMap && getTag(new _WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = _baseGetTag(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? _toSource(Ctor) : ''; - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; -} -var _getTag = getTag; - -function isObjectLike(value) { - return value != null && typeof value == 'object'; -} -var isObjectLike_1 = isObjectLike; - -var argsTag = '[object Arguments]'; -function baseIsArguments(value) { - return isObjectLike_1(value) && _baseGetTag(value) == argsTag; -} -var _baseIsArguments = baseIsArguments; - -var objectProto$5 = Object.prototype; -var hasOwnProperty$3 = objectProto$5.hasOwnProperty; -var propertyIsEnumerable = objectProto$5.propertyIsEnumerable; -var isArguments = _baseIsArguments(function() { return arguments; }()) ? _baseIsArguments : function(value) { - return isObjectLike_1(value) && hasOwnProperty$3.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); -}; -var isArguments_1 = isArguments; - -var isArray = Array.isArray; -var isArray_1 = isArray; - -var MAX_SAFE_INTEGER = 9007199254740991; -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} -var isLength_1 = isLength; - -function isArrayLike(value) { - return value != null && isLength_1(value.length) && !isFunction_1(value); -} -var isArrayLike_1 = isArrayLike; - -function stubFalse() { - return false; -} -var stubFalse_1 = stubFalse; - -var isBuffer_1 = createCommonjsModule(function (module, exports) { -var freeExports = exports && !exports.nodeType && exports; -var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; -var moduleExports = freeModule && freeModule.exports === freeExports; -var Buffer = moduleExports ? _root.Buffer : undefined; -var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; -var isBuffer = nativeIsBuffer || stubFalse_1; -module.exports = isBuffer; -}); - -var argsTag$1 = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag$1 = '[object Function]', - mapTag$1 = '[object Map]', - numberTag = '[object Number]', - objectTag$1 = '[object Object]', - regexpTag = '[object RegExp]', - setTag$1 = '[object Set]', - stringTag = '[object String]', - weakMapTag$1 = '[object WeakMap]'; -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag$1 = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag$1] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[funcTag$1] = -typedArrayTags[mapTag$1] = typedArrayTags[numberTag] = -typedArrayTags[objectTag$1] = typedArrayTags[regexpTag] = -typedArrayTags[setTag$1] = typedArrayTags[stringTag] = -typedArrayTags[weakMapTag$1] = false; -function baseIsTypedArray(value) { - return isObjectLike_1(value) && - isLength_1(value.length) && !!typedArrayTags[_baseGetTag(value)]; -} -var _baseIsTypedArray = baseIsTypedArray; - -function baseUnary(func) { - return function(value) { - return func(value); - }; -} -var _baseUnary = baseUnary; - -var _nodeUtil = createCommonjsModule(function (module, exports) { -var freeExports = exports && !exports.nodeType && exports; -var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; -var moduleExports = freeModule && freeModule.exports === freeExports; -var freeProcess = moduleExports && _freeGlobal.process; -var nodeUtil = (function() { - try { - var types = freeModule && freeModule.require && freeModule.require('util').types; - if (types) { - return types; - } - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} -}()); -module.exports = nodeUtil; -}); - -var nodeIsTypedArray = _nodeUtil && _nodeUtil.isTypedArray; -var isTypedArray = nodeIsTypedArray ? _baseUnary(nodeIsTypedArray) : _baseIsTypedArray; -var isTypedArray_1 = isTypedArray; - -var mapTag$2 = '[object Map]', - setTag$2 = '[object Set]'; -var objectProto$6 = Object.prototype; -var hasOwnProperty$4 = objectProto$6.hasOwnProperty; -function isEmpty(value) { - if (value == null) { - return true; - } - if (isArrayLike_1(value) && - (isArray_1(value) || typeof value == 'string' || typeof value.splice == 'function' || - isBuffer_1(value) || isTypedArray_1(value) || isArguments_1(value))) { - return !value.length; - } - var tag = _getTag(value); - if (tag == mapTag$2 || tag == setTag$2) { - return !value.size; - } - if (_isPrototype(value)) { - return !_baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty$4.call(value, key)) { - return false; - } - } - return true; -} -var isEmpty_1 = isEmpty; - -var initialState = { - isAuthenticated: false, - isLoaded: false, - user: {}, - modules: [], - settings: { - currentProductId: null, - culture: "en-US", - trustedDomains: [], - trustedDomainsType: 1, - timezone: "UTC", - utcOffset: "00:00:00", - utcHoursOffset: 0, - homepage: "", - datePattern: "M/d/yyyy", - datePatternJQ: "00/00/0000", - dateTimePattern: "dddd, MMMM d, yyyy h:mm:ss tt", - datepicker: { - datePattern: "mm/dd/yy", - dateTimePattern: "DD, mm dd, yy h:mm:ss tt", - timePattern: "h:mm tt" - }, - hasShortenService: false - } -}; -var authReducer = function authReducer() { - var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; - var action = arguments.length > 1 ? arguments[1] : undefined; - switch (action.type) { - case SET_CURRENT_USER: - return Object.assign({}, state, { - isAuthenticated: !isEmpty_1(action.user), - user: action.user - }); - case SET_MODULE: - return Object.assign({}, state, { - settings: _objectSpread2({}, state.settings, { - currentProductId: action.module.id, - homepage: action.module.homepage - }) - }); - case SET_MODULES: - return Object.assign({}, state, { - modules: action.modules - }); - case SET_SETTINGS: - return Object.assign({}, state, { - settings: _objectSpread2({}, state.settings, {}, action.settings) - }); - case SET_IS_LOADED: - return Object.assign({}, state, { - isLoaded: action.isLoaded - }); - case LOGOUT: - return Object.assign({}, initialState, { - isLoaded: true - }); - default: - return state; - } -}; - -var reducers = /*#__PURE__*/Object.freeze({ - __proto__: null, - 'default': authReducer -}); - -function isAdmin(user) { - var isPeopleAdmin = user.listAdminModules ? user.listAdminModules.includes('people') : false; - return user.isAdmin || user.isOwner || isPeopleAdmin; -} -function isMe(user, userName) { - return userName === "@self" || userName === user.userName; -} -function getCurrentModule(modules, currentModuleId) { - return modules.find(function (module) { - return module.id === currentModuleId; - }); -} - -var selectors = /*#__PURE__*/Object.freeze({ - __proto__: null, - isAdmin: isAdmin, - isMe: isMe, - getCurrentModule: getCurrentModule -}); - -var index$1 = { - actions: actions, - reducers: reducers, - selectors: selectors -}; - -exports.Api = index; -exports.Auth = index$1; -//# sourceMappingURL=asc-web-common.js.map diff --git a/web/ASC.Web.Common/dist/asc-web-common.js.map b/web/ASC.Web.Common/dist/asc-web-common.js.map deleted file mode 100644 index 3b3c342b60..0000000000 --- a/web/ASC.Web.Common/dist/asc-web-common.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"asc-web-common.js","sources":["../src/utils/converter.js","../src/store/services/api/people/filter.js","../src/history/index.js","../src/constants/index.js","../src/store/services/api/client.js","../src/store/services/api/people/index.js","../src/store/services/api/index.js","../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js","../node_modules/@babel/runtime/regenerator/index.js","../src/store/auth/actions.js","../node_modules/lodash/_isPrototype.js","../node_modules/lodash/_overArg.js","../node_modules/lodash/_nativeKeys.js","../node_modules/lodash/_baseKeys.js","../node_modules/lodash/_freeGlobal.js","../node_modules/lodash/_root.js","../node_modules/lodash/_Symbol.js","../node_modules/lodash/_getRawTag.js","../node_modules/lodash/_objectToString.js","../node_modules/lodash/_baseGetTag.js","../node_modules/lodash/isObject.js","../node_modules/lodash/isFunction.js","../node_modules/lodash/_coreJsData.js","../node_modules/lodash/_isMasked.js","../node_modules/lodash/_toSource.js","../node_modules/lodash/_baseIsNative.js","../node_modules/lodash/_getValue.js","../node_modules/lodash/_getNative.js","../node_modules/lodash/_DataView.js","../node_modules/lodash/_Map.js","../node_modules/lodash/_Promise.js","../node_modules/lodash/_Set.js","../node_modules/lodash/_WeakMap.js","../node_modules/lodash/_getTag.js","../node_modules/lodash/isObjectLike.js","../node_modules/lodash/_baseIsArguments.js","../node_modules/lodash/isArguments.js","../node_modules/lodash/isArray.js","../node_modules/lodash/isLength.js","../node_modules/lodash/isArrayLike.js","../node_modules/lodash/stubFalse.js","../node_modules/lodash/isBuffer.js","../node_modules/lodash/_baseIsTypedArray.js","../node_modules/lodash/_baseUnary.js","../node_modules/lodash/_nodeUtil.js","../node_modules/lodash/isTypedArray.js","../node_modules/lodash/isEmpty.js","../src/store/auth/reducers.js","../src/store/auth/selectors.js","../src/store/auth/index.js"],"sourcesContent":["export const toUrlParams = (obj, skipNull) => {\r\n let str = \"\";\r\n for (var key in obj) {\r\n if (skipNull && !obj[key]) continue;\r\n\r\n if (str !== \"\") {\r\n str += \"&\";\r\n }\r\n\r\n str += key + \"=\" + encodeURIComponent(obj[key]);\r\n }\r\n\r\n return str;\r\n};\r\n","import { toUrlParams } from \"../../../../utils/converter\";\r\n\r\nconst DEFAULT_PAGE = 0;\r\nconst DEFAULT_PAGE_COUNT = 25;\r\nconst DEFAULT_TOTAL = 0;\r\nconst DEFAULT_SORT_BY = \"firstname\";\r\nconst DEFAULT_SORT_ORDER = \"ascending\";\r\nconst DEFAULT_EMPLOYEE_STATUS = null;\r\nconst DEFAULT_ACTIVATION_STATUS = null;\r\nconst DEFAULT_ROLE = null;\r\nconst DEFAULT_SEARCH = null;\r\nconst DEFAULT_GROUP = null;\r\n\r\nclass Filter {\r\n static getDefault(total = DEFAULT_TOTAL) {\r\n return new Filter(DEFAULT_PAGE, DEFAULT_PAGE_COUNT, total);\r\n }\r\n\r\n constructor(\r\n page = DEFAULT_PAGE,\r\n pageCount = DEFAULT_PAGE_COUNT,\r\n total = DEFAULT_TOTAL,\r\n sortBy = DEFAULT_SORT_BY,\r\n sortOrder = DEFAULT_SORT_ORDER,\r\n employeeStatus = DEFAULT_EMPLOYEE_STATUS,\r\n activationStatus = DEFAULT_ACTIVATION_STATUS,\r\n role = DEFAULT_ROLE,\r\n search = DEFAULT_SEARCH,\r\n group = DEFAULT_GROUP\r\n ) {\r\n this.page = page;\r\n this.pageCount = pageCount;\r\n this.sortBy = sortBy;\r\n this.sortOrder = sortOrder;\r\n this.employeeStatus = employeeStatus;\r\n this.activationStatus = activationStatus;\r\n this.role = role;\r\n this.search = search;\r\n this.total = total;\r\n this.group = group;\r\n }\r\n\r\n getStartIndex = () => {\r\n return this.page * this.pageCount;\r\n };\r\n\r\n hasNext = () => {\r\n return this.total - this.getStartIndex() > this.pageCount;\r\n };\r\n\r\n hasPrev = () => {\r\n return this.page > 0;\r\n };\r\n\r\n toDto = () => {\r\n const {\r\n pageCount,\r\n sortBy,\r\n sortOrder,\r\n employeeStatus,\r\n activationStatus,\r\n role,\r\n search,\r\n group\r\n } = this;\r\n\r\n let dtoFilter = {\r\n StartIndex: this.getStartIndex(),\r\n Count: pageCount,\r\n sortby: sortBy,\r\n sortorder: sortOrder,\r\n employeestatus: employeeStatus,\r\n activationstatus: activationStatus,\r\n filtervalue: search,\r\n groupId: group\r\n //fields: \"id,status,isAdmin,isOwner,isVisitor,activationStatus,userName,email,displayName,avatarSmall,\r\n //listAdminModules,birthday,title,location,isLDAP,isSSO\"\r\n };\r\n\r\n switch (role) {\r\n case \"admin\":\r\n dtoFilter.isadministrator = true;\r\n break;\r\n case \"user\":\r\n dtoFilter.employeeType = 1;\r\n break;\r\n case \"guest\":\r\n dtoFilter.employeeType = 2;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return dtoFilter;\r\n };\r\n\r\n toUrlParams = () => {\r\n const dtoFilter = this.toDto();\r\n const str = toUrlParams(dtoFilter, true);\r\n return str;\r\n };\r\n\r\n clone(onlySorting) {\r\n return onlySorting\r\n ? new Filter(\r\n DEFAULT_PAGE,\r\n DEFAULT_PAGE_COUNT,\r\n DEFAULT_TOTAL,\r\n this.sortBy,\r\n this.sortOrder\r\n )\r\n : new Filter(\r\n this.page,\r\n this.pageCount,\r\n this.total,\r\n this.sortBy,\r\n this.sortOrder,\r\n this.employeeStatus,\r\n this.activationStatus,\r\n this.role,\r\n this.search,\r\n this.group\r\n );\r\n }\r\n\r\n equals(filter) {\r\n const equals =\r\n this.employeeStatus === filter.employeeStatus &&\r\n this.activationStatus === filter.activationStatus &&\r\n this.role === filter.role &&\r\n this.group === filter.group &&\r\n this.search === filter.search &&\r\n this.sortBy === filter.sortBy &&\r\n this.sortOrder === filter.sortOrder &&\r\n this.page === filter.page &&\r\n this.pageCount === filter.pageCount;\r\n\r\n return equals;\r\n }\r\n}\r\n\r\nexport default Filter;\r\n","import { createBrowserHistory } from 'history';\r\n\r\nexport default createBrowserHistory();","export const AUTH_KEY = 'asc_auth_key';\r\n\r\n/**\r\n * Enum for employee activation status.\r\n * @readonly\r\n */\r\nexport const EmployeeActivationStatus = Object.freeze({\r\n NotActivated: 0,\r\n Activated: 1,\r\n Pending: 2,\r\n AutoGenerated: 4\r\n});\r\n\r\n/**\r\n * Enum for type of confirm link.\r\n * @readonly\r\n */\r\nexport const ConfirmType = Object.freeze({\r\n EmpInvite: 0,\r\n LinkInvite: 1,\r\n PortalSuspend: 2,\r\n PortalContinue: 3,\r\n PortalRemove: 4,\r\n DnsChange: 5,\r\n PortalOwnerChange: 6,\r\n Activation: 7,\r\n EmailChange: 8,\r\n EmailActivation: 9,\r\n PasswordChange: 10,\r\n ProfileRemove: 11,\r\n PhoneActivation: 12,\r\n PhoneAuth: 13,\r\n Auth: 14,\r\n TfaActivation: 15,\r\n TfaAuth: 16\r\n});\r\n\r\n/**\r\n * Enum for result of validation confirm link.\r\n * @readonly\r\n */\r\nexport const ValidationResult = Object.freeze({\r\n Ok: 0,\r\n Invalid: 1,\r\n Expired: 2\r\n});\r\n\r\n/**\r\n * Enum for employee status.\r\n * @readonly\r\n */\r\nexport const EmployeeStatus = Object.freeze({\r\n Active: 1,\r\n Disabled: 2\r\n});\r\n","import axios from \"axios\";\r\nimport Cookies from \"universal-cookie\";\r\nimport history from \"../../../history\";\r\nimport { AUTH_KEY } from \"../../../constants\";\r\n\r\nconst PREFIX = \"api\";\r\nconst VERSION = \"2.0\";\r\nconst baseURL = `${window.location.origin}/${PREFIX}/${VERSION}`;\r\n\r\n\r\n/**\r\n * @description axios instance for ajax requests\r\n */\r\n\r\nconst client = axios.create({\r\n baseURL: baseURL,\r\n responseType: 'json',\r\n timeout: 30000, // default is `0` (no timeout)\r\n});\r\n\r\nsetAuthorizationToken(localStorage.getItem(AUTH_KEY));\r\n\r\n/**\r\n * @description if any of the API gets 401 status code, this method \r\n calls getAuthToken method to renew accessToken\r\n * updates the error configuration and retries all failed requests \r\n again\r\n*/\r\nclient.interceptors.response.use(\r\n response => {\r\n return response;\r\n },\r\n error => {\r\n if (error.response.status === 401) {\r\n //place your reentry code\r\n history.push(\"/login/error=unauthorized\");\r\n }\r\n\r\n if (error.response.status === 502) {\r\n //toastr.error(error.response);\r\n history.push(`/error/${error.response.status}`);\r\n }\r\n\r\n return error;\r\n }\r\n);\r\n\r\nexport function setAuthorizationToken(token) {\r\n const cookies = new Cookies();\r\n\r\n if (token) {\r\n client.defaults.headers.common['Authorization'] = token;\r\n localStorage.setItem(AUTH_KEY, token);\r\n\r\n const current = new Date();\r\n const nextYear = new Date();\r\n\r\n nextYear.setFullYear(current.getFullYear() + 1);\r\n\r\n cookies.set(AUTH_KEY, token, {\r\n path: \"/\",\r\n expires: nextYear\r\n });\r\n } else {\r\n localStorage.clear();\r\n delete client.defaults.headers.common['Authorization'];\r\n cookies.remove(AUTH_KEY, {\r\n path: \"/\"\r\n });\r\n }\r\n}\r\n\r\nconst checkResponseError = (res) => {\r\n if (res && res.data && res.data.error) {\r\n console.error(res.data.error);\r\n throw new Error(res.data.error.message);\r\n }\r\n}\r\n\r\n/**\r\n * @description wrapper for making ajax requests\r\n * @param {object} object with method,url,data etc.\r\n */\r\nexport const request = function(options) {\r\n const onSuccess = function(response) {\r\n checkResponseError(response);\r\n return response.data.response;\r\n };\r\n const onError = function(error) {\r\n console.error(\"Request Failed:\", error.config);\r\n if (error.response) {\r\n console.error(\"Status:\", error.response.status);\r\n console.error(\"Data:\", error.response.data);\r\n console.error(\"Headers:\", error.response.headers);\r\n } else {\r\n console.error(\"Error Message:\", error.message);\r\n }\r\n return Promise.reject(error.response || error.message);\r\n };\r\n\r\n return client(options)\r\n .then(onSuccess)\r\n .catch(onError);\r\n};\r\n","\r\nimport { request } from \"../client\";\r\n//import axios from \"axios\";\r\nimport Filter from \"./filter\";\r\n\r\nexport function getUserList(filter = Filter.getDefault()) {\r\n const params =\r\n filter && filter instanceof Filter\r\n ? `/filter.json?${filter.toUrlParams()}`\r\n : \"\";\r\n \r\n return request({\r\n method: \"get\",\r\n url: `/people${params}`\r\n });\r\n }","import Filter from \"./people/filter\";\r\nimport * as People from './people';\r\n\r\nexport default { Filter, People };","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","module.exports = require(\"regenerator-runtime\");\n","import * as api from \"../services/api\";\r\n//import { fetchGroups, fetchPeople } from \"../../../../../products/ASC.People/Client/src/store/people/actions\";\r\nimport { setAuthorizationToken } from \"../services/api/client\";\r\n//import { getFilterByLocation } from \"../../../../../products/ASC.People/Client/src/helpers/converters\";\r\n//import config from \"../../../package.json\";\r\n\r\nexport const LOGIN_POST = \"LOGIN_POST\";\r\nexport const SET_CURRENT_USER = \"SET_CURRENT_USER\";\r\nexport const SET_MODULE = \"SET_MODULE\";\r\nexport const SET_MODULES = \"SET_MODULES\";\r\nexport const SET_SETTINGS = \"SET_SETTINGS\";\r\nexport const SET_IS_LOADED = \"SET_IS_LOADED\";\r\nexport const LOGOUT = \"LOGOUT\";\r\n\r\nexport function setModule(module) {\r\n return {\r\n type: SET_MODULE,\r\n module\r\n };\r\n}\r\n\r\nexport function setCurrentUser(user) {\r\n return {\r\n type: SET_CURRENT_USER,\r\n user\r\n };\r\n}\r\n\r\nexport function setModules(modules) {\r\n return {\r\n type: SET_MODULES,\r\n modules\r\n };\r\n}\r\n\r\nexport function setSettings(settings) {\r\n return {\r\n type: SET_SETTINGS,\r\n settings\r\n };\r\n}\r\n\r\nexport function setIsLoaded(isLoaded) {\r\n return {\r\n type: SET_IS_LOADED,\r\n isLoaded\r\n };\r\n}\r\n\r\nexport function setLogout() {\r\n return {\r\n type: LOGOUT\r\n };\r\n}\r\n\r\nexport async function getUserInfo(dispatch, additionalAction) {\r\n const { user, modules, settings } = await api.getInitInfo();\r\n let newSettings = settings;\r\n if (user.isAdmin) {\r\n const inviteLinks = await api.getInvitationLinks();\r\n newSettings = Object.assign(newSettings, inviteLinks);\r\n }\r\n\r\n dispatch(setCurrentUser(user));\r\n dispatch(setModules(modules));\r\n dispatch(setSettings(newSettings));\r\n\r\n additionalAction && additionalAction();\r\n\r\n /*await fetchGroups(dispatch);\r\n\r\n var re = new RegExp(`${config.homepage}((/?)$|/filter)`, \"gm\");\r\n const match = window.location.pathname.match(re);\r\n\r\n if (match && match.length > 0)\r\n {\r\n const newFilter = getFilterByLocation(window.location);\r\n await fetchPeople(newFilter, dispatch);\r\n }*/\r\n\r\n return dispatch(setIsLoaded(true));\r\n}\r\n\r\nexport function logout() {\r\n return dispatch => {\r\n setAuthorizationToken();\r\n return dispatch(setLogout());\r\n };\r\n}\r\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseKeys = require('./_baseKeys'),\n getTag = require('./_getTag'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLike = require('./isArrayLike'),\n isBuffer = require('./isBuffer'),\n isPrototype = require('./_isPrototype'),\n isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = isEmpty;\n","import {\r\n SET_CURRENT_USER,\r\n SET_MODULE,\r\n SET_MODULES,\r\n SET_IS_LOADED,\r\n LOGOUT,\r\n SET_SETTINGS\r\n} from \"./actions\";\r\nimport isEmpty from \"lodash/isEmpty\";\r\n\r\nconst initialState = {\r\n isAuthenticated: false,\r\n isLoaded: false,\r\n user: {},\r\n modules: [],\r\n settings: {\r\n currentProductId: null,\r\n culture: \"en-US\",\r\n trustedDomains: [],\r\n trustedDomainsType: 1,\r\n timezone: \"UTC\",\r\n utcOffset: \"00:00:00\",\r\n utcHoursOffset: 0,\r\n homepage: \"\",\r\n datePattern: \"M/d/yyyy\",\r\n datePatternJQ: \"00/00/0000\",\r\n dateTimePattern: \"dddd, MMMM d, yyyy h:mm:ss tt\",\r\n datepicker: {\r\n datePattern: \"mm/dd/yy\",\r\n dateTimePattern: \"DD, mm dd, yy h:mm:ss tt\",\r\n timePattern: \"h:mm tt\"\r\n },\r\n hasShortenService: false\r\n }\r\n};\r\n\r\nconst authReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case SET_CURRENT_USER:\r\n return Object.assign({}, state, {\r\n isAuthenticated: !isEmpty(action.user),\r\n user: action.user\r\n });\r\n case SET_MODULE:\r\n return Object.assign({}, state, {\r\n settings: {\r\n ...state.settings,\r\n currentProductId: action.module.id,\r\n homepage: action.module.homepage\r\n }\r\n });\r\n case SET_MODULES:\r\n return Object.assign({}, state, {\r\n modules: action.modules\r\n });\r\n case SET_SETTINGS:\r\n return Object.assign({}, state, {\r\n settings: { ...state.settings, ...action.settings }\r\n });\r\n case SET_IS_LOADED:\r\n return Object.assign({}, state, {\r\n isLoaded: action.isLoaded\r\n });\r\n case LOGOUT:\r\n return Object.assign({}, initialState, {\r\n isLoaded: true\r\n });\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default authReducer;\r\n","export function isAdmin(user) {\r\n let isPeopleAdmin = user.listAdminModules ? user.listAdminModules.includes('people') : false;\r\n return user.isAdmin || user.isOwner || isPeopleAdmin;\r\n};\r\n\r\nexport function isMe(user, userName) {\r\n return userName === \"@self\" || userName === user.userName;\r\n};\r\n\r\nexport function getCurrentModule(modules, currentModuleId) {\r\n return modules.find(module => module.id === currentModuleId);\r\n}","import * as actions from './actions';\r\nimport * as reducers from './reducers';\r\nimport * as selectors from './selectors';\r\n\r\nexport default { actions, reducers, selectors };"],"names":["toUrlParams","obj","skipNull","str","key","encodeURIComponent","DEFAULT_PAGE","DEFAULT_PAGE_COUNT","DEFAULT_TOTAL","DEFAULT_SORT_BY","DEFAULT_SORT_ORDER","DEFAULT_EMPLOYEE_STATUS","DEFAULT_ACTIVATION_STATUS","DEFAULT_ROLE","DEFAULT_SEARCH","DEFAULT_GROUP","Filter","total","page","pageCount","sortBy","sortOrder","employeeStatus","activationStatus","role","search","group","getStartIndex","hasNext","hasPrev","toDto","dtoFilter","StartIndex","Count","sortby","sortorder","employeestatus","activationstatus","filtervalue","groupId","isadministrator","employeeType","onlySorting","filter","equals","createBrowserHistory","AUTH_KEY","EmployeeActivationStatus","Object","freeze","NotActivated","Activated","Pending","AutoGenerated","ConfirmType","EmpInvite","LinkInvite","PortalSuspend","PortalContinue","PortalRemove","DnsChange","PortalOwnerChange","Activation","EmailChange","EmailActivation","PasswordChange","ProfileRemove","PhoneActivation","PhoneAuth","Auth","TfaActivation","TfaAuth","ValidationResult","Ok","Invalid","Expired","EmployeeStatus","Active","Disabled","PREFIX","VERSION","baseURL","window","location","origin","client","axios","create","responseType","timeout","setAuthorizationToken","localStorage","getItem","interceptors","response","use","error","status","history","push","token","cookies","Cookies","defaults","headers","common","setItem","current","Date","nextYear","setFullYear","getFullYear","set","path","expires","clear","remove","checkResponseError","res","data","console","Error","message","request","options","onSuccess","onError","config","Promise","reject","then","catch","getUserList","getDefault","params","method","url","People","undefined","require$$0","LOGIN_POST","SET_CURRENT_USER","SET_MODULE","SET_MODULES","SET_SETTINGS","SET_IS_LOADED","LOGOUT","setModule","module","type","setCurrentUser","user","setModules","modules","setSettings","settings","setIsLoaded","isLoaded","setLogout","getUserInfo","dispatch","additionalAction","api","newSettings","isAdmin","inviteLinks","assign","logout","overArg","objectProto","isPrototype","nativeKeys","global","freeGlobal","Symbol","root","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","objectToString","isObject","baseGetTag","coreJsData","funcProto","funcToString","isMasked","isFunction","toSource","getValue","baseIsNative","getNative","DataView","Map","Set","WeakMap","isObjectLike","baseIsArguments","isLength","stubFalse","argsTag","funcTag","mapTag","objectTag","setTag","weakMapTag","dataViewTag","nodeUtil","baseUnary","baseIsTypedArray","isArrayLike","isArray","isBuffer","isTypedArray","isArguments","getTag","baseKeys","initialState","isAuthenticated","currentProductId","culture","trustedDomains","trustedDomainsType","timezone","utcOffset","utcHoursOffset","homepage","datePattern","datePatternJQ","dateTimePattern","datepicker","timePattern","hasShortenService","authReducer","state","action","isEmpty","id","isPeopleAdmin","listAdminModules","includes","isOwner","isMe","userName","getCurrentModule","currentModuleId","find","actions","reducers","selectors"],"mappings":"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"} \ No newline at end of file From ef1e3eaa1d0eba122be8db76e2cf45f9207f7284 Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Thu, 14 Nov 2019 16:37:41 +0300 Subject: [PATCH 04/55] web: Client: Replaced auth store to ASC.Web.Common realization --- .../src/components/Layout/index.js | 4 +- .../Confirm/sub-components/activateEmail.js | 4 +- .../Confirm/sub-components/activateUser.js | 4 +- .../Confirm/sub-components/changeEmail.js | 4 +- .../Confirm/sub-components/changePassword.js | 7 +- .../Confirm/sub-components/createUser.js | 3 +- .../Confirm/sub-components/profileRemove.js | 3 +- .../src/components/pages/Login/index.js | 4 +- .../components/pages/Settings/Layout/index.js | 3 +- .../categories/common/customization.js | 3 +- .../src/helpers/privateRoute.js | 3 +- web/ASC.Web.Client/src/index.js | 3 +- web/ASC.Web.Client/src/store/rootReducer.js | 4 +- web/ASC.Web.Common/src/index.js | 4 +- web/ASC.Web.Common/src/store/auth/actions.js | 268 ++++++++++++++---- web/ASC.Web.Common/src/store/auth/index.js | 4 +- web/ASC.Web.Common/src/store/auth/reducer.js | 96 +++++++ web/ASC.Web.Common/src/store/auth/reducers.js | 73 ----- .../src/store/auth/selectors.js | 4 +- web/ASC.Web.Common/src/store/index.js | 3 + .../src/store/services/api/client.js | 57 ++-- .../src/store/services/api/index.js | 7 +- .../src/store/services/api/modules/index.js | 21 ++ .../src/store/services/api/people/index.js | 111 ++++++++ .../src/store/services/api/settings/index.js | 72 +++++ .../src/store/services/api/user/index.js | 36 +++ 26 files changed, 623 insertions(+), 182 deletions(-) create mode 100644 web/ASC.Web.Common/src/store/auth/reducer.js delete mode 100644 web/ASC.Web.Common/src/store/auth/reducers.js create mode 100644 web/ASC.Web.Common/src/store/index.js create mode 100644 web/ASC.Web.Common/src/store/services/api/modules/index.js create mode 100644 web/ASC.Web.Common/src/store/services/api/settings/index.js create mode 100644 web/ASC.Web.Common/src/store/services/api/user/index.js diff --git a/web/ASC.Web.Client/src/components/Layout/index.js b/web/ASC.Web.Client/src/components/Layout/index.js index 6c06bfee07..3d71e54a29 100644 --- a/web/ASC.Web.Client/src/components/Layout/index.js +++ b/web/ASC.Web.Client/src/components/Layout/index.js @@ -3,10 +3,12 @@ import { connect } from "react-redux"; import PropTypes from "prop-types"; import { withRouter } from "react-router"; import { Layout, Toast } from "asc-web-components"; -import { logout } from "../../store/auth/actions"; import { withTranslation, I18nextProvider } from 'react-i18next'; import i18n from "./i18n"; import isEqual from "lodash/isEqual"; +import { store } from 'asc-web-common'; +const { logout } = store.auth.actions; + //import { isAdmin } from "../../store/auth/selectors"; class PureStudioLayout extends React.Component { diff --git a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/activateEmail.js b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/activateEmail.js index c9dc2ba580..7f849abd08 100644 --- a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/activateEmail.js +++ b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/activateEmail.js @@ -3,9 +3,9 @@ import { withRouter } from "react-router"; import { withTranslation } from 'react-i18next'; import { PageLayout, Loader } from 'asc-web-components'; import { connect } from 'react-redux'; -import { logout, changeEmail } from '../../../../store/auth/actions'; import PropTypes from 'prop-types'; - +import { store } from 'asc-web-common'; +const { logout, changeEmail } = store.auth.actions; class ActivateEmail extends React.PureComponent { diff --git a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/activateUser.js b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/activateUser.js index 6b24a0897d..7ad76b73a3 100644 --- a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/activateUser.js +++ b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/activateUser.js @@ -6,8 +6,10 @@ import styled from 'styled-components'; import { Collapse } from 'reactstrap'; import { connect } from 'react-redux'; import { EmployeeActivationStatus } from './../../../../helpers/constants'; -import { getConfirmationInfo, activateConfirmUser } from '../../../../store/auth/actions'; import PropTypes from 'prop-types'; +import { store } from 'asc-web-common'; +const { getConfirmationInfo, activateConfirmUser } = store.auth.actions; + const inputWidth = '400px'; diff --git a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/changeEmail.js b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/changeEmail.js index cc42490630..b21eb55f02 100644 --- a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/changeEmail.js +++ b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/changeEmail.js @@ -3,9 +3,9 @@ import { withRouter } from "react-router"; import { withTranslation } from 'react-i18next'; import { PageLayout, Loader } from 'asc-web-components'; import { connect } from 'react-redux'; -import { changeEmail } from '../../../../store/auth/actions'; import PropTypes from 'prop-types'; - +import { store } from 'asc-web-common'; +const { changeEmail } = store.auth.actions; class ChangeEmail extends React.PureComponent { componentDidMount() { diff --git a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/changePassword.js b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/changePassword.js index 91cebf6aa0..95e3213c78 100644 --- a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/changePassword.js +++ b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/changePassword.js @@ -13,11 +13,8 @@ import { Loader, toastr } from "asc-web-components"; -import { - changePassword, - getConfirmationInfo, - logout -} from "../../../../../src/store/auth/actions"; +import { store } from 'asc-web-common'; +const { changePassword, getConfirmationInfo, logout } = store.auth.actions; const BodyStyle = styled(Container)` margin-top: 70px; diff --git a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/createUser.js b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/createUser.js index 26352c0f88..5ef6fa84bf 100644 --- a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/createUser.js +++ b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/createUser.js @@ -5,8 +5,9 @@ import { Button, TextInput, PageLayout, Text, PasswordInput, toastr, Loader } fr import styled from 'styled-components'; import { Collapse } from 'reactstrap'; import { connect } from 'react-redux'; -import { getConfirmationInfo, createConfirmUser, logout, login } from '../../../../store/auth/actions'; import PropTypes from 'prop-types'; +import { store } from 'asc-web-common'; +const { getConfirmationInfo, createConfirmUser, logout, login } = store.auth.actions; const inputWidth = '400px'; diff --git a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/profileRemove.js b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/profileRemove.js index 624b13b34c..d3af323dbe 100644 --- a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/profileRemove.js +++ b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/profileRemove.js @@ -6,7 +6,8 @@ import styled from 'styled-components'; import PropTypes from 'prop-types'; import { withTranslation } from 'react-i18next'; import { deleteSelf } from './../../../../store/services/api'; -import { logout } from '../../../../store/auth/actions'; +import { store } from 'asc-web-common'; +const { logout } = store.auth.actions; const ProfileRemoveContainer = styled.div` display: flex; diff --git a/web/ASC.Web.Client/src/components/pages/Login/index.js b/web/ASC.Web.Client/src/components/pages/Login/index.js index c873dc40fb..23990822e8 100644 --- a/web/ASC.Web.Client/src/components/pages/Login/index.js +++ b/web/ASC.Web.Client/src/components/pages/Login/index.js @@ -21,12 +21,14 @@ import { HelpButton } from "asc-web-components"; import { connect } from "react-redux"; -import { login } from "../../../store/auth/actions"; +//import { login } from "../../../store/auth/actions"; import styled from "styled-components"; import { useTranslation } from "react-i18next"; import i18n from "./i18n"; import { sendInstructionsToChangePassword } from "../../../store/services/api"; import SubModalDialog from "./sub-components/modal-dialog"; +import { store } from 'asc-web-common'; +const { login } = store.auth.actions; const FormContainer = styled(Container)` margin-top: 70px; diff --git a/web/ASC.Web.Client/src/components/pages/Settings/Layout/index.js b/web/ASC.Web.Client/src/components/pages/Settings/Layout/index.js index eda5389936..0d1aae114e 100644 --- a/web/ASC.Web.Client/src/components/pages/Settings/Layout/index.js +++ b/web/ASC.Web.Client/src/components/pages/Settings/Layout/index.js @@ -8,7 +8,8 @@ import { ArticleBodyContent } from "./Article"; import { SectionHeaderContent } from './Section'; -import { setCurrentProductId } from '../../../../store/auth/actions'; +import { store } from 'asc-web-common'; +const { setCurrentProductId } = store.auth.actions; const Layout = ({ currentProductId, setCurrentProductId, language, children }) => { diff --git a/web/ASC.Web.Client/src/components/pages/Settings/categories/common/customization.js b/web/ASC.Web.Client/src/components/pages/Settings/categories/common/customization.js index 960e062462..2967ff45a6 100644 --- a/web/ASC.Web.Client/src/components/pages/Settings/categories/common/customization.js +++ b/web/ASC.Web.Client/src/components/pages/Settings/categories/common/customization.js @@ -2,9 +2,10 @@ import React from "react"; import { connect } from "react-redux"; import { withTranslation } from 'react-i18next'; import { FieldContainer, Text, ComboBox, Loader, Button, toastr, Link, TextInput } from "asc-web-components"; -import { getCultures, setLanguageAndTime, getPortalTimezones, setGreetingTitle, restoreGreetingTitle } from '../../../../../store/auth/actions'; import styled from 'styled-components'; import { Trans } from 'react-i18next'; +import { store } from 'asc-web-common'; +const { getCultures, setLanguageAndTime, getPortalTimezones, setGreetingTitle, restoreGreetingTitle } = store.auth.actions; const mapCulturesToArray = (cultures, t) => { return cultures.map((culture) => { diff --git a/web/ASC.Web.Client/src/helpers/privateRoute.js b/web/ASC.Web.Client/src/helpers/privateRoute.js index db70934506..41b0de1c20 100644 --- a/web/ASC.Web.Client/src/helpers/privateRoute.js +++ b/web/ASC.Web.Client/src/helpers/privateRoute.js @@ -2,9 +2,10 @@ import React from 'react'; import { Redirect, Route } from 'react-router-dom'; import { AUTH_KEY } from './constants'; import { connect } from "react-redux"; -import { isAdmin } from "../store/auth/selectors"; import { Error404 } from "../components/pages/Error"; import { PageLayout, Loader } from "asc-web-components"; +import { store } from 'asc-web-common'; +const { isAdmin } = store.auth.selectors; const PrivateRoute = ({ component: Component, ...rest }) => { const { isAuthenticated, isLoaded, isAdmin, restricted } = rest; diff --git a/web/ASC.Web.Client/src/index.js b/web/ASC.Web.Client/src/index.js index 28d14c6c75..43e2a167a9 100644 --- a/web/ASC.Web.Client/src/index.js +++ b/web/ASC.Web.Client/src/index.js @@ -6,7 +6,8 @@ import store from './store/store'; import './custom.scss'; import App from './App'; import * as serviceWorker from './serviceWorker'; -import { getUserInfo, getPortalSettings } from './store/auth/actions'; +import { store as commonStore } from 'asc-web-common'; +const { getUserInfo, getPortalSettings } = commonStore.auth.actions; const token = localStorage.getItem(AUTH_KEY); diff --git a/web/ASC.Web.Client/src/store/rootReducer.js b/web/ASC.Web.Client/src/store/rootReducer.js index 5c6f06206c..74a1165ea4 100644 --- a/web/ASC.Web.Client/src/store/rootReducer.js +++ b/web/ASC.Web.Client/src/store/rootReducer.js @@ -1,6 +1,8 @@ import { combineReducers } from 'redux'; -import authReducer from './auth/reducer'; +//import authReducer from './auth/reducer'; import settingsReducer from './settings/reducer'; +import { store } from 'asc-web-common'; +const { reducer: authReducer } = store.auth; const rootReducer = combineReducers({ auth: authReducer, diff --git a/web/ASC.Web.Common/src/index.js b/web/ASC.Web.Common/src/index.js index fa441f79c6..43dfec2648 100644 --- a/web/ASC.Web.Common/src/index.js +++ b/web/ASC.Web.Common/src/index.js @@ -1,2 +1,2 @@ -export { default as Api } from './store/services/api'; -export { default as Auth } from './store/auth'; +export { default as api } from './store/services/api'; +export { default as store } from './store'; \ No newline at end of file diff --git a/web/ASC.Web.Common/src/store/auth/actions.js b/web/ASC.Web.Common/src/store/auth/actions.js index a398badc23..0e65dd3b3f 100644 --- a/web/ASC.Web.Common/src/store/auth/actions.js +++ b/web/ASC.Web.Common/src/store/auth/actions.js @@ -1,89 +1,247 @@ -import * as api from "../services/api"; -//import { fetchGroups, fetchPeople } from "../../../../../products/ASC.People/Client/src/store/people/actions"; -import { setAuthorizationToken } from "../services/api/client"; -//import { getFilterByLocation } from "../../../../../products/ASC.People/Client/src/helpers/converters"; -//import config from "../../../package.json"; +import { default as api } from "../services/api"; -export const LOGIN_POST = "LOGIN_POST"; -export const SET_CURRENT_USER = "SET_CURRENT_USER"; -export const SET_MODULE = "SET_MODULE"; -export const SET_MODULES = "SET_MODULES"; -export const SET_SETTINGS = "SET_SETTINGS"; -export const SET_IS_LOADED = "SET_IS_LOADED"; -export const LOGOUT = "LOGOUT"; - -export function setModule(module) { - return { - type: SET_MODULE, - module - }; -} +export const LOGIN_POST = 'LOGIN_POST'; +export const SET_CURRENT_USER = 'SET_CURRENT_USER'; +export const SET_MODULES = 'SET_MODULES'; +export const SET_SETTINGS = 'SET_SETTINGS'; +export const SET_IS_LOADED = 'SET_IS_LOADED'; +export const LOGOUT = 'LOGOUT'; +export const SET_PASSWORD_SETTINGS = 'SET_PASSWORD_SETTINGS'; +export const SET_IS_CONFIRM_LOADED = 'SET_IS_CONFIRM_LOADED'; +export const SET_NEW_EMAIL = 'SET_NEW_EMAIL'; +export const GET_PORTAL_CULTURES = 'GET_PORTAL_CULTURES'; +export const SET_PORTAL_LANGUAGE_AND_TIME = 'SET_PORTAL_LANGUAGE_AND_TIME'; +export const GET_TIMEZONES = 'GET_TIMEZONES'; +export const SET_CURRENT_PRODUCT_ID = 'SET_CURRENT_PRODUCT_ID'; +export const SET_GREETING_SETTINGS = "SET_GREETING_SETTINGS"; export function setCurrentUser(user) { return { - type: SET_CURRENT_USER, - user + type: SET_CURRENT_USER, + user }; } export function setModules(modules) { return { - type: SET_MODULES, - modules + type: SET_MODULES, + modules }; } export function setSettings(settings) { return { - type: SET_SETTINGS, - settings + type: SET_SETTINGS, + settings }; } export function setIsLoaded(isLoaded) { return { - type: SET_IS_LOADED, - isLoaded + type: SET_IS_LOADED, + isLoaded + }; +} + +export function setIsConfirmLoaded(isConfirmLoaded) { + return { + type: SET_IS_CONFIRM_LOADED, + isConfirmLoaded }; } export function setLogout() { return { - type: LOGOUT + type: LOGOUT }; } -export async function getUserInfo(dispatch, additionalAction) { - const { user, modules, settings } = await api.getInitInfo(); - let newSettings = settings; - if (user.isAdmin) { - const inviteLinks = await api.getInvitationLinks(); - newSettings = Object.assign(newSettings, inviteLinks); +export function setPasswordSettings(passwordSettings) { + return { + type: SET_PASSWORD_SETTINGS, + passwordSettings + }; +} + +export function setNewEmail(email) { + return { + type: SET_NEW_EMAIL, + email + }; +} + +export function getPortalCultures(cultures) { + return { + type: GET_PORTAL_CULTURES, + cultures + }; +} + +export function setPortalLanguageAndTime(newSettings) { + return { + type: SET_PORTAL_LANGUAGE_AND_TIME, + newSettings + }; +} + +export function getTimezones(timezones) { + return { + type: GET_TIMEZONES, + timezones + }; +} + +export function setCurrentProductId(currentProductId) { + return { + type: SET_CURRENT_PRODUCT_ID, + currentProductId + }; +} + +export function setGreetingSettings(title) { + return { + type: SET_GREETING_SETTINGS, + title + }; +} + +export function getUser(dispatch) { + return api.people.getUser() + .then(user => dispatch(setCurrentUser(user))); +} + +export function getPortalSettings(dispatch) { + return api.settings.getSettings() + .then(settings => dispatch(setSettings(settings))); +} + +export function getModules(dispatch) { + return api.modules.getModulesList() + .then(modules => dispatch(setModules(modules))); +} + +const loadInitInfo = (dispatch) => { + return getPortalSettings(dispatch) + .then(() => getModules(dispatch)) + .then(() => dispatch(setIsLoaded(true))); +} + +export function getUserInfo(dispatch) { + return getUser(dispatch) + .then(() => loadInitInfo(dispatch)); +} + +export function login(user, pass) { + return dispatch => { + return api.user.login(user, pass) + .then(() => getUserInfo(dispatch)); } - - dispatch(setCurrentUser(user)); - dispatch(setModules(modules)); - dispatch(setSettings(newSettings)); - - additionalAction && additionalAction(); - - /*await fetchGroups(dispatch); - - var re = new RegExp(`${config.homepage}((/?)$|/filter)`, "gm"); - const match = window.location.pathname.match(re); - - if (match && match.length > 0) - { - const newFilter = getFilterByLocation(window.location); - await fetchPeople(newFilter, dispatch); - }*/ - - return dispatch(setIsLoaded(true)); } export function logout() { return dispatch => { - setAuthorizationToken(); - return dispatch(setLogout()); + return api.user.logout() + .then(() => dispatch(setLogout())); + } +} + +export function getConfirmationInfo(token, type) { + return dispatch => { + return api.settings.getPasswordSettings(token) + .then((settings) => dispatch(setPasswordSettings(settings))) + .then(() => dispatch(setIsConfirmLoaded(true))); + } +} + +export function createConfirmUser(registerData, loginData, key) { + const data = Object.assign({}, registerData, loginData); + return (dispatch) => { + return api.people.createUser(data, key) + .then(user => dispatch(setCurrentUser(user))) + .then(() => api.user.login(loginData.userName, loginData.password)) + .then(() => loadInitInfo(dispatch)); }; } + +export function changePassword(userId, password, key) { + return dispatch => { + return api.people.changePassword(userId, password, key) + .then(() => logout(dispatch)); + } +} + +export function changeEmail(userId, email, key) { + return dispatch => { + return api.people.changeEmail(userId, email, key) + .then(user => dispatch(setNewEmail(user.email))); + } +} + +export function activateConfirmUser(personalData, loginData, key, userId, activationStatus) { + const changedData = { + id: userId, + FirstName: personalData.firstname, + LastName: personalData.lastname + } + + return dispatch => { + return api.people.changePassword(userId, loginData.password, key) + .then(data => { + console.log('set password success:', data); + return api.people.updateActivationStatus(activationStatus, userId, key); + }) + .then(data => { + console.log("activation success, result:", data); + return dispatch(login(loginData.userName, loginData.password)); + }) + .then(data => { + console.log("log in, result:", data); + return api.people.updateUser(changedData); + }) + .then(user => dispatch(setCurrentUser(user))); + }; +} + +export function getCultures() { + return dispatch => { + return api.settings.getPortalCultures() + .then(cultures => { + dispatch(getPortalCultures(cultures)); + } + ); + }; +} + +export function setLanguageAndTime(lng, timeZoneID) { + return dispatch => { + return api.settings.setLanguageAndTime(lng, timeZoneID) + .then(() => dispatch(setPortalLanguageAndTime({ lng, timeZoneID }))); + }; +} + +export function getPortalTimezones() { + return dispatch => { + return api.settings.getPortalTimezones() + .then((timezones) => { + dispatch(getTimezones(timezones)) + }); + }; +} + +export function setGreetingTitle(greetingTitle) { + return dispatch => { + return api.settings.setGreetingSettings(greetingTitle) + .then(() => { + dispatch(setGreetingSettings(greetingTitle)) + }); + }; +} + +export function restoreGreetingTitle() { + return dispatch => { + return api.settings.restoreGreetingSettings() + .then((res) => { + dispatch(setGreetingSettings(res.companyName)) + }); + }; +} \ No newline at end of file diff --git a/web/ASC.Web.Common/src/store/auth/index.js b/web/ASC.Web.Common/src/store/auth/index.js index df6b22fb04..bb208656c7 100644 --- a/web/ASC.Web.Common/src/store/auth/index.js +++ b/web/ASC.Web.Common/src/store/auth/index.js @@ -1,5 +1,5 @@ import * as actions from './actions'; -import * as reducers from './reducers'; +import reducer from './reducer'; import * as selectors from './selectors'; -export default { actions, reducers, selectors }; \ No newline at end of file +export default { actions, reducer, selectors }; \ No newline at end of file diff --git a/web/ASC.Web.Common/src/store/auth/reducer.js b/web/ASC.Web.Common/src/store/auth/reducer.js new file mode 100644 index 0000000000..4ca6ee5bf4 --- /dev/null +++ b/web/ASC.Web.Common/src/store/auth/reducer.js @@ -0,0 +1,96 @@ +import { + SET_CURRENT_USER, SET_MODULES, SET_SETTINGS, SET_IS_LOADED, LOGOUT, SET_PASSWORD_SETTINGS, SET_IS_CONFIRM_LOADED, SET_NEW_EMAIL, + GET_PORTAL_CULTURES, SET_PORTAL_LANGUAGE_AND_TIME, GET_TIMEZONES, SET_CURRENT_PRODUCT_ID, SET_GREETING_SETTINGS +} from './actions'; +import isEmpty from "lodash/isEmpty"; + +const initialState = { + isAuthenticated: false, + isLoaded: false, + isConfirmLoaded: false, + user: {}, + modules: [], + settings: { + currentProductId: "", + culture: "en-US", + cultures: [], + trustedDomains: [], + trustedDomainsType: 1, + timezone: "UTC", + timezones: [], + utcOffset: "00:00:00", + utcHoursOffset: 0, + homepage: "", //config.homepage, + datePattern: "M/d/yyyy", + datePatternJQ: "00/00/0000", + dateTimePattern: "dddd, MMMM d, yyyy h:mm:ss tt", + datepicker: { + datePattern: "mm/dd/yy", + dateTimePattern: "DD, mm dd, yy h:mm:ss tt", + timePattern: "h:mm tt" + }, + greetingSettings: 'Web Office Applications' + } +} + +const authReducer = (state = initialState, action) => { + switch (action.type) { + case SET_CURRENT_USER: + return Object.assign({}, state, { + isAuthenticated: !isEmpty(action.user), + user: action.user + }); + case SET_MODULES: + return Object.assign({}, state, { + modules: action.modules + }); + case SET_SETTINGS: + return Object.assign({}, state, { + settings: { ...state.settings, ...action.settings } + }); + case GET_PORTAL_CULTURES: + return Object.assign({}, state, { + settings: { ...state.settings, cultures: action.cultures } + }); + case SET_PASSWORD_SETTINGS: + return Object.assign({}, state, { + settings: { ...state.settings, passwordSettings: action.passwordSettings } + }); + case SET_IS_LOADED: + return Object.assign({}, state, { + isLoaded: action.isLoaded + }); + case SET_IS_CONFIRM_LOADED: + return Object.assign({}, state, { + isConfirmLoaded: action.isConfirmLoaded + }); + case SET_NEW_EMAIL: + return Object.assign({}, state, { + user: { ...state.user, email: action.email } + }); + case SET_PORTAL_LANGUAGE_AND_TIME: + return Object.assign({}, state, { + settings: { ...state.settings, culture: action.newSettings.lng, timezone: action.newSettings.timeZoneID } + }); + case GET_TIMEZONES: + return Object.assign({}, state, { + settings: { ...state.settings, timezones: action.timezones } + }); + case SET_CURRENT_PRODUCT_ID: + return Object.assign({}, state, { + settings: { ...state.settings, currentProductId: action.currentProductId } + }); + case SET_GREETING_SETTINGS: + return Object.assign({}, state, { + settings: { ...state.settings, greetingSettings: action.title } + }); + case LOGOUT: + return Object.assign({}, initialState, { + settings: { greetingSettings: state.settings.greetingSettings, culture: state.settings.culture } + }); + default: + return state; + } +} + +export default authReducer; diff --git a/web/ASC.Web.Common/src/store/auth/reducers.js b/web/ASC.Web.Common/src/store/auth/reducers.js deleted file mode 100644 index 5eae645d4c..0000000000 --- a/web/ASC.Web.Common/src/store/auth/reducers.js +++ /dev/null @@ -1,73 +0,0 @@ -import { - SET_CURRENT_USER, - SET_MODULE, - SET_MODULES, - SET_IS_LOADED, - LOGOUT, - SET_SETTINGS -} from "./actions"; -import isEmpty from "lodash/isEmpty"; - -const initialState = { - isAuthenticated: false, - isLoaded: false, - user: {}, - modules: [], - settings: { - currentProductId: null, - culture: "en-US", - trustedDomains: [], - trustedDomainsType: 1, - timezone: "UTC", - utcOffset: "00:00:00", - utcHoursOffset: 0, - homepage: "", - datePattern: "M/d/yyyy", - datePatternJQ: "00/00/0000", - dateTimePattern: "dddd, MMMM d, yyyy h:mm:ss tt", - datepicker: { - datePattern: "mm/dd/yy", - dateTimePattern: "DD, mm dd, yy h:mm:ss tt", - timePattern: "h:mm tt" - }, - hasShortenService: false - } -}; - -const authReducer = (state = initialState, action) => { - switch (action.type) { - case SET_CURRENT_USER: - return Object.assign({}, state, { - isAuthenticated: !isEmpty(action.user), - user: action.user - }); - case SET_MODULE: - return Object.assign({}, state, { - settings: { - ...state.settings, - currentProductId: action.module.id, - homepage: action.module.homepage - } - }); - case SET_MODULES: - return Object.assign({}, state, { - modules: action.modules - }); - case SET_SETTINGS: - return Object.assign({}, state, { - settings: { ...state.settings, ...action.settings } - }); - case SET_IS_LOADED: - return Object.assign({}, state, { - isLoaded: action.isLoaded - }); - case LOGOUT: - return Object.assign({}, initialState, { - isLoaded: true - }); - default: - return state; - } -}; - -export default authReducer; diff --git a/web/ASC.Web.Common/src/store/auth/selectors.js b/web/ASC.Web.Common/src/store/auth/selectors.js index 9f4e6a58bb..e7cbaa05d1 100644 --- a/web/ASC.Web.Common/src/store/auth/selectors.js +++ b/web/ASC.Web.Common/src/store/auth/selectors.js @@ -1,11 +1,11 @@ export function isAdmin(user) { let isPeopleAdmin = user.listAdminModules ? user.listAdminModules.includes('people') : false; return user.isAdmin || user.isOwner || isPeopleAdmin; -}; +} export function isMe(user, userName) { return userName === "@self" || userName === user.userName; -}; +} export function getCurrentModule(modules, currentModuleId) { return modules.find(module => module.id === currentModuleId); diff --git a/web/ASC.Web.Common/src/store/index.js b/web/ASC.Web.Common/src/store/index.js new file mode 100644 index 0000000000..43b158ad61 --- /dev/null +++ b/web/ASC.Web.Common/src/store/index.js @@ -0,0 +1,3 @@ +import { default as auth } from './auth'; + +export default { auth }; \ No newline at end of file diff --git a/web/ASC.Web.Common/src/store/services/api/client.js b/web/ASC.Web.Common/src/store/services/api/client.js index 9189079e46..893cb780b0 100644 --- a/web/ASC.Web.Common/src/store/services/api/client.js +++ b/web/ASC.Web.Common/src/store/services/api/client.js @@ -1,43 +1,37 @@ import axios from "axios"; -import history from "../../../history"; import { AUTH_KEY } from "../../../constants"; +//import { toastr } from "asc-web-components"; const PREFIX = "api"; const VERSION = "2.0"; const baseURL = `${window.location.origin}/${PREFIX}/${VERSION}`; - /** * @description axios instance for ajax requests */ const client = axios.create({ baseURL: baseURL, - responseType: 'json', - timeout: 30000, // default is `0` (no timeout) + responseType: "json", + timeout: 30000 // default is `0` (no timeout) }); setAuthorizationToken(localStorage.getItem(AUTH_KEY)); -/** - * @description if any of the API gets 401 status code, this method - calls getAuthToken method to renew accessToken - * updates the error configuration and retries all failed requests - again -*/ client.interceptors.response.use( response => { return response; }, error => { + if(error.isAxiosError) + return error; + if (error.response.status === 401) { - //place your reentry code - history.push("/login/error=unauthorized"); + window.location.href = "/login/error=unauthorized"; } if (error.response.status === 502) { - //toastr.error(error.response); - history.push(`/error/${error.response.status}`); + window.location.href = `/error/${error.response.status}`; } return error; @@ -45,21 +39,28 @@ client.interceptors.response.use( ); export function setAuthorizationToken(token) { + client.defaults.withCredentials = true; if (token) { - client.defaults.withCredentials = true; localStorage.setItem(AUTH_KEY, true); } else { - client.defaults.withCredentials = false; localStorage.clear(); } } -const checkResponseError = (res) => { - if (res && res.data && res.data.error) { - console.error(res.data.error); - throw new Error(res.data.error.message); +const checkResponseError = res => { + if(!res) return; + + if (res.data && res.data.error) { + console.error(res.data.error); + throw new Error(res.data.error.message); } -} + + if(res.isAxiosError && res.message) { + console.error(res.message); + //toastr.error(res.message); + throw new Error(res.message); + } +}; /** * @description wrapper for making ajax requests @@ -68,13 +69,15 @@ const checkResponseError = (res) => { export const request = function(options) { const onSuccess = function(response) { checkResponseError(response); - return response.data - ? response.data.hasOwnProperty("total") - ? { total: +response.data.total, items: response.data.response } - : response.data.response - : null; - }; + + if(!response || !response.data || response.isAxiosError) + return null; + if(response.data.hasOwnProperty("total")) + return { total: +response.data.total, items: response.data.response }; + + return response.data.response; + }; const onError = function(error) { console.error("Request Failed:", error.config); if (error.response) { diff --git a/web/ASC.Web.Common/src/store/services/api/index.js b/web/ASC.Web.Common/src/store/services/api/index.js index 14cf03cbe5..f2eb7475ef 100644 --- a/web/ASC.Web.Common/src/store/services/api/index.js +++ b/web/ASC.Web.Common/src/store/services/api/index.js @@ -1,4 +1,7 @@ import Filter from "./people/filter"; -import * as People from './people'; +import * as people from './people'; +import * as user from './user'; +import * as settings from './settings'; +import * as modules from './modules'; -export default { Filter, People }; \ No newline at end of file +export default { Filter, people, user, settings, modules }; \ No newline at end of file diff --git a/web/ASC.Web.Common/src/store/services/api/modules/index.js b/web/ASC.Web.Common/src/store/services/api/modules/index.js new file mode 100644 index 0000000000..bde50df878 --- /dev/null +++ b/web/ASC.Web.Common/src/store/services/api/modules/index.js @@ -0,0 +1,21 @@ +import { request } from "../client"; +import axios from "axios"; + +export function getModulesList() { + return request({ + method: "get", + url: "/modules" + }).then(modules => { + return ( + modules && + axios.all( + modules.map(m => + request({ + method: "get", + url: `${window.location.origin}/${m}` + }) + ) + ) + ); + }); +} diff --git a/web/ASC.Web.Common/src/store/services/api/people/index.js b/web/ASC.Web.Common/src/store/services/api/people/index.js index 444c8f9738..bea5d7b4a4 100644 --- a/web/ASC.Web.Common/src/store/services/api/people/index.js +++ b/web/ASC.Web.Common/src/store/services/api/people/index.js @@ -13,4 +13,115 @@ export function getUserList(filter = Filter.getDefault()) { method: "get", url: `/people${params}` }); + } + + export function getUser(userId="") { + return request({ + method: "get", + url: `/people/${userId || '@self.json'}` + }); + } + + export function createUser(data, key) { + return request({ + method: "post", + url: "/people", + data: data, + headers: { confirm: key } + }); + } + + export function changePassword(userId, password, key) { + const data = { password }; + + return request({ + method: "put", + url: `/people/${userId}/password`, + data, + headers: { confirm: key } + }); + } + + export function changeEmail(userId, email, key) { + const data = { email }; + + return request({ + method: "put", + url: `/people/${userId}/password`, + data, + headers: { confirm: key } + }); + } + export function updateActivationStatus(activationStatus, userId, key) { + return request({ + method: "put", + url: `/people/activationstatus/${activationStatus}.json`, + data: { userIds: [userId] }, + headers: { confirm: key } + }); + } + + export function updateUser(data) { + return request({ + method: "put", + url: `/people/${data.id}`, + data + }); + } + + export function deleteSelf(key) { + return request({ + method: "delete", + url: "/people/@self", + headers: { confirm: key } + }); + } + + export function sendInstructionsToChangePassword(email) { + return request({ + method: "post", + url: "/people/password.json", + data: { email } + }); + } + + export function getListAdmins(filter = Filter.getDefault()) { + const filterParams = filter.toUrlParams(); + const params = + "fields=id,displayName,groups,name,avatar,avatarSmall,isOwner,isAdmin,profileUrl,listAdminModules"; + return request({ + method: "get", + url: `/people/filter.json?${filterParams}&${params}` + }); + } + + export function getAdmins(isParams) { + let params = "&fields"; + if (isParams) { + params = + "fields=id,displayName,groups,name,avatar,avatarSmall,isOwner,isAdmin,profileUrl,listAdminModules"; + } + return request({ + method: "get", + url: `/people/filter.json?isadministrator=true&${params}` + }); + } + + export function changeProductAdmin(userId, productId, administrator) { + return request({ + method: "put", + url: "/settings/security/administrator", + data: { + productId, + userId, + administrator + } + }); + } + + export function getUserById(userId) { + return request({ + method: "get", + url: `/people/${userId}` + }); } \ No newline at end of file diff --git a/web/ASC.Web.Common/src/store/services/api/settings/index.js b/web/ASC.Web.Common/src/store/services/api/settings/index.js new file mode 100644 index 0000000000..24a3f6bb41 --- /dev/null +++ b/web/ASC.Web.Common/src/store/services/api/settings/index.js @@ -0,0 +1,72 @@ +import { request } from "../client"; + +export function getSettings() { + return request({ + method: "get", + url: "/settings.json" + }); + } + + export function getPortalCultures() { + return request({ + method: "get", + url: "/settings/cultures.json" + }); + } + + export function getPortalPasswordSettings() { + return request({ + method: "get", + url: "/settings/security/password" + }); + } + + export function getPortalTimezones() { + return request({ + method: "get", + url: "/settings/timezones.json" + }); + } + + export function setLanguageAndTime(lng, timeZoneID) { + return request({ + method: "put", + url: "/settings/timeandlanguage.json", + data: { lng, timeZoneID } + }); + } + + export function setGreetingSettings(title) { + return request({ + method: "post", + url: `/settings/greetingsettings.json`, + data: { title } + }); + } + + export function restoreGreetingSettings() { + return request({ + method: "post", + url: `/settings/greetingsettings/restore.json` + }); + } + + export function getLogoText() { + return request({ + method: "get", + url: `/settings/whitelabel/logotext.json` + }); + } + export function getLogoSizes() { + return request({ + method: "get", + url: `/settings/whitelabel/sizes.json` + }); + } + + export function getLogoUrls() { + return request({ + method: "get", + url: `/settings/whitelabel/logos.json` + }); + } \ No newline at end of file diff --git a/web/ASC.Web.Common/src/store/services/api/user/index.js b/web/ASC.Web.Common/src/store/services/api/user/index.js new file mode 100644 index 0000000000..616be75267 --- /dev/null +++ b/web/ASC.Web.Common/src/store/services/api/user/index.js @@ -0,0 +1,36 @@ + +import { request, setAuthorizationToken } from "../client"; + +export function login(userName, password) { + const data = { + userName, + password + }; + + return request({ + method: "post", + url: "/authentication.json", + data + }).then(tokenData => { + setAuthorizationToken(true); + return Promise.resolve(tokenData); + }); +} + +export function logout() { + return request({ + method: "post", + url: "/authentication/logout" + }).then(() => { + setAuthorizationToken(); + return Promise.resolve(); + }); +} + +export function checkConfirmLink(data) { + return request({ + method: "post", + url: "/authentication/confirm.json", + data + }); +} \ No newline at end of file From 2d47d639dd8585894f698174f05c4930811abed4 Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Fri, 15 Nov 2019 12:38:31 +0300 Subject: [PATCH 05/55] web: People: Replaced auth store to ASC.Web.Common realization --- .../src/components/Article/Header/index.js | 3 +- .../components/Article/MainButton/index.js | 3 +- .../Client/src/components/Layout/index.js | 4 +-- .../pages/Home/Section/Body/index.js | 4 ++- .../pages/Home/Section/Filter/index.js | 3 +- .../pages/Home/Section/Header/index.js | 3 +- .../pages/Profile/Section/Body/index.js | 5 ++-- .../pages/Profile/Section/Header/index.js | 3 +- .../Client/src/helpers/privateRoute.js | 3 +- products/ASC.People/Client/src/index.js | 29 ++++++++++++++++--- .../Client/src/store/people/selectors.js | 3 +- .../Client/src/store/profile/actions.js | 6 ++-- .../Client/src/store/rootReducer.js | 3 +- .../src/components/Layout/index.js | 2 -- .../Confirm/sub-components/changePhone.js | 2 -- .../src/components/pages/Login/index.js | 1 - web/ASC.Web.Client/src/index.js | 8 +++-- web/ASC.Web.Client/src/store/rootReducer.js | 1 - web/ASC.Web.Common/src/store/auth/actions.js | 11 +++++-- web/ASC.Web.Common/src/store/auth/reducer.js | 6 +++- 20 files changed, 72 insertions(+), 31 deletions(-) diff --git a/products/ASC.People/Client/src/components/Article/Header/index.js b/products/ASC.People/Client/src/components/Article/Header/index.js index 7e6fde5625..197f034df0 100644 --- a/products/ASC.People/Client/src/components/Article/Header/index.js +++ b/products/ASC.People/Client/src/components/Article/Header/index.js @@ -1,7 +1,8 @@ import React from 'react'; import { connect } from 'react-redux'; import { Text } from 'asc-web-components'; -import { getCurrentModule } from '../../../store/auth/selectors'; +import { store } from 'asc-web-common'; +const { getCurrentModule } = store.auth.selectors; const ArticleHeaderContent = ({currentModuleName}) => { return {currentModuleName}; diff --git a/products/ASC.People/Client/src/components/Article/MainButton/index.js b/products/ASC.People/Client/src/components/Article/MainButton/index.js index 919e01a18d..58899259a1 100644 --- a/products/ASC.People/Client/src/components/Article/MainButton/index.js +++ b/products/ASC.People/Client/src/components/Article/MainButton/index.js @@ -8,10 +8,11 @@ import { toastr } from "asc-web-components"; import InviteDialog from './../../dialogs/Invite'; -import { isAdmin } from '../../../store/auth/selectors'; import { withTranslation, I18nextProvider } from 'react-i18next'; import i18n from '../i18n'; import { typeUser, typeGuest, department } from './../../../helpers/customNames'; +import { store } from 'asc-web-common'; +const { isAdmin } = store.auth.selectors; class PureArticleMainButtonContent extends React.Component { constructor(props) { diff --git a/products/ASC.People/Client/src/components/Layout/index.js b/products/ASC.People/Client/src/components/Layout/index.js index 7410ddf3f1..780c29b824 100644 --- a/products/ASC.People/Client/src/components/Layout/index.js +++ b/products/ASC.People/Client/src/components/Layout/index.js @@ -3,10 +3,10 @@ import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import { withRouter } from "react-router"; import { Layout, Toast } from 'asc-web-components'; -import { logout } from '../../store/auth/actions'; import { withTranslation, I18nextProvider } from 'react-i18next'; import i18n from "./i18n"; -//import { isAdmin } from "../../store/auth/selectors"; +import { store } from 'asc-web-common'; +const { logout } = store.auth.actions; class PurePeopleLayout extends React.Component { shouldComponentUpdate(nextProps) { diff --git a/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js b/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js index 7e73448d3d..d617afeddb 100644 --- a/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js +++ b/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js @@ -30,7 +30,6 @@ import { getUserStatus, getUserRole } from "../../../../../store/people/selectors"; -import { isAdmin, isMe } from "../../../../../store/auth/selectors"; import { EmployeeStatus } from "../../../../../helpers/constants"; import { resendUserInvites, @@ -39,6 +38,9 @@ import { deleteUser } from "../../../../../store/services/api"; import { isMobileOnly } from "react-device-detect"; +import { store } from 'asc-web-common'; +const { isAdmin, isMe } = store.auth.selectors; + class SectionBodyContent extends React.PureComponent { constructor(props) { diff --git a/products/ASC.People/Client/src/components/pages/Home/Section/Filter/index.js b/products/ASC.People/Client/src/components/pages/Home/Section/Filter/index.js index 1d14adfc96..f44ff68aeb 100644 --- a/products/ASC.People/Client/src/components/pages/Home/Section/Filter/index.js +++ b/products/ASC.People/Client/src/components/pages/Home/Section/Filter/index.js @@ -4,7 +4,6 @@ import { FilterInput } from "asc-web-components"; import { fetchPeople } from "../../../../../store/people/actions"; import find from "lodash/find"; import result from "lodash/result"; -import { isAdmin } from "../../../../../store/auth/selectors"; import { withTranslation } from "react-i18next"; import { typeGuest, @@ -13,6 +12,8 @@ import { } from "./../../../../../helpers/customNames"; import { withRouter } from "react-router"; import { getFilterByLocation } from "../../../../../helpers/converters"; +import { store } from 'asc-web-common'; +const { isAdmin } = store.auth.selectors; const getEmployeeStatus = filterValues => { const employeeStatus = result( diff --git a/products/ASC.People/Client/src/components/pages/Home/Section/Header/index.js b/products/ASC.People/Client/src/components/pages/Home/Section/Header/index.js index 306329fbb0..1fe57a6c49 100644 --- a/products/ASC.People/Client/src/components/pages/Home/Section/Header/index.js +++ b/products/ASC.People/Client/src/components/pages/Home/Section/Header/index.js @@ -14,7 +14,6 @@ import { getSelectedGroup, getSelectionIds } from "../../../../../store/people/selectors"; -import { isAdmin } from "../../../../../store/auth/selectors"; import { withTranslation } from "react-i18next"; import { updateUserStatus, @@ -31,6 +30,8 @@ import { deleteUsers } from "../../../../../store/services/api"; import { deleteGroup } from "../../../../../store/group/actions"; +import { store } from 'asc-web-common'; +const { isAdmin } = store.auth.selectors; const StyledContainer = styled.div` .group-button-menu-container { diff --git a/products/ASC.People/Client/src/components/pages/Profile/Section/Body/index.js b/products/ASC.People/Client/src/components/pages/Profile/Section/Body/index.js index 391c0f9689..2a2be4a619 100644 --- a/products/ASC.People/Client/src/components/pages/Profile/Section/Body/index.js +++ b/products/ASC.People/Client/src/components/pages/Profile/Section/Body/index.js @@ -11,9 +11,10 @@ import { import { connect } from "react-redux"; import styled from 'styled-components'; import { getUserRole, getUserContacts } from "../../../../../store/people/selectors"; -import { isAdmin, isMe } from "../../../../../store/auth/selectors"; import { updateProfileCulture } from "../../../../../store/profile/actions"; -import ProfileInfo from "./ProfileInfo/ProfileInfo" +import ProfileInfo from "./ProfileInfo/ProfileInfo"; +import { store } from 'asc-web-common'; +const { isAdmin, isMe } = store.auth.selectors; const ProfileWrapper = styled.div` display: flex; diff --git a/products/ASC.People/Client/src/components/pages/Profile/Section/Header/index.js b/products/ASC.People/Client/src/components/pages/Profile/Section/Header/index.js index e2656dae8b..5b99f799ed 100644 --- a/products/ASC.People/Client/src/components/pages/Profile/Section/Header/index.js +++ b/products/ASC.People/Client/src/components/pages/Profile/Section/Header/index.js @@ -13,7 +13,6 @@ import { AvatarEditor } from "asc-web-components"; import { withRouter } from "react-router"; -import { isAdmin, isMe } from "../../../../../store/auth/selectors"; import { getUserStatus, toEmployeeWrapper } from "../../../../../store/people/selectors"; import { withTranslation } from 'react-i18next'; import { resendUserInvites } from "../../../../../store/services/api"; @@ -30,6 +29,8 @@ import { deleteUser } from "../../../../../store/services/api"; import styled from 'styled-components'; +import { store } from 'asc-web-common'; +const { isAdmin, isMe } = store.auth.selectors; const wrapperStyle = { display: "flex", diff --git a/products/ASC.People/Client/src/helpers/privateRoute.js b/products/ASC.People/Client/src/helpers/privateRoute.js index 05b55254e0..6af8450e49 100644 --- a/products/ASC.People/Client/src/helpers/privateRoute.js +++ b/products/ASC.People/Client/src/helpers/privateRoute.js @@ -4,8 +4,9 @@ import PropTypes from "prop-types"; import { Route } from "react-router-dom"; import ExternalRedirect from '../helpers/externalRedirect'; import { PageLayout, Loader } from "asc-web-components"; -import { isAdmin, isMe } from "../store/auth/selectors"; import { Error404 } from "../components/pages/Error"; +import { store } from 'asc-web-common'; +const { isAdmin, isMe } = store.auth.selectors; const PrivateRoute = ({ component: Component, ...rest }) => { const { isAuthenticated, isLoaded, isAdmin, restricted, allowForMe, currentUser, computedMatch } = rest; diff --git a/products/ASC.People/Client/src/index.js b/products/ASC.People/Client/src/index.js index 9ef6a572b4..1e18f48de5 100644 --- a/products/ASC.People/Client/src/index.js +++ b/products/ASC.People/Client/src/index.js @@ -3,20 +3,41 @@ import ReactDOM from "react-dom"; import { Provider } from "react-redux"; import { AUTH_KEY } from "./helpers/constants"; import store from "./store/store"; +import { fetchGroups, fetchPeople } from "./store/people/actions"; +import config from "../package.json"; import "./custom.scss"; import App from "./App"; import * as serviceWorker from "./serviceWorker"; -import { setIsLoaded, getUserInfo } from "./store/auth/actions"; +import { store as commonStore } from "asc-web-common"; +import { getFilterByLocation } from "./helpers/converters"; +const { setIsLoaded, getUserInfo, setCurrentProductId, setCurrentProductHomePage } = commonStore.auth.actions; const token = localStorage.getItem(AUTH_KEY); if (token) { - store.dispatch(getUserInfo); + getUserInfo(store.dispatch) + .then(() => fetchGroups(store.dispatch)) + .then(() => { + var re = new RegExp(`${config.homepage}((/?)$|/filter)`, "gm"); + const match = window.location.pathname.match(re); + + if (match && match.length > 0) { + const newFilter = getFilterByLocation(window.location); + return fetchPeople(newFilter, store.dispatch); + } + + return Promise.resolve(); + }) + .then(() => { + store.dispatch(setCurrentProductHomePage(config.homepage)); + store.dispatch(setCurrentProductId("f4d98afd-d336-4332-8778-3c6945c81ea0")); + store.dispatch(setIsLoaded(true)); + }); } -else { +else { store.dispatch(setIsLoaded(true)); -} +}; ReactDOM.render( diff --git a/products/ASC.People/Client/src/store/people/selectors.js b/products/ASC.People/Client/src/store/people/selectors.js index 8988fbb463..a6582650ea 100644 --- a/products/ASC.People/Client/src/store/people/selectors.js +++ b/products/ASC.People/Client/src/store/people/selectors.js @@ -1,6 +1,7 @@ import { find, filter, cloneDeep } from "lodash"; import { EmployeeActivationStatus, EmployeeStatus } from "../../helpers/constants"; -import { isAdmin } from "../auth/selectors"; +import { store } from 'asc-web-common'; +const { isAdmin } = store.auth.selectors; export function getSelectedUser(selection, userId) { return find(selection, function (obj) { diff --git a/products/ASC.People/Client/src/store/profile/actions.js b/products/ASC.People/Client/src/store/profile/actions.js index ecc0a2f4a8..334fae109e 100644 --- a/products/ASC.People/Client/src/store/profile/actions.js +++ b/products/ASC.People/Client/src/store/profile/actions.js @@ -1,8 +1,10 @@ import * as api from "../../store/services/api"; -import { isMe } from '../auth/selectors'; import { getUserByUserName } from '../people/selectors'; import { fetchPeople } from "../people/actions"; -import { setCurrentUser } from "../auth/actions"; +import { store } from 'asc-web-common'; +const { setCurrentUser } = store.auth.actions; +const { isMe } = store.auth.selectors; + export const SET_PROFILE = 'SET_PROFILE'; export const CLEAN_PROFILE = 'CLEAN_PROFILE'; diff --git a/products/ASC.People/Client/src/store/rootReducer.js b/products/ASC.People/Client/src/store/rootReducer.js index 62f79c16c7..e758aea006 100644 --- a/products/ASC.People/Client/src/store/rootReducer.js +++ b/products/ASC.People/Client/src/store/rootReducer.js @@ -1,8 +1,9 @@ import { combineReducers } from 'redux'; -import authReducer from './auth/reducers'; import peopleReducer from './people/reducers'; import profileReducer from './profile/reducers'; import groupReducer from './group/reducers'; +import { store } from 'asc-web-common'; +const { reducer: authReducer } = store.auth; const rootReducer = combineReducers({ auth: authReducer, diff --git a/web/ASC.Web.Client/src/components/Layout/index.js b/web/ASC.Web.Client/src/components/Layout/index.js index 3d71e54a29..e7b38e23b7 100644 --- a/web/ASC.Web.Client/src/components/Layout/index.js +++ b/web/ASC.Web.Client/src/components/Layout/index.js @@ -9,8 +9,6 @@ import isEqual from "lodash/isEqual"; import { store } from 'asc-web-common'; const { logout } = store.auth.actions; -//import { isAdmin } from "../../store/auth/selectors"; - class PureStudioLayout extends React.Component { shouldComponentUpdate(nextProps, nextState) { return !isEqual(this.props, nextProps) || !isEqual(this.state, nextState); diff --git a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/changePhone.js b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/changePhone.js index 57713e77cd..ed10674fb7 100644 --- a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/changePhone.js +++ b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/changePhone.js @@ -4,8 +4,6 @@ import { connect } from 'react-redux'; import { withTranslation } from 'react-i18next'; import styled from "styled-components"; import { Button, TextInput, PageLayout, Text } from "asc-web-components"; -//import { useTranslation } from "react-i18next"; -//import { login } from '../../../../../src/store/auth/actions'; const BodyStyle = styled.div` margin: 70px auto 0 auto; diff --git a/web/ASC.Web.Client/src/components/pages/Login/index.js b/web/ASC.Web.Client/src/components/pages/Login/index.js index 23990822e8..9635a3cbbe 100644 --- a/web/ASC.Web.Client/src/components/pages/Login/index.js +++ b/web/ASC.Web.Client/src/components/pages/Login/index.js @@ -21,7 +21,6 @@ import { HelpButton } from "asc-web-components"; import { connect } from "react-redux"; -//import { login } from "../../../store/auth/actions"; import styled from "styled-components"; import { useTranslation } from "react-i18next"; import i18n from "./i18n"; diff --git a/web/ASC.Web.Client/src/index.js b/web/ASC.Web.Client/src/index.js index 43e2a167a9..8f59cf654f 100644 --- a/web/ASC.Web.Client/src/index.js +++ b/web/ASC.Web.Client/src/index.js @@ -7,15 +7,17 @@ import './custom.scss'; import App from './App'; import * as serviceWorker from './serviceWorker'; import { store as commonStore } from 'asc-web-common'; -const { getUserInfo, getPortalSettings } = commonStore.auth.actions; +const { getUserInfo, getPortalSettings, setIsLoaded } = commonStore.auth.actions; const token = localStorage.getItem(AUTH_KEY); if(!token) { - store.dispatch(getPortalSettings); + getPortalSettings(store.dispatch) + .then(() => store.dispatch(setIsLoaded(true))); } else if (!window.location.pathname.includes("confirm/EmailActivation")) { - store.dispatch(getUserInfo); + getUserInfo(store.dispatch) + .then(() => store.dispatch(setIsLoaded(true))); } ReactDOM.render( diff --git a/web/ASC.Web.Client/src/store/rootReducer.js b/web/ASC.Web.Client/src/store/rootReducer.js index 74a1165ea4..92ec12352e 100644 --- a/web/ASC.Web.Client/src/store/rootReducer.js +++ b/web/ASC.Web.Client/src/store/rootReducer.js @@ -1,5 +1,4 @@ import { combineReducers } from 'redux'; -//import authReducer from './auth/reducer'; import settingsReducer from './settings/reducer'; import { store } from 'asc-web-common'; const { reducer: authReducer } = store.auth; diff --git a/web/ASC.Web.Common/src/store/auth/actions.js b/web/ASC.Web.Common/src/store/auth/actions.js index 0e65dd3b3f..1b71c1717b 100644 --- a/web/ASC.Web.Common/src/store/auth/actions.js +++ b/web/ASC.Web.Common/src/store/auth/actions.js @@ -13,6 +13,7 @@ export const GET_PORTAL_CULTURES = 'GET_PORTAL_CULTURES'; export const SET_PORTAL_LANGUAGE_AND_TIME = 'SET_PORTAL_LANGUAGE_AND_TIME'; export const GET_TIMEZONES = 'GET_TIMEZONES'; export const SET_CURRENT_PRODUCT_ID = 'SET_CURRENT_PRODUCT_ID'; +export const SET_CURRENT_PRODUCT_HOME_PAGE = 'SET_CURRENT_PRODUCT_HOME_PAGE'; export const SET_GREETING_SETTINGS = "SET_GREETING_SETTINGS"; export function setCurrentUser(user) { @@ -98,6 +99,13 @@ export function setCurrentProductId(currentProductId) { }; } +export function setCurrentProductHomePage(homepage) { + return { + type: SET_CURRENT_PRODUCT_HOME_PAGE, + homepage + }; +} + export function setGreetingSettings(title) { return { type: SET_GREETING_SETTINGS, @@ -122,8 +130,7 @@ export function getModules(dispatch) { const loadInitInfo = (dispatch) => { return getPortalSettings(dispatch) - .then(() => getModules(dispatch)) - .then(() => dispatch(setIsLoaded(true))); + .then(() => getModules(dispatch)); } export function getUserInfo(dispatch) { diff --git a/web/ASC.Web.Common/src/store/auth/reducer.js b/web/ASC.Web.Common/src/store/auth/reducer.js index 4ca6ee5bf4..fc8a3e6125 100644 --- a/web/ASC.Web.Common/src/store/auth/reducer.js +++ b/web/ASC.Web.Common/src/store/auth/reducer.js @@ -1,6 +1,6 @@ import { SET_CURRENT_USER, SET_MODULES, SET_SETTINGS, SET_IS_LOADED, LOGOUT, SET_PASSWORD_SETTINGS, SET_IS_CONFIRM_LOADED, SET_NEW_EMAIL, - GET_PORTAL_CULTURES, SET_PORTAL_LANGUAGE_AND_TIME, GET_TIMEZONES, SET_CURRENT_PRODUCT_ID, SET_GREETING_SETTINGS + GET_PORTAL_CULTURES, SET_PORTAL_LANGUAGE_AND_TIME, GET_TIMEZONES, SET_CURRENT_PRODUCT_ID, SET_CURRENT_PRODUCT_HOME_PAGE, SET_GREETING_SETTINGS } from './actions'; import isEmpty from "lodash/isEmpty"; @@ -80,6 +80,10 @@ const authReducer = (state = initialState, action) => { return Object.assign({}, state, { settings: { ...state.settings, currentProductId: action.currentProductId } }); + case SET_CURRENT_PRODUCT_HOME_PAGE: + return Object.assign({}, state, { + settings: { ...state.settings, homepage: action.homepage } + }); case SET_GREETING_SETTINGS: return Object.assign({}, state, { settings: { ...state.settings, greetingSettings: action.title } From a75d6e7ecc67c3c38599c02e2bc4846bf5de47e7 Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Fri, 15 Nov 2019 16:29:49 +0300 Subject: [PATCH 06/55] web: Removed auth folder from store (after change to asc-web-common variant) --- .../Client/src/store/auth/actions.js | 79 ------ .../Client/src/store/auth/reducers.js | 59 ---- .../Client/src/store/auth/selectors.js | 12 - web/ASC.Web.Client/src/store/auth/actions.js | 255 ------------------ web/ASC.Web.Client/src/store/auth/reducer.js | 99 ------- .../src/store/auth/selectors.js | 3 - 6 files changed, 507 deletions(-) delete mode 100644 products/ASC.People/Client/src/store/auth/actions.js delete mode 100644 products/ASC.People/Client/src/store/auth/reducers.js delete mode 100644 products/ASC.People/Client/src/store/auth/selectors.js delete mode 100644 web/ASC.Web.Client/src/store/auth/actions.js delete mode 100644 web/ASC.Web.Client/src/store/auth/reducer.js delete mode 100644 web/ASC.Web.Client/src/store/auth/selectors.js diff --git a/products/ASC.People/Client/src/store/auth/actions.js b/products/ASC.People/Client/src/store/auth/actions.js deleted file mode 100644 index b2e916d5bb..0000000000 --- a/products/ASC.People/Client/src/store/auth/actions.js +++ /dev/null @@ -1,79 +0,0 @@ -import * as api from "../services/api"; -import { fetchGroups, fetchPeople } from "../people/actions"; -import { setAuthorizationToken } from "../../store/services/client"; -import { getFilterByLocation } from "../../helpers/converters"; -import config from "../../../package.json"; - -export const LOGIN_POST = "LOGIN_POST"; -export const SET_CURRENT_USER = "SET_CURRENT_USER"; -export const SET_MODULES = "SET_MODULES"; -export const SET_SETTINGS = "SET_SETTINGS"; -export const SET_IS_LOADED = "SET_IS_LOADED"; -export const LOGOUT = "LOGOUT"; - -export function setCurrentUser(user) { - return { - type: SET_CURRENT_USER, - user - }; -} - -export function setModules(modules) { - return { - type: SET_MODULES, - modules - }; -} - -export function setSettings(settings) { - return { - type: SET_SETTINGS, - settings - }; -} - -export function setIsLoaded(isLoaded) { - return { - type: SET_IS_LOADED, - isLoaded - }; -} - -export function setLogout() { - return { - type: LOGOUT - }; -} - -export async function getUserInfo(dispatch) { - const { user, modules, settings } = await api.getInitInfo(); - let newSettings = settings; - if (user.isAdmin) { - const inviteLinks = await api.getInvitationLinks(); - newSettings = Object.assign(newSettings, inviteLinks); - } - - dispatch(setCurrentUser(user)); - dispatch(setModules(modules)); - dispatch(setSettings(newSettings)); - - await fetchGroups(dispatch); - - var re = new RegExp(`${config.homepage}((/?)$|/filter)`, "gm"); - const match = window.location.pathname.match(re); - - if (match && match.length > 0) - { - const newFilter = getFilterByLocation(window.location); - await fetchPeople(newFilter, dispatch); - } - - return dispatch(setIsLoaded(true)); -} - -export function logout() { - return dispatch => { - return api.logout() - .then(() => dispatch(setLogout())); - } -}; diff --git a/products/ASC.People/Client/src/store/auth/reducers.js b/products/ASC.People/Client/src/store/auth/reducers.js deleted file mode 100644 index 2ef1c3cda1..0000000000 --- a/products/ASC.People/Client/src/store/auth/reducers.js +++ /dev/null @@ -1,59 +0,0 @@ -import { SET_CURRENT_USER, SET_MODULES, SET_IS_LOADED, LOGOUT, SET_SETTINGS } from './actions'; -import isEmpty from 'lodash/isEmpty'; -import config from "../../../package.json"; - -const initialState = { - isAuthenticated: false, - isLoaded: false, - user: {}, - modules: [], - settings: { - currentProductId: "f4d98afd-d336-4332-8778-3c6945c81ea0", - culture: "en-US", - trustedDomains: [], - trustedDomainsType: 1, - timezone: "UTC", - utcOffset: "00:00:00", - utcHoursOffset: 0, - homepage: config.homepage, - datePattern: "M/d/yyyy", - datePatternJQ: "00/00/0000", - dateTimePattern: "dddd, MMMM d, yyyy h:mm:ss tt", - datepicker: { - datePattern: "mm/dd/yy", - dateTimePattern: "DD, mm dd, yy h:mm:ss tt", - timePattern: "h:mm tt" - }, - hasShortenService: false - } -}; - -const authReducer = (state = initialState, action) => { - switch (action.type) { - case SET_CURRENT_USER: - return Object.assign({}, state, { - isAuthenticated: !isEmpty(action.user), - user: action.user - }); - case SET_MODULES: - return Object.assign({}, state, { - modules: action.modules - }); - case SET_SETTINGS: - return Object.assign({}, state, { - settings: { ...state.settings, ...action.settings } - }); - case SET_IS_LOADED: - return Object.assign({}, state, { - isLoaded: action.isLoaded - }); - case LOGOUT: - return Object.assign({}, initialState, { - isLoaded: true - }); - default: - return state; - } -} - -export default authReducer; \ No newline at end of file diff --git a/products/ASC.People/Client/src/store/auth/selectors.js b/products/ASC.People/Client/src/store/auth/selectors.js deleted file mode 100644 index 9f4e6a58bb..0000000000 --- a/products/ASC.People/Client/src/store/auth/selectors.js +++ /dev/null @@ -1,12 +0,0 @@ -export function isAdmin(user) { - let isPeopleAdmin = user.listAdminModules ? user.listAdminModules.includes('people') : false; - return user.isAdmin || user.isOwner || isPeopleAdmin; -}; - -export function isMe(user, userName) { - return userName === "@self" || userName === user.userName; -}; - -export function getCurrentModule(modules, currentModuleId) { - return modules.find(module => module.id === currentModuleId); -} \ No newline at end of file diff --git a/web/ASC.Web.Client/src/store/auth/actions.js b/web/ASC.Web.Client/src/store/auth/actions.js deleted file mode 100644 index da836af23e..0000000000 --- a/web/ASC.Web.Client/src/store/auth/actions.js +++ /dev/null @@ -1,255 +0,0 @@ -import * as api from '../services/api'; -import { setAuthorizationToken } from '../services/client'; - -export const LOGIN_POST = 'LOGIN_POST'; -export const SET_CURRENT_USER = 'SET_CURRENT_USER'; -export const SET_MODULES = 'SET_MODULES'; -export const SET_SETTINGS = 'SET_SETTINGS'; -export const SET_IS_LOADED = 'SET_IS_LOADED'; -export const LOGOUT = 'LOGOUT'; -export const SET_PASSWORD_SETTINGS = 'SET_PASSWORD_SETTINGS'; -export const SET_IS_CONFIRM_LOADED = 'SET_IS_CONFIRM_LOADED'; -export const SET_NEW_EMAIL = 'SET_NEW_EMAIL'; -export const GET_PORTAL_CULTURES = 'GET_PORTAL_CULTURES'; -export const SET_PORTAL_LANGUAGE_AND_TIME = 'SET_PORTAL_LANGUAGE_AND_TIME'; -export const GET_TIMEZONES = 'GET_TIMEZONES'; -export const SET_CURRENT_PRODUCT_ID = 'SET_CURRENT_PRODUCT_ID'; -export const SET_GREETING_SETTINGS = "SET_GREETING_SETTINGS"; - -export function setCurrentUser(user) { - return { - type: SET_CURRENT_USER, - user - }; -}; - -export function setModules(modules) { - return { - type: SET_MODULES, - modules - }; -}; - -export function setSettings(settings) { - return { - type: SET_SETTINGS, - settings - }; -}; - -export function setIsLoaded(isLoaded) { - return { - type: SET_IS_LOADED, - isLoaded - }; -}; - -export function setIsConfirmLoaded(isConfirmLoaded) { - return { - type: SET_IS_CONFIRM_LOADED, - isConfirmLoaded - }; -}; - -export function setLogout() { - return { - type: LOGOUT - }; -}; - -export function setPasswordSettings(passwordSettings) { - return { - type: SET_PASSWORD_SETTINGS, - passwordSettings - }; -}; - -export function setNewEmail(email) { - return { - type: SET_NEW_EMAIL, - email - }; -}; - -export function getPortalCultures(cultures) { - return { - type: GET_PORTAL_CULTURES, - cultures - }; -}; - -export function setPortalLanguageAndTime(newSettings) { - return { - type: SET_PORTAL_LANGUAGE_AND_TIME, - newSettings - }; -}; - -export function getTimezones(timezones) { - return { - type: GET_TIMEZONES, - timezones - }; -}; - -export function setCurrentProductId(currentProductId) { - return { - type: SET_CURRENT_PRODUCT_ID, - currentProductId - }; -}; - -export function setGreetingSettings(title) { - return { - type: SET_GREETING_SETTINGS, - title - }; -}; - -export function getUser(dispatch) { - return api.getUser() - .then(user => dispatch(setCurrentUser(user))); -} - -export function getPortalSettings(dispatch) { - return api.getSettings() - .then(settings => dispatch(setSettings(settings))); -} - -export function getModules(dispatch) { - return api.getModulesList() - .then(modules => dispatch(setModules(modules))); -} - -const loadInitInfo = (dispatch) => { - return getPortalSettings(dispatch) - .then(getModules.bind(this, dispatch)) - .then(() => dispatch(setIsLoaded(true))); -} - -export function getUserInfo(dispatch) { - return getUser(dispatch) - .then(loadInitInfo.bind(this, dispatch)); -}; - -export function login(user, pass) { - return dispatch => { - return api.login(user, pass) - .then(() => getUserInfo(dispatch)); - } -}; - - -export function logout() { - return dispatch => { - return api.logout() - .then(() => dispatch(setLogout())); - } -}; - -export function getConfirmationInfo(token, type) { - return dispatch => { - return api.getPasswordSettings(token) - .then((settings) => dispatch(setPasswordSettings(settings))) - .then(() => dispatch(setIsConfirmLoaded(true))); - } -}; - -export function createConfirmUser(registerData, loginData, key) { - const data = Object.assign({}, registerData, loginData); - return (dispatch) => { - return api.createUser(data, key) - .then(user => dispatch(setCurrentUser(user))) - .then(() => api.login(loginData.userName, loginData.password)) - .then(loadInitInfo.bind(this, dispatch)); - }; -}; - -export function changePassword(userId, password, key) { - return () => api.changePassword(userId, password, key) -} - -export function changeEmail(userId, email, key) { - return dispatch => { - return api.changeEmail(userId, email, key) - .then(user => dispatch(setNewEmail(user.email))); - } -} - -export function activateConfirmUser(personalData, loginData, key, userId, activationStatus) { - const changedData = { - id: userId, - FirstName: personalData.firstname, - LastName: personalData.lastname - } - - return dispatch => { - return api.changePassword(userId, loginData.password, key) - .then(data => { - console.log('set password success:', data); - return api.updateActivationStatus(activationStatus, userId, key); - }) - .then(data => { - console.log("activation success, result:", data); - return dispatch(login(loginData.userName, loginData.password)); - }) - .then(data => { - console.log("log in, result:", data); - return api.updateUser(changedData); - }) - .then(user => dispatch(setCurrentUser(user))); - }; -}; - -export function getCultures() { - return dispatch => { - return api.getPortalCultures() - .then(cultures => { - dispatch(getPortalCultures(cultures)); - } - ); - }; -} - -export function setLanguageAndTime(lng, timeZoneID) { - return dispatch => { - return api.setLanguageAndTime(lng, timeZoneID) - .then(() => dispatch(setPortalLanguageAndTime({ lng, timeZoneID }))); - }; -} - -export function getPortalTimezones() { - return dispatch => { - return api.getPortalTimezones() - .then((timezones) => { - dispatch(getTimezones(timezones)) - }); - }; -}; - - -/* export function getGreetingTitle() { - return dispatch => { - return api.getGreetingSettings() - .then(greetingTitle => dispatch(setGreetingSettings(greetingTitle))); - }; -} */ - -export function setGreetingTitle(greetingTitle) { - return dispatch => { - return api.setGreetingSettings(greetingTitle) - .then((res) => { - dispatch(setGreetingSettings(greetingTitle)) - }); - }; -} - -export function restoreGreetingTitle() { - return dispatch => { - return api.restoreGreetingSettings() - .then((res) => { - dispatch(setGreetingSettings(res.companyName)) - }); - }; -} - diff --git a/web/ASC.Web.Client/src/store/auth/reducer.js b/web/ASC.Web.Client/src/store/auth/reducer.js deleted file mode 100644 index d720fb0a6b..0000000000 --- a/web/ASC.Web.Client/src/store/auth/reducer.js +++ /dev/null @@ -1,99 +0,0 @@ -import { - SET_CURRENT_USER, SET_MODULES, SET_SETTINGS, SET_IS_LOADED, LOGOUT, SET_PASSWORD_SETTINGS, SET_IS_CONFIRM_LOADED, SET_NEW_EMAIL, - GET_PORTAL_CULTURES, SET_PORTAL_LANGUAGE_AND_TIME, GET_TIMEZONES, SET_CURRENT_PRODUCT_ID, SET_GREETING_SETTINGS -} from './actions'; -import isEmpty from 'lodash/isEmpty'; -import config from "../../../package.json"; - - -const initialState = { - isAuthenticated: false, - isLoaded: false, - isConfirmLoaded: false, - user: {}, - modules: [], - settings: { - currentProductId: "home", - culture: "en-US", - cultures: [], - trustedDomains: [], - trustedDomainsType: 1, - timezone: "UTC", - timezones: [], - utcOffset: "00:00:00", - utcHoursOffset: 0, - homepage: config.homepage, - datePattern: "M/d/yyyy", - datePatternJQ: "00/00/0000", - dateTimePattern: "dddd, MMMM d, yyyy h:mm:ss tt", - datepicker: { - datePattern: "mm/dd/yy", - dateTimePattern: "DD, mm dd, yy h:mm:ss tt", - timePattern: "h:mm tt" - }, - greetingSettings: 'Web Office Applications' - }/*, - password: null*/ -} - -const authReducer = (state = initialState, action) => { - switch (action.type) { - case SET_CURRENT_USER: - return Object.assign({}, state, { - isAuthenticated: !isEmpty(action.user), - user: action.user - }); - case SET_MODULES: - return Object.assign({}, state, { - modules: action.modules - }); - case SET_SETTINGS: - return Object.assign({}, state, { - settings: { ...state.settings, ...action.settings } - }); - case GET_PORTAL_CULTURES: - return Object.assign({}, state, { - settings: { ...state.settings, cultures: action.cultures } - }); - case SET_PASSWORD_SETTINGS: - return Object.assign({}, state, { - settings: { ...state.settings, passwordSettings: action.passwordSettings } - }); - case SET_IS_LOADED: - return Object.assign({}, state, { - isLoaded: action.isLoaded - }); - case SET_IS_CONFIRM_LOADED: - return Object.assign({}, state, { - isConfirmLoaded: action.isConfirmLoaded - }); - case SET_NEW_EMAIL: - return Object.assign({}, state, { - user: { ...state.user, email: action.email } - }); - case SET_PORTAL_LANGUAGE_AND_TIME: - return Object.assign({}, state, { - settings: { ...state.settings, culture: action.newSettings.lng, timezone: action.newSettings.timeZoneID } - }); - case GET_TIMEZONES: - return Object.assign({}, state, { - settings: { ...state.settings, timezones: action.timezones } - }); - case SET_CURRENT_PRODUCT_ID: - return Object.assign({}, state, { - settings: { ...state.settings, currentProductId: action.currentProductId } - }); - case SET_GREETING_SETTINGS: - return Object.assign({}, state, { - settings: { ...state.settings, greetingSettings: action.title } - }); - case LOGOUT: - return Object.assign({}, initialState, { - settings: { greetingSettings: state.settings.greetingSettings, culture: state.settings.culture } - }); - default: - return state; - } -} - -export default authReducer; \ No newline at end of file diff --git a/web/ASC.Web.Client/src/store/auth/selectors.js b/web/ASC.Web.Client/src/store/auth/selectors.js deleted file mode 100644 index 850b1f3699..0000000000 --- a/web/ASC.Web.Client/src/store/auth/selectors.js +++ /dev/null @@ -1,3 +0,0 @@ -export function isAdmin(user) { - return user.isAdmin || user.isOwner; -}; From 23e3d28857df9c32b24a96ad3d94ccb11e8805b4 Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Fri, 15 Nov 2019 16:44:54 +0300 Subject: [PATCH 07/55] web: Replaced history to asc-web-common variant --- products/ASC.People/Client/src/App.js | 2 +- .../src/components/pages/Home/Section/Body/userContent.js | 2 +- .../pages/Profile/Section/Body/ProfileInfo/ProfileInfo.js | 2 +- products/ASC.People/Client/src/history.js | 3 --- products/ASC.People/Client/src/store/group/actions.js | 2 +- products/ASC.People/Client/src/store/people/actions.js | 2 +- web/ASC.Web.Client/src/App.js | 2 +- web/ASC.Web.Client/src/history.js | 3 --- web/ASC.Web.Common/src/index.js | 3 ++- 9 files changed, 8 insertions(+), 13 deletions(-) delete mode 100644 products/ASC.People/Client/src/history.js delete mode 100644 web/ASC.Web.Client/src/history.js diff --git a/products/ASC.People/Client/src/App.js b/products/ASC.People/Client/src/App.js index c5c30d219d..699939cf57 100644 --- a/products/ASC.People/Client/src/App.js +++ b/products/ASC.People/Client/src/App.js @@ -10,7 +10,7 @@ import ProfileAction from './components/pages/ProfileAction'; import GroupAction from './components/pages/GroupAction'; import { Error404 } from "./components/pages/Error"; import Reassign from './components/pages/Reassign'; -import history from './history'; +import { history } from "asc-web-common"; /*const Profile = lazy(() => import("./components/pages/Profile")); const ProfileAction = lazy(() => import("./components/pages/ProfileAction")); diff --git a/products/ASC.People/Client/src/components/pages/Home/Section/Body/userContent.js b/products/ASC.People/Client/src/components/pages/Home/Section/Body/userContent.js index 6422bc3884..6049135830 100644 --- a/products/ASC.People/Client/src/components/pages/Home/Section/Body/userContent.js +++ b/products/ASC.People/Client/src/components/pages/Home/Section/Body/userContent.js @@ -4,7 +4,7 @@ import { RowContent, Link, LinkWithDropdown, Icons, Text } from "asc-web-compone import { connect } from "react-redux"; import { getUserStatus } from "../../../../../store/people/selectors"; import { useTranslation } from 'react-i18next'; -import history from "../../../../../history"; +import { history } from "asc-web-common"; const getFormatedGroups = (user, status) => { let temp = []; diff --git a/products/ASC.People/Client/src/components/pages/Profile/Section/Body/ProfileInfo/ProfileInfo.js b/products/ASC.People/Client/src/components/pages/Profile/Section/Body/ProfileInfo/ProfileInfo.js index c99e4a1c99..434c81ed54 100644 --- a/products/ASC.People/Client/src/components/pages/Profile/Section/Body/ProfileInfo/ProfileInfo.js +++ b/products/ASC.People/Client/src/components/pages/Profile/Section/Body/ProfileInfo/ProfileInfo.js @@ -14,7 +14,7 @@ import { HelpButton } from "asc-web-components"; import styled from 'styled-components'; -import history from "../../../../../../history"; +import { history } from "asc-web-common"; const InfoContainer = styled.div` margin-bottom: 24px; diff --git a/products/ASC.People/Client/src/history.js b/products/ASC.People/Client/src/history.js deleted file mode 100644 index 37a8a9ec23..0000000000 --- a/products/ASC.People/Client/src/history.js +++ /dev/null @@ -1,3 +0,0 @@ -import { createBrowserHistory } from 'history'; - -export default createBrowserHistory(); \ No newline at end of file diff --git a/products/ASC.People/Client/src/store/group/actions.js b/products/ASC.People/Client/src/store/group/actions.js index ce0176281f..c0d18a3d85 100644 --- a/products/ASC.People/Client/src/store/group/actions.js +++ b/products/ASC.People/Client/src/store/group/actions.js @@ -1,6 +1,6 @@ import * as api from "../../store/services/api"; import { setGroups, fetchPeople } from "../people/actions"; -import history from "../../history"; +import { history } from "asc-web-common"; export const SET_GROUP = "SET_GROUP"; export const CLEAN_GROUP = "CLEAN_GROUP"; diff --git a/products/ASC.People/Client/src/store/people/actions.js b/products/ASC.People/Client/src/store/people/actions.js index ee70c18d83..f5706d67c4 100644 --- a/products/ASC.People/Client/src/store/people/actions.js +++ b/products/ASC.People/Client/src/store/people/actions.js @@ -1,6 +1,6 @@ import * as api from "../services/api"; import Filter from "./filter"; -import history from "../../history"; +import { history } from "asc-web-common"; import config from "../../../package.json"; import { EMPLOYEE_STATUS, diff --git a/web/ASC.Web.Client/src/App.js b/web/ASC.Web.Client/src/App.js index ca8ad95adc..cbc82cfe96 100644 --- a/web/ASC.Web.Client/src/App.js +++ b/web/ASC.Web.Client/src/App.js @@ -6,7 +6,7 @@ import Login from "./components/pages/Login"; import PrivateRoute from "./helpers/privateRoute"; import PublicRoute from "./helpers/publicRoute"; import { Error404 } from "./components/pages/Error"; -import history from './history'; +import { history } from "asc-web-common"; const Home = lazy(() => import("./components/pages/Home")); const About = lazy(() => import("./components/pages/About")); diff --git a/web/ASC.Web.Client/src/history.js b/web/ASC.Web.Client/src/history.js deleted file mode 100644 index 37a8a9ec23..0000000000 --- a/web/ASC.Web.Client/src/history.js +++ /dev/null @@ -1,3 +0,0 @@ -import { createBrowserHistory } from 'history'; - -export default createBrowserHistory(); \ No newline at end of file diff --git a/web/ASC.Web.Common/src/index.js b/web/ASC.Web.Common/src/index.js index 43dfec2648..774f96a3b7 100644 --- a/web/ASC.Web.Common/src/index.js +++ b/web/ASC.Web.Common/src/index.js @@ -1,2 +1,3 @@ export { default as api } from './store/services/api'; -export { default as store } from './store'; \ No newline at end of file +export { default as store } from './store'; +export { default as history } from './history'; \ No newline at end of file From b38b9b2a2a09107111dce3922fe98eb07253f0f2 Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Mon, 18 Nov 2019 10:14:44 +0300 Subject: [PATCH 08/55] web: Client: Replaced services folder to ASC.Web.Common realization --- .../Confirm/sub-components/profileRemove.js | 4 +- .../src/components/pages/Login/index.js | 13 +- .../src/helpers/confirmRoute.js | 3 +- web/ASC.Web.Client/src/store/services/api.js | 239 ------------------ .../src/store/services/client.js | 96 ------- .../src/store/services/converter.js | 14 - .../src/store/services/fakeApi.js | 167 ------------ .../src/store/settings/actions.js | 18 +- .../src/store/settings/filter.js | 142 ----------- .../src/store/settings/reducer.js | 3 +- 10 files changed, 22 insertions(+), 677 deletions(-) delete mode 100644 web/ASC.Web.Client/src/store/services/api.js delete mode 100644 web/ASC.Web.Client/src/store/services/client.js delete mode 100644 web/ASC.Web.Client/src/store/services/converter.js delete mode 100644 web/ASC.Web.Client/src/store/services/fakeApi.js delete mode 100644 web/ASC.Web.Client/src/store/settings/filter.js diff --git a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/profileRemove.js b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/profileRemove.js index d3af323dbe..29616603ff 100644 --- a/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/profileRemove.js +++ b/web/ASC.Web.Client/src/components/pages/Confirm/sub-components/profileRemove.js @@ -5,9 +5,9 @@ import { Button, PageLayout, Text } from 'asc-web-components'; import styled from 'styled-components'; import PropTypes from 'prop-types'; import { withTranslation } from 'react-i18next'; -import { deleteSelf } from './../../../../store/services/api'; -import { store } from 'asc-web-common'; +import { store, api } from 'asc-web-common'; const { logout } = store.auth.actions; +const { deleteSelf } = api.people; const ProfileRemoveContainer = styled.div` display: flex; diff --git a/web/ASC.Web.Client/src/components/pages/Login/index.js b/web/ASC.Web.Client/src/components/pages/Login/index.js index 9635a3cbbe..6add8aae15 100644 --- a/web/ASC.Web.Client/src/components/pages/Login/index.js +++ b/web/ASC.Web.Client/src/components/pages/Login/index.js @@ -24,10 +24,10 @@ import { connect } from "react-redux"; import styled from "styled-components"; import { useTranslation } from "react-i18next"; import i18n from "./i18n"; -import { sendInstructionsToChangePassword } from "../../../store/services/api"; import SubModalDialog from "./sub-components/modal-dialog"; -import { store } from 'asc-web-common'; -const { login } = store.auth.actions; +import { store, api } from 'asc-web-common'; +const { login, setIsLoaded } = store.auth.actions; +const { sendInstructionsToChangePassword } = api.people; const FormContainer = styled(Container)` margin-top: 70px; @@ -93,7 +93,7 @@ const mdOptions = { size: 6, offset: 3 }; const Form = props => { const { t } = useTranslation("translation", { i18n }); - const { login, match, history, language, greetingTitle } = props; + const { login, setIsLoaded, match, history, language, greetingTitle } = props; const { params } = match; const [identifier, setIdentifier] = useState(params.confirmedEmail || ""); const [identifierValid, setIdentifierValid] = useState(true); @@ -153,6 +153,7 @@ const Form = props => { () => { //console.log("auth success", match, location, history); setIsLoading(false); + setIsLoaded(true); history.push("/"); }, error => { @@ -161,7 +162,7 @@ const Form = props => { setIsLoading(false); } ); - }, [errorText, history, identifier, login, password]); + }, [errorText, history, identifier, login, setIsLoaded, password]); const onKeyPress = useCallback( event => { @@ -353,5 +354,5 @@ function mapStateToProps(state) { export default connect( mapStateToProps, - { login } + { login, setIsLoaded } )(withRouter(LoginForm)); diff --git a/web/ASC.Web.Client/src/helpers/confirmRoute.js b/web/ASC.Web.Client/src/helpers/confirmRoute.js index 60ac75cca2..9183d16116 100644 --- a/web/ASC.Web.Client/src/helpers/confirmRoute.js +++ b/web/ASC.Web.Client/src/helpers/confirmRoute.js @@ -6,7 +6,8 @@ import { PageLayout, Loader } from "asc-web-components"; import { connect } from "react-redux"; import { withRouter } from "react-router"; import { AUTH_KEY } from "./constants"; -import { checkConfirmLink } from "../store/services/api"; +import { api } from "asc-web-common"; +const { checkConfirmLink } = api.user; class ConfirmRoute extends React.Component { constructor(props) { diff --git a/web/ASC.Web.Client/src/store/services/api.js b/web/ASC.Web.Client/src/store/services/api.js deleted file mode 100644 index 057e44fff6..0000000000 --- a/web/ASC.Web.Client/src/store/services/api.js +++ /dev/null @@ -1,239 +0,0 @@ -import { request, setAuthorizationToken } from "./client"; -import axios from "axios"; -import Filter from "../settings/filter"; - -export function login(userName, password) { - const data = { - userName, - password - }; - - return request({ - method: "post", - url: "/authentication.json", - data - }).then(tokenData => { - setAuthorizationToken(tokenData.token); - return Promise.resolve(tokenData); - }); -} - -export function logout() { - return request({ - method: "post", - url: "/authentication/logout" - }).then((data) => { - setAuthorizationToken(); - return Promise.resolve(); - }); -} - -export function getModulesList() { - return request({ - method: "get", - url: "/modules" - }).then(modules => { - return modules && axios.all( - modules.map(m => - request({ - method: "get", - url: `${window.location.origin}/${m}` - }) - ) - ); - }); -} - -export function getUser() { - return request({ - method: "get", - url: "/people/@self.json" - }); -} - -export function getSettings() { - return request({ - method: "get", - url: "/settings.json" - }); -} - -export function getPasswordSettings(key) { - return request({ - method: "get", - url: "/settings/security/password", - headers: { - confirm: key - } - }); -} - -export function createUser(data, key) { - return request({ - method: "post", - url: "/people", - data: data, - headers: { confirm: key } - }); -} - -export function changePassword(userId, password, key) { - const data = { password }; - - return request({ - method: "put", - url: `/people/${userId}/password`, - data, - headers: { confirm: key } - }); -} - -export function changeEmail(userId, email, key) { - const data = { email }; - - return request({ - method: "put", - url: `/people/${userId}/password`, - data, - headers: { confirm: key } - }); -} -export function updateActivationStatus(activationStatus, userId, key) { - return request({ - method: "put", - url: `/people/activationstatus/${activationStatus}.json`, - data: { userIds: [userId] }, - headers: { confirm: key } - }); -} - -export function updateUser(data) { - return request({ - method: "put", - url: `/people/${data.id}`, - data - }); -} - -export function checkConfirmLink(data) { - return request({ - method: "post", - url: "/authentication/confirm.json", - data - }); -} - -export function deleteSelf(key) { - return request({ - method: "delete", - url: "/people/@self", - headers: { confirm: key } - }); -} -export function sendInstructionsToChangePassword(email) { - return request({ - method: "post", - url: "/people/password.json", - data: { email } - }); -} - -export function getPortalCultures() { - return request({ - method: "get", - url: "/settings/cultures.json" - }); -} - -export function setLanguageAndTime(lng, timeZoneID) { - return request({ - method: "put", - url: "/settings/timeandlanguage.json", - data: { lng, timeZoneID } - }); -} - -export function getPortalTimezones() { - return request({ - method: "get", - url: "/settings/timezones.json" - }); -} - -export function getUserList() { - return request({ - method: "get", - url: `/people` - }); -} - -export function getListAdmins(filter = Filter.getDefault()) { - const filterParams = filter.toUrlParams(); - const params = - "fields=id,displayName,groups,name,avatar,avatarSmall,isOwner,isAdmin,profileUrl,listAdminModules"; - return request({ - method: "get", - url: `/people/filter.json?${filterParams}&${params}` - }); -} - -export function changeProductAdmin(userId, productId, administrator) { - return request({ - method: "put", - url: "/settings/security/administrator", - data: { - productId, - userId, - administrator - } - }); -} - -export function getUserById(userId) { - return request({ - method: "get", - url: `/people/${userId}` - }); -} - -/* export function getGreetingSettings() { - return request({ - method: "get", - url: `/settings/greetingsettings.json`, - }); -} */ - -export function setGreetingSettings(title) { - return request({ - method: "post", - url: `/settings/greetingsettings.json`, - data: { title } - }); -} - -export function restoreGreetingSettings() { - return request({ - method: "post", - url: `/settings/greetingsettings/restore.json` - }); -} - -export function getLogoText() { - return request({ - method: "get", - url: `/settings/whitelabel/logotext.json` - }); -} -export function getLogoSizes() { - return request({ - method: "get", - url: `/settings/whitelabel/sizes.json` - }); -} - -export function getLogoUrls() { - return request({ - method: "get", - url: `/settings/whitelabel/logos.json` - }); -} \ No newline at end of file diff --git a/web/ASC.Web.Client/src/store/services/client.js b/web/ASC.Web.Client/src/store/services/client.js deleted file mode 100644 index f9f95a52e0..0000000000 --- a/web/ASC.Web.Client/src/store/services/client.js +++ /dev/null @@ -1,96 +0,0 @@ -import axios from "axios"; -import { AUTH_KEY } from "../../helpers/constants.js"; -//import { toastr } from "asc-web-components"; - -const PREFIX = "api"; -const VERSION = "2.0"; -const baseURL = `${window.location.origin}/${PREFIX}/${VERSION}`; - -/** - * @description axios instance for ajax requests - */ - -const client = axios.create({ - baseURL: baseURL, - responseType: "json", - timeout: 30000 // default is `0` (no timeout) -}); - -setAuthorizationToken(localStorage.getItem(AUTH_KEY)); - -client.interceptors.response.use( - response => { - return response; - }, - error => { - if(error.isAxiosError) - return error; - - if (error.response.status === 401) { - window.location.href = "/login/error=unauthorized"; - } - - if (error.response.status === 502) { - window.location.href = `/error/${error.response.status}`; - } - - return error; - } -); - -export function setAuthorizationToken(token) { - client.defaults.withCredentials = true; - if (token) { - localStorage.setItem(AUTH_KEY, true); - } else { - localStorage.clear(); - } -} - -const checkResponseError = res => { - if(!res) return; - - if (res.data && res.data.error) { - console.error(res.data.error); - throw new Error(res.data.error.message); - } - - if(res.isAxiosError && res.message) { - console.error(res.message); - //toastr.error(res.message); - throw new Error(res.message); - } -}; - -/** - * @description wrapper for making ajax requests - * @param {object} object with method,url,data etc. - */ -export const request = function(options) { - const onSuccess = function(response) { - checkResponseError(response); - - if(!response || !response.data || response.isAxiosError) - return null; - - if(response.data.hasOwnProperty("total")) - return { total: +response.data.total, items: response.data.response }; - - return response.data.response; - }; - const onError = function(error) { - console.error("Request Failed:", error.config); - if (error.response) { - console.error("Status:", error.response.status); - console.error("Data:", error.response.data); - console.error("Headers:", error.response.headers); - } else { - console.error("Error Message:", error.message); - } - return Promise.reject(error.response || error.message); - }; - - return client(options) - .then(onSuccess) - .catch(onError); -}; diff --git a/web/ASC.Web.Client/src/store/services/converter.js b/web/ASC.Web.Client/src/store/services/converter.js deleted file mode 100644 index 6123aae47d..0000000000 --- a/web/ASC.Web.Client/src/store/services/converter.js +++ /dev/null @@ -1,14 +0,0 @@ -export const toUrlParams = (obj, skipNull) => { - let str = ""; - for (var key in obj) { - if (skipNull && !obj[key]) continue; - - if (str !== "") { - str += "&"; - } - - str += key + "=" + encodeURIComponent(obj[key]); - } - - return str; -}; diff --git a/web/ASC.Web.Client/src/store/services/fakeApi.js b/web/ASC.Web.Client/src/store/services/fakeApi.js deleted file mode 100644 index 8ca9f8a442..0000000000 --- a/web/ASC.Web.Client/src/store/services/fakeApi.js +++ /dev/null @@ -1,167 +0,0 @@ -import axios from "axios"; - -const BASE_URL = "http://localhost"; -const PORT = "8080"; -const PREFIX = "api"; -const VERSION = "2.0"; -const API_URL = `${BASE_URL}:${PORT}/${PREFIX}/${VERSION}`; - -function fakeResponse(data) { - return Promise.resolve({ - data: { - response: data - } - }); -} - -export function login(data) { - return axios.post(`${API_URL}/authentication`, data); -} - -export function getModulesList() { - let data = [ - { - title: "Documents", - link: "/products/files/", - imageUrl: "images/documents240.png", - description: - "Create, edit and share documents. Collaborate on them in real-time. 100% compatibility with MS Office formats guaranteed.", - isPrimary: true - }, - { - title: "People", - link: "/products/people/", - imageUrl: "images/people.svg", - isPrimary: false - } - ]; - - return fakeResponse(data); -} - -export function getUser() { - let data = { - index: "a", - type: "person", - id: "2881e6c6-7c9a-11e9-81fb-0242ac120002", - timestamp: null, - crtdate: null, - displayCrtdate: "NaN:NaN PM NaN/NaN/NaN", - displayDateCrtdate: "NaN/NaN/NaN", - displayTimeCrtdate: "NaN:NaN PM", - trtdate: null, - displayTrtdate: "", - displayDateTrtdate: "", - displayTimeTrtdate: "", - birthday: null, - userName: "", - firstName: "", - lastName: "", - displayName: "Administrator ", - email: "paul.bannov@gmail.com", - tel: "", - contacts: { - mailboxes: [ - { - type: 0, - name: "mail", - title: "paul.bannov@gmail.com", - label: "Email", - istop: false, - val: "paul.bannov@gmail.com" - } - ], - telephones: [], - links: [] - }, - avatar: "/skins/default/images/default_user_photo_size_32-32.png", - avatarBig: "/skins/default/images/default_user_photo_size_82-82.png", - avatarSmall: "/skins/default/images/default_user_photo_size_32-32.png", - groups: [], - status: 0, - activationStatus: 0, - isActivated: false, - isPending: false, - isTerminated: false, - isMe: true, - isManager: false, - isPortalOwner: true, - isAdmin: true, - listAdminModules: [], - isVisitor: false, - isOutsider: false, - sex: "", - location: "", - title: "", - notes: "", - culture: "", - profileUrl: "/products/people/profile.aspx?user=administrator", - isLDAP: false, - isSSO: false - }; - - return fakeResponse(data); -} - -export function getSettings() { - const data = { - timezone: - "Russian Standard Time;180;(UTC+03:00) Moscow, St. Petersburg;Russia TZ 2 Standard Time;Russia TZ 2 Daylight Time;[01:01:0001;12:31:2010;60;[0;02:00:00;3;5;0;];[0;03:00:00;10;5;0;];][01:01:2011;12:31:2011;60;[0;02:00:00;3;5;0;];[0;00:00:00;1;1;6;];][01:01:2012;12:31:2012;0;[1;00:00:00;1;1;];[1;00:00:00.001;1;1;];60;][01:01:2013;12:31:2013;0;[1;00:00:00;1;1;];[1;00:00:00.001;1;1;];60;][01:01:2014;12:31:2014;60;[0;00:00:00;1;1;3;];[0;02:00:00;10;5;0;];];", - trustedDomains: [], - trustedDomainsType: 1, - culture: "ru-RU", - utcOffset: "03:00:00", - utcHoursOffset: 3 - }; - - return fakeResponse(data); -} - -export function getPasswordSettings() { - const data = { - minLength: 12, - upperCase: true, - digits: true, - specSymbols: true - }; - - return fakeResponse(data); -} - -export function createUser() { - const data = { - id: "00000000-0000-0000-0000-000000000000" - }; - return fakeResponse(data); -} - -export function changePassword() { - const data = { password: "password" }; - - return fakeResponse(data); -} - -export function updateActivationStatus() { - - return fakeResponse(); -} - -export function updateUser(data) { - return fakeResponse(data); -} - -export function checkConfirmLink(data) { - return fakeResponse(data); -} - -export function deleteUser(data) { - return fakeResponse(data); -} - -export function updateUserStatus(data) { - return fakeResponse(data); -} - -export function sendInstructionsToChangePassword() { - return fakeResponse("Instruction has been sent successfully"); -} diff --git a/web/ASC.Web.Client/src/store/settings/actions.js b/web/ASC.Web.Client/src/store/settings/actions.js index 15bb6b4d15..8fcba43b3c 100644 --- a/web/ASC.Web.Client/src/store/settings/actions.js +++ b/web/ASC.Web.Client/src/store/settings/actions.js @@ -1,7 +1,7 @@ -import * as api from "../services/api"; +import { api } from "asc-web-common"; import axios from "axios"; import { getSelectorOptions, getUserOptions } from "./selectors"; -import Filter from "./filter"; +const { Filter } = api; export const SET_USERS = "SET_USERS"; export const SET_ADMINS = "SET_ADMINS"; @@ -69,11 +69,11 @@ export function changeAdmins(userIds, productId, isAdmin, filter) { return axios .all( userIds.map(userId => - api.changeProductAdmin(userId, productId, isAdmin) + api.people.changeProductAdmin(userId, productId, isAdmin) ) ) .then(() => - axios.all([api.getUserList(filterData), api.getListAdmins(filterData)]) + axios.all([api.people.getUserList(filterData), api.people.getListAdmins(filterData)]) ) .then( axios.spread((users, admins) => { @@ -91,7 +91,7 @@ export function changeAdmins(userIds, productId, isAdmin, filter) { export function getPortalOwner(userId) { return dispatch => { - return api.getUserById(userId).then(owner => dispatch(setOwner(owner))); + return api.people.getUserById(userId).then(owner => dispatch(setOwner(owner))); }; } @@ -103,7 +103,7 @@ export function fetchPeople(filter) { return dispatch => { return axios - .all([api.getUserList(filterData), api.getListAdmins(filterData)]) + .all([api.people.getUserList(filterData), api.people.getListAdmins(filterData)]) .then( axios.spread((users, admins) => { const options = getUserOptions(users.items, admins.items); @@ -120,7 +120,7 @@ export function fetchPeople(filter) { export function getWhiteLabelLogoText() { return dispatch => { - return api.getLogoText() + return api.settings.getLogoText() .then(res => { dispatch(setLogoText(res)); }); @@ -129,7 +129,7 @@ export function getWhiteLabelLogoText() { export function getWhiteLabelLogoSizes() { return dispatch => { - return api.getLogoSizes() + return api.settings.getLogoSizes() .then(res => { dispatch(setLogoSizes(res)); }); @@ -138,7 +138,7 @@ export function getWhiteLabelLogoSizes() { export function getWhiteLabelLogoUrls() { return dispatch => { - return api.getLogoUrls() + return api.settings.getLogoUrls() .then(res => { dispatch(setLogoUrls(Object.values(res))); }); diff --git a/web/ASC.Web.Client/src/store/settings/filter.js b/web/ASC.Web.Client/src/store/settings/filter.js deleted file mode 100644 index feb178b8e0..0000000000 --- a/web/ASC.Web.Client/src/store/settings/filter.js +++ /dev/null @@ -1,142 +0,0 @@ -import { toUrlParams } from "../services/converter"; - -const DEFAULT_PAGE = 0; -const DEFAULT_PAGE_COUNT = 25; -const DEFAULT_TOTAL = 0; -const DEFAULT_SORT_BY = "firstname"; -const DEFAULT_SORT_ORDER = "ascending"; -const DEFAULT_EMPLOYEE_STATUS = null; -const DEFAULT_ACTIVATION_STATUS = null; -const DEFAULT_ROLE = null; -const DEFAULT_SEARCH = null; -const DEFAULT_GROUP = null; - -class Filter { - static getDefault(total = DEFAULT_TOTAL) { - return new Filter(DEFAULT_PAGE, DEFAULT_PAGE_COUNT, total); - } - - constructor( - page = DEFAULT_PAGE, - pageCount = DEFAULT_PAGE_COUNT, - total = DEFAULT_TOTAL, - sortBy = DEFAULT_SORT_BY, - sortOrder = DEFAULT_SORT_ORDER, - employeeStatus = DEFAULT_EMPLOYEE_STATUS, - activationStatus = DEFAULT_ACTIVATION_STATUS, - role = DEFAULT_ROLE, - search = DEFAULT_SEARCH, - group = DEFAULT_GROUP - ) { - this.page = page; - this.pageCount = pageCount; - this.sortBy = sortBy; - this.sortOrder = sortOrder; - this.employeeStatus = employeeStatus; - this.activationStatus = activationStatus; - this.role = role; - this.search = search; - this.total = total; - this.group = group; - } - - getStartIndex = () => { - return this.page * this.pageCount; - }; - - hasNext = () => { - return this.total - this.getStartIndex() > this.pageCount; - }; - - hasPrev = () => { - return this.page > 0; - }; - - toDto = () => { - const { - pageCount, - sortBy, - sortOrder, - employeeStatus, - activationStatus, - role, - search, - group - } = this; - - let dtoFilter = { - StartIndex: this.getStartIndex(), - Count: pageCount, - sortby: sortBy, - sortorder: sortOrder, - employeestatus: employeeStatus, - activationstatus: activationStatus, - filtervalue: search, - groupId: group - //fields: "id,status,isAdmin,isOwner,isVisitor,activationStatus,userName,email,displayName,avatarSmall, - //listAdminModules,birthday,title,location,isLDAP,isSSO" - }; - - switch (role) { - case "admin": - dtoFilter.isadministrator = true; - break; - case "user": - dtoFilter.employeeType = 1; - break; - case "guest": - dtoFilter.employeeType = 2; - break; - default: - break; - } - - return dtoFilter; - }; - - toUrlParams = () => { - const dtoFilter = this.toDto(); - const str = toUrlParams(dtoFilter, true); - return str; - }; - - clone(onlySorting) { - return onlySorting - ? new Filter( - DEFAULT_PAGE, - DEFAULT_PAGE_COUNT, - DEFAULT_TOTAL, - this.sortBy, - this.sortOrder - ) - : new Filter( - this.page, - this.pageCount, - this.total, - this.sortBy, - this.sortOrder, - this.employeeStatus, - this.activationStatus, - this.role, - this.search, - this.group - ); - } - - equals(filter) { - const equals = - this.employeeStatus === filter.employeeStatus && - this.activationStatus === filter.activationStatus && - this.role === filter.role && - this.group === filter.group && - this.search === filter.search && - this.sortBy === filter.sortBy && - this.sortOrder === filter.sortOrder && - this.page === filter.page && - this.pageCount === filter.pageCount; - - return equals; - } -} - -export default Filter; diff --git a/web/ASC.Web.Client/src/store/settings/reducer.js b/web/ASC.Web.Client/src/store/settings/reducer.js index 92dc901b0a..7983e0eedb 100644 --- a/web/ASC.Web.Client/src/store/settings/reducer.js +++ b/web/ASC.Web.Client/src/store/settings/reducer.js @@ -1,6 +1,7 @@ import { SET_USERS, SET_ADMINS, SET_OWNER, SET_FILTER, SET_LOGO_TEXT, SET_LOGO_SIZES, SET_LOGO_URLS } from "./actions"; -import Filter from "./filter"; +import { api } from "asc-web-common"; +const { Filter } = api; const initialState = { common: { From 85d6847e29a150b521b64e7d346adfc7166c9fd1 Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Mon, 18 Nov 2019 10:15:19 +0300 Subject: [PATCH 09/55] web: Client: Fixed warnings --- .../src/components/pages/Settings/Layout/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/ASC.Web.Client/src/components/pages/Settings/Layout/index.js b/web/ASC.Web.Client/src/components/pages/Settings/Layout/index.js index 0d1aae114e..562bb381e4 100644 --- a/web/ASC.Web.Client/src/components/pages/Settings/Layout/index.js +++ b/web/ASC.Web.Client/src/components/pages/Settings/Layout/index.js @@ -16,7 +16,7 @@ const Layout = ({ currentProductId, setCurrentProductId, language, children }) = useEffect(() => { currentProductId !== 'settings' && setCurrentProductId('settings'); i18n.changeLanguage(language); - }, [language]); + }, [language, currentProductId, setCurrentProductId]); return ( From 18b0cdab2d0be05028437e7e1bfee8e83e154a66 Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Mon, 18 Nov 2019 13:52:37 +0300 Subject: [PATCH 10/55] web: People: Moved api methods: resendUserInvites and getShortenedLink into ASC.Web.Common --- .../src/components/dialogs/Invite/index.js | 3 +- .../pages/Home/Section/Body/index.js | 4 +- .../pages/Home/Section/Header/index.js | 4 +- .../Section/Body/ProfileInfo/ProfileInfo.js | 5 +- .../pages/Profile/Section/Header/index.js | 4 +- .../Client/src/store/services/api.js | 16 ------- .../Client/src/store/services/fakeApi.js | 47 ------------------- .../src/store/services/api/index.js | 3 +- .../src/store/services/api/people/index.js | 8 ++++ .../src/store/services/api/portal/index.js | 9 ++++ 10 files changed, 30 insertions(+), 73 deletions(-) create mode 100644 web/ASC.Web.Common/src/store/services/api/portal/index.js diff --git a/products/ASC.People/Client/src/components/dialogs/Invite/index.js b/products/ASC.People/Client/src/components/dialogs/Invite/index.js index 027f22e59a..97ce373f19 100644 --- a/products/ASC.People/Client/src/components/dialogs/Invite/index.js +++ b/products/ASC.People/Client/src/components/dialogs/Invite/index.js @@ -11,12 +11,13 @@ import { Textarea, Text } from "asc-web-components"; -import { getShortenedLink } from "../../../store/services/api"; import { withTranslation, I18nextProvider } from "react-i18next"; import i18n from "./i18n"; import { typeGuests } from "./../../../helpers/customNames"; import styled from "styled-components"; import copy from "copy-to-clipboard"; +import { api } from "asc-web-common"; +const { getShortenedLink } = api.portal; const ModalDialogContainer = styled.div` .margin-text { diff --git a/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js b/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js index d617afeddb..906fa01a3d 100644 --- a/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js +++ b/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js @@ -32,14 +32,14 @@ import { } from "../../../../../store/people/selectors"; import { EmployeeStatus } from "../../../../../helpers/constants"; import { - resendUserInvites, sendInstructionsToDelete, sendInstructionsToChangePassword, deleteUser } from "../../../../../store/services/api"; import { isMobileOnly } from "react-device-detect"; -import { store } from 'asc-web-common'; +import { store, api } from 'asc-web-common'; const { isAdmin, isMe } = store.auth.selectors; +const { resendUserInvites } = api.people; class SectionBodyContent extends React.PureComponent { diff --git a/products/ASC.People/Client/src/components/pages/Home/Section/Header/index.js b/products/ASC.People/Client/src/components/pages/Home/Section/Header/index.js index 1fe57a6c49..b8d9511058 100644 --- a/products/ASC.People/Client/src/components/pages/Home/Section/Header/index.js +++ b/products/ASC.People/Client/src/components/pages/Home/Section/Header/index.js @@ -26,12 +26,12 @@ import { typeGuest } from "../../../../../helpers/../helpers/customNames"; import { - resendUserInvites, deleteUsers } from "../../../../../store/services/api"; import { deleteGroup } from "../../../../../store/group/actions"; -import { store } from 'asc-web-common'; +import { store, api } from 'asc-web-common'; const { isAdmin } = store.auth.selectors; +const { resendUserInvites } = api.people; const StyledContainer = styled.div` .group-button-menu-container { diff --git a/products/ASC.People/Client/src/components/pages/Profile/Section/Body/ProfileInfo/ProfileInfo.js b/products/ASC.People/Client/src/components/pages/Profile/Section/Body/ProfileInfo/ProfileInfo.js index 434c81ed54..a00d033fb4 100644 --- a/products/ASC.People/Client/src/components/pages/Profile/Section/Body/ProfileInfo/ProfileInfo.js +++ b/products/ASC.People/Client/src/components/pages/Profile/Section/Body/ProfileInfo/ProfileInfo.js @@ -1,7 +1,7 @@ import React from "react"; import { Trans } from 'react-i18next'; import { department as departmentName, position, employedSinceDate } from '../../../../../../helpers/customNames'; -import { resendUserInvites, sendInstructionsToChangeEmail } from "../../../../../../store/services/api"; +import { sendInstructionsToChangeEmail } from "../../../../../../store/services/api"; import { Text, TextInput, @@ -14,7 +14,8 @@ import { HelpButton } from "asc-web-components"; import styled from 'styled-components'; -import { history } from "asc-web-common"; +import { history, api } from "asc-web-common"; +const { resendUserInvites } = api.people; const InfoContainer = styled.div` margin-bottom: 24px; diff --git a/products/ASC.People/Client/src/components/pages/Profile/Section/Header/index.js b/products/ASC.People/Client/src/components/pages/Profile/Section/Header/index.js index 5b99f799ed..720df4bbb5 100644 --- a/products/ASC.People/Client/src/components/pages/Profile/Section/Header/index.js +++ b/products/ASC.People/Client/src/components/pages/Profile/Section/Header/index.js @@ -15,7 +15,6 @@ import { import { withRouter } from "react-router"; import { getUserStatus, toEmployeeWrapper } from "../../../../../store/people/selectors"; import { withTranslation } from 'react-i18next'; -import { resendUserInvites } from "../../../../../store/services/api"; import { EmployeeStatus } from "../../../../../helpers/constants"; import { updateUserStatus, fetchPeople } from "../../../../../store/people/actions"; import { fetchProfile } from '../../../../../store/profile/actions'; @@ -29,8 +28,9 @@ import { deleteUser } from "../../../../../store/services/api"; import styled from 'styled-components'; -import { store } from 'asc-web-common'; +import { store, api } from 'asc-web-common'; const { isAdmin, isMe } = store.auth.selectors; +const { resendUserInvites } = api.people; const wrapperStyle = { display: "flex", diff --git a/products/ASC.People/Client/src/store/services/api.js b/products/ASC.People/Client/src/store/services/api.js index 45afa73c82..6aa31436c2 100644 --- a/products/ASC.People/Client/src/store/services/api.js +++ b/products/ASC.People/Client/src/store/services/api.js @@ -173,14 +173,6 @@ export function updateUserType(type, userIds) { }); } -export function resendUserInvites(userIds) { - return request({ - method: "put", - url: "/people/invite", - data: { userIds } - }); -} - export function sendInstructionsToDelete() { return request({ method: "put", @@ -261,14 +253,6 @@ export function getInvitationLink(isGuest) { }); } -export function getShortenedLink(link) { - return request({ - method: "put", - url: "/portal/getshortenlink.json", - data: link - }); -} - export function createGroup(groupName, groupManager, members) { const data = { groupName, groupManager, members }; return request({ diff --git a/products/ASC.People/Client/src/store/services/fakeApi.js b/products/ASC.People/Client/src/store/services/fakeApi.js index 47dac89ea6..e1bf861c23 100644 --- a/products/ASC.People/Client/src/store/services/fakeApi.js +++ b/products/ASC.People/Client/src/store/services/fakeApi.js @@ -381,53 +381,6 @@ export function updateUserType(type, userIds) { ]); } -export function resendUserInvites(userIds) { - return fakeResponse([ - { - id: userIds[0], - userName: "Mike.Zanyatski", - isVisitor: false, - firstName: "Mike", - lastName: "Zanyatski", - email: "my@gmail.com", - birthday: "2019-08-19T01:39:25.3240031Z", - sex: "male", - status: 1, - activationStatus: 0, - terminated: "2019-08-19T01:39:25.3240031Z", - department: "Marketing", - workFrom: "2019-08-19T01:39:25.3240031Z", - location: "Palo Alto", - notes: "Notes to worker", - displayName: null, - title: "Manager", - contacts: [ - { - type: "GTalk", - value: "my@gmail.com" - } - ], - groups: [ - { - id: "00000000-0000-0000-0000-000000000000", - name: "Group Name", - manager: "Jake.Zazhitski" - } - ], - avatarMedium: "url to medium avatar", - avatar: "url to big avatar", - isAdmin: false, - isLDAP: false, - listAdminModules: ["projects", "crm"], - isOwner: false, - cultureName: "en-EN", - isSSO: false, - avatarSmall: "url to small avatar", - profileUrl: "" - } - ]); -} - export function deleteUser(userId) { return fakeResponse([ { diff --git a/web/ASC.Web.Common/src/store/services/api/index.js b/web/ASC.Web.Common/src/store/services/api/index.js index f2eb7475ef..3ae7814f11 100644 --- a/web/ASC.Web.Common/src/store/services/api/index.js +++ b/web/ASC.Web.Common/src/store/services/api/index.js @@ -3,5 +3,6 @@ import * as people from './people'; import * as user from './user'; import * as settings from './settings'; import * as modules from './modules'; +import * as portal from './portal'; -export default { Filter, people, user, settings, modules }; \ No newline at end of file +export default { Filter, people, user, settings, modules, portal }; \ No newline at end of file diff --git a/web/ASC.Web.Common/src/store/services/api/people/index.js b/web/ASC.Web.Common/src/store/services/api/people/index.js index bea5d7b4a4..cfdeb07799 100644 --- a/web/ASC.Web.Common/src/store/services/api/people/index.js +++ b/web/ASC.Web.Common/src/store/services/api/people/index.js @@ -124,4 +124,12 @@ export function getUserList(filter = Filter.getDefault()) { method: "get", url: `/people/${userId}` }); + } + + export function resendUserInvites(userIds) { + return request({ + method: "put", + url: "/people/invite", + data: { userIds } + }); } \ No newline at end of file diff --git a/web/ASC.Web.Common/src/store/services/api/portal/index.js b/web/ASC.Web.Common/src/store/services/api/portal/index.js new file mode 100644 index 0000000000..f8291d5deb --- /dev/null +++ b/web/ASC.Web.Common/src/store/services/api/portal/index.js @@ -0,0 +1,9 @@ +import { request } from "../client"; + +export function getShortenedLink(link) { + return request({ + method: "put", + url: "/portal/getshortenlink.json", + data: link + }); + } \ No newline at end of file From 2a9e3d1870556d20e05e6bee8c5731a905919d33 Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Tue, 19 Nov 2019 12:40:33 +0300 Subject: [PATCH 11/55] web: People: Replaced services folder to ASC.Web.Common realization --- .../pages/Home/Section/Body/index.js | 7 +- .../pages/Home/Section/Header/index.js | 5 +- .../Section/Body/ProfileInfo/ProfileInfo.js | 3 +- .../pages/Profile/Section/Header/index.js | 247 ++++---- .../Section/Body/createUserForm.js | 6 +- .../Section/Body/updateUserForm.js | 4 +- .../Client/src/helpers/converters.js | 3 +- products/ASC.People/Client/src/index.js | 5 +- .../Client/src/store/group/actions.js | 11 +- .../Client/src/store/people/actions.js | 15 +- .../Client/src/store/people/filter.js | 142 ----- .../Client/src/store/people/reducers.js | 3 +- .../Client/src/store/profile/actions.js | 13 +- .../Client/src/store/services/api.js | 289 ---------- .../Client/src/store/services/client.js | 96 ---- .../Client/src/store/services/converter.js | 14 - .../Client/src/store/services/fakeApi.js | 526 ------------------ .../categories/common/customization.js | 8 +- web/ASC.Web.Common/src/store/auth/actions.js | 272 +++++---- web/ASC.Web.Common/src/store/auth/reducer.js | 7 +- .../src/store/services/api/groups/index.js | 40 ++ .../src/store/services/api/index.js | 3 +- .../src/store/services/api/people/index.js | 98 +++- .../src/store/services/api/portal/index.js | 49 ++ 24 files changed, 525 insertions(+), 1341 deletions(-) delete mode 100644 products/ASC.People/Client/src/store/people/filter.js delete mode 100644 products/ASC.People/Client/src/store/services/api.js delete mode 100644 products/ASC.People/Client/src/store/services/client.js delete mode 100644 products/ASC.People/Client/src/store/services/converter.js delete mode 100644 products/ASC.People/Client/src/store/services/fakeApi.js create mode 100644 web/ASC.Web.Common/src/store/services/api/groups/index.js diff --git a/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js b/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js index 906fa01a3d..6941a455f4 100644 --- a/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js +++ b/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js @@ -31,15 +31,10 @@ import { getUserRole } from "../../../../../store/people/selectors"; import { EmployeeStatus } from "../../../../../helpers/constants"; -import { - sendInstructionsToDelete, - sendInstructionsToChangePassword, - deleteUser -} from "../../../../../store/services/api"; import { isMobileOnly } from "react-device-detect"; import { store, api } from 'asc-web-common'; const { isAdmin, isMe } = store.auth.selectors; -const { resendUserInvites } = api.people; +const { resendUserInvites, sendInstructionsToDelete, sendInstructionsToChangePassword, deleteUser } = api.people; class SectionBodyContent extends React.PureComponent { diff --git a/products/ASC.People/Client/src/components/pages/Home/Section/Header/index.js b/products/ASC.People/Client/src/components/pages/Home/Section/Header/index.js index b8d9511058..042839bc42 100644 --- a/products/ASC.People/Client/src/components/pages/Home/Section/Header/index.js +++ b/products/ASC.People/Client/src/components/pages/Home/Section/Header/index.js @@ -25,13 +25,10 @@ import { typeUser, typeGuest } from "../../../../../helpers/../helpers/customNames"; -import { - deleteUsers -} from "../../../../../store/services/api"; import { deleteGroup } from "../../../../../store/group/actions"; import { store, api } from 'asc-web-common'; const { isAdmin } = store.auth.selectors; -const { resendUserInvites } = api.people; +const { resendUserInvites, deleteUsers } = api.people; const StyledContainer = styled.div` .group-button-menu-container { diff --git a/products/ASC.People/Client/src/components/pages/Profile/Section/Body/ProfileInfo/ProfileInfo.js b/products/ASC.People/Client/src/components/pages/Profile/Section/Body/ProfileInfo/ProfileInfo.js index a00d033fb4..a806ec30b0 100644 --- a/products/ASC.People/Client/src/components/pages/Profile/Section/Body/ProfileInfo/ProfileInfo.js +++ b/products/ASC.People/Client/src/components/pages/Profile/Section/Body/ProfileInfo/ProfileInfo.js @@ -1,7 +1,6 @@ import React from "react"; import { Trans } from 'react-i18next'; import { department as departmentName, position, employedSinceDate } from '../../../../../../helpers/customNames'; -import { sendInstructionsToChangeEmail } from "../../../../../../store/services/api"; import { Text, TextInput, @@ -15,7 +14,7 @@ import { } from "asc-web-components"; import styled from 'styled-components'; import { history, api } from "asc-web-common"; -const { resendUserInvites } = api.people; +const { resendUserInvites, sendInstructionsToChangeEmail } = api.people; const InfoContainer = styled.div` margin-bottom: 24px; diff --git a/products/ASC.People/Client/src/components/pages/Profile/Section/Header/index.js b/products/ASC.People/Client/src/components/pages/Profile/Section/Header/index.js index 720df4bbb5..b9b94ff47f 100644 --- a/products/ASC.People/Client/src/components/pages/Profile/Section/Header/index.js +++ b/products/ASC.People/Client/src/components/pages/Profile/Section/Header/index.js @@ -13,12 +13,22 @@ import { AvatarEditor } from "asc-web-components"; import { withRouter } from "react-router"; -import { getUserStatus, toEmployeeWrapper } from "../../../../../store/people/selectors"; -import { withTranslation } from 'react-i18next'; -import { EmployeeStatus } from "../../../../../helpers/constants"; -import { updateUserStatus, fetchPeople } from "../../../../../store/people/actions"; -import { fetchProfile } from '../../../../../store/profile/actions'; import { + getUserStatus, + toEmployeeWrapper +} from "../../../../../store/people/selectors"; +import { withTranslation } from "react-i18next"; +import { EmployeeStatus } from "../../../../../helpers/constants"; +import { + updateUserStatus, + fetchPeople +} from "../../../../../store/people/actions"; +import { fetchProfile } from "../../../../../store/profile/actions"; +import styled from "styled-components"; +import { store, api } from "asc-web-common"; +const { isAdmin, isMe } = store.auth.selectors; +const { + resendUserInvites, sendInstructionsToDelete, sendInstructionsToChangePassword, sendInstructionsToChangeEmail, @@ -26,11 +36,7 @@ import { loadAvatar, deleteAvatar, deleteUser -} from "../../../../../store/services/api"; -import styled from 'styled-components'; -import { store, api } from 'asc-web-common'; -const { isAdmin, isMe } = store.auth.selectors; -const { resendUserInvites } = api.people; +} = api.people; const wrapperStyle = { display: "flex", @@ -71,38 +77,42 @@ class SectionHeaderContent extends React.PureComponent { header: "", body: "", buttons: [], - newEmail: profile.email, + newEmail: profile.email }, avatar: { tmpFile: "", - image: profile.avatarDefault ? "data:image/png;base64," + profile.avatarDefault : null, + image: profile.avatarDefault + ? "data:image/png;base64," + profile.avatarDefault + : null, defaultWidth: 0, defaultHeight: 0 } }; return newState; - } + }; openAvatarEditor = () => { - let avatarDefault = this.state.profile.avatarDefault ? "data:image/png;base64," + this.state.profile.avatarDefault : null; + let avatarDefault = this.state.profile.avatarDefault + ? "data:image/png;base64," + this.state.profile.avatarDefault + : null; let _this = this; if (avatarDefault !== null) { let img = new Image(); - img.onload = function () { + img.onload = function() { _this.setState({ avatar: { defaultWidth: img.width, defaultHeight: img.height } - }) + }); }; img.src = avatarDefault; } this.setState({ - visibleAvatarEditor: true, + visibleAvatarEditor: true }); - } + }; onLoadFileAvatar = file => { let data = new FormData(); @@ -110,64 +120,72 @@ class SectionHeaderContent extends React.PureComponent { data.append("file", file); data.append("Autosave", false); loadAvatar(this.state.profile.id, data) - .then((response) => { + .then(response => { var img = new Image(); - img.onload = function () { + img.onload = function() { var stateCopy = Object.assign({}, _this.state); stateCopy.avatar = { tmpFile: response.data, image: response.data, defaultWidth: img.width, defaultHeight: img.height - } + }; _this.setState(stateCopy); }; img.src = response.data; }) - .catch((error) => toastr.error(error)); - } + .catch(error => toastr.error(error)); + }; onSaveAvatar = (isUpdate, result) => { if (isUpdate) { createThumbnailsAvatar(this.state.profile.id, { - x: Math.round(result.x * this.state.avatar.defaultWidth - result.width / 2), - y: Math.round(result.y * this.state.avatar.defaultHeight - result.height / 2), + x: Math.round( + result.x * this.state.avatar.defaultWidth - result.width / 2 + ), + y: Math.round( + result.y * this.state.avatar.defaultHeight - result.height / 2 + ), width: result.width, height: result.height, tmpFile: this.state.avatar.tmpFile }) - .then((response) => { + .then(response => { let stateCopy = Object.assign({}, this.state); stateCopy.visibleAvatarEditor = false; - stateCopy.avatar.tmpFile = ''; - stateCopy.profile.avatarMax = response.max + '?_=' + Math.floor(Math.random() * Math.floor(10000)); + stateCopy.avatar.tmpFile = ""; + stateCopy.profile.avatarMax = + response.max + + "?_=" + + Math.floor(Math.random() * Math.floor(10000)); toastr.success("Success"); this.setState(stateCopy); }) - .catch((error) => toastr.error(error)) + .catch(error => toastr.error(error)) .then(() => this.props.fetchProfile(this.state.profile.id)); } else { deleteAvatar(this.state.profile.id) - .then((response) => { + .then(response => { let stateCopy = Object.assign({}, this.state); stateCopy.visibleAvatarEditor = false; stateCopy.profile.avatarMax = response.big; toastr.success("Success"); this.setState(stateCopy); }) - .catch((error) => toastr.error(error)); + .catch(error => toastr.error(error)); } - } + }; onCloseAvatarEditor = () => { this.setState({ - visibleAvatarEditor: false, + visibleAvatarEditor: false }); - } + }; onEmailChange = event => { const emailRegex = /.+@.+\..+/; - const newEmail = (event && event.target.value) || this.state.dialog.newEmail; + const newEmail = + (event && event.target.value) || this.state.dialog.newEmail; const hasError = !emailRegex.test(newEmail); const dialog = { @@ -175,7 +193,9 @@ class SectionHeaderContent extends React.PureComponent { header: "Change email", body: ( - The activation instructions will be sent to the entered email + + The activation instructions will be sent to the entered email + { - sendInstructionsToChangeEmail(this.state.profile.id, this.state.dialog.newEmail) - .then((res) => { + sendInstructionsToChangeEmail( + this.state.profile.id, + this.state.dialog.newEmail + ) + .then(res => { toastr.success(res); }) - .catch((error) => toastr.error(error)) + .catch(error => toastr.error(error)) .finally(this.onDialogClose); - } + }; onPasswordChange = () => { const dialog = { @@ -216,8 +239,12 @@ class SectionHeaderContent extends React.PureComponent { header: "Change password", body: ( - Send the password change instructions to the {this.state.profile.email} email address - + Send the password change instructions to the{" "} + + {this.state.profile.email} + {" "} + email address + ), buttons: [