cozy-harvest-lib 13.4.0 → 13.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/components/AccountForm/__snapshots__/index.spec.jsx.snap +12 -8
- package/dist/components/AccountForm/index.js +28 -9
- package/dist/components/KonnectorConfiguration/DataTab/index.js +2 -2
- package/dist/components/KonnectorModalHeader.js +3 -2
- package/dist/components/NewAccountModal.js +11 -2
- package/dist/components/OAuthForm.js +13 -9
- package/dist/components/__snapshots__/OAuthForm.spec.js.snap +108 -42
- package/dist/components/cards/ConnectCard.js +20 -0
- package/dist/components/cards/InformationsCard.js +64 -0
- package/dist/cozy-ui.d.js +0 -0
- package/dist/helpers/getErrorMessage.js +19 -0
- package/dist/jest.setup.js +10 -1
- package/dist/locales/en.json +10 -2
- package/dist/locales/fr.json +10 -2
- package/dist/logger.d.js +1 -0
- package/dist/models/ConnectionFlow.js +22 -15
- package/dist/models/ConnectionFlow.spec.js +235 -176
- package/dist/policies/clisk.js +11 -5
- package/dist/policies/clisk.spec.js +66 -2
- package/jest.config.js +2 -2
- package/package.json +6 -4
- package/src/components/AccountForm/__snapshots__/index.spec.jsx.snap +12 -8
- package/src/components/AccountForm/index.jsx +53 -21
- package/src/components/KonnectorConfiguration/DataTab/index.jsx +2 -2
- package/src/components/KonnectorModalHeader.jsx +6 -2
- package/src/components/NewAccountModal.jsx +31 -16
- package/src/components/OAuthForm.jsx +13 -10
- package/src/components/__snapshots__/OAuthForm.spec.js.snap +108 -42
- package/src/components/cards/ConnectCard.tsx +29 -0
- package/src/components/cards/InformationsCard.tsx +74 -0
- package/src/cozy-ui.d.ts +14 -0
- package/src/helpers/getErrorMessage.ts +28 -0
- package/src/jest.setup.js +9 -0
- package/src/locales/en.json +10 -2
- package/src/locales/fr.json +10 -2
- package/src/logger.d.ts +2 -0
- package/src/models/ConnectionFlow.js +9 -7
- package/src/models/ConnectionFlow.spec.js +44 -2
- package/src/policies/clisk.js +9 -4
- package/src/policies/clisk.spec.js +55 -2
- package/tsconfig.json +11 -0
- package/dist/components/cards/WebsiteLinkCard.js +0 -59
- package/dist/components/cards/WebsiteLinkCard.spec.js +0 -32
- package/src/components/cards/WebsiteLinkCard.jsx +0 -63
- package/src/components/cards/WebsiteLinkCard.spec.jsx +0 -28
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,21 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [13.5.0](https://github.com/cozy/cozy-libs/compare/cozy-harvest-lib@13.4.0...cozy-harvest-lib@13.5.0) (2023-02-27)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* Add k konnector ([038a1f1](https://github.com/cozy/cozy-libs/commit/038a1f193057a2386b4c99ecc96f09bc00dfa1dc))
|
|
12
|
+
* **cozy-harvest:** Add locales for new account ([0476351](https://github.com/cozy/cozy-libs/commit/0476351a0220985cd5cd48483987158201c2a6db))
|
|
13
|
+
* **cozy-harvest:** Implement new account modal ([a1a2d97](https://github.com/cozy/cozy-libs/commit/a1a2d97639fb2c8c6f4066add6bfbcc1e47d8592))
|
|
14
|
+
* Enable TS on cozy-harvest ([0eb444b](https://github.com/cozy/cozy-libs/commit/0eb444b6265b27f88b057c1f79777b8cdc1fd86a))
|
|
15
|
+
* Send account and trigger to the launcher ([5d54d14](https://github.com/cozy/cozy-libs/commit/5d54d14aed91574f05de0a067bc93797cf841f99))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
6
21
|
# [13.4.0](https://github.com/cozy/cozy-libs/compare/cozy-harvest-lib@13.3.0...cozy-harvest-lib@13.4.0) (2023-02-21)
|
|
7
22
|
|
|
8
23
|
|
|
@@ -147,14 +147,18 @@ exports[`AccountForm should render normally when client side konnector with laun
|
|
|
147
147
|
inputRefByName={[Function]}
|
|
148
148
|
t={[Function]}
|
|
149
149
|
/>
|
|
150
|
-
<
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
150
|
+
<ConnectCard
|
|
151
|
+
buttonProps={
|
|
152
|
+
Object {
|
|
153
|
+
"busy": undefined,
|
|
154
|
+
"data-testid": "submit-btn",
|
|
155
|
+
"disabled": false,
|
|
156
|
+
"label": "Connect",
|
|
157
|
+
"onClick": [Function],
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
description="Connect testkonnector to your Cozy to synchronize your account and automatically retrieve all your data. "
|
|
161
|
+
title="Connect to your Cozy"
|
|
158
162
|
/>
|
|
159
163
|
</React.Fragment>
|
|
160
164
|
</div>
|
|
@@ -28,19 +28,20 @@ import Info from 'cozy-ui/transpiled/react/Icons/Info';
|
|
|
28
28
|
import { Media, Img, Bd } from 'cozy-ui/transpiled/react/Media';
|
|
29
29
|
import Typography from 'cozy-ui/transpiled/react/Typography';
|
|
30
30
|
import { Dialog } from 'cozy-ui/transpiled/react/CozyDialogs';
|
|
31
|
-
import withAdaptiveRouter from '../hoc/withRouter';
|
|
32
|
-
import withLocales from '../hoc/withLocales';
|
|
33
31
|
import AccountFields from './AccountFields';
|
|
32
|
+
import CannotConnectModal from './CannotConnectModal';
|
|
33
|
+
import ConnectionBackdrop from './ConnectionBackdrop';
|
|
34
34
|
import ReadOnlyIdentifier from './ReadOnlyIdentifier';
|
|
35
35
|
import TriggerErrorInfo from '../infos/TriggerErrorInfo';
|
|
36
|
-
import fieldHelpers, { getEncryptedFieldName, SECRET } from '../../helpers/fields';
|
|
37
|
-
import { KonnectorJobError } from '../../helpers/konnectors';
|
|
38
|
-
import { findKonnectorPolicy } from '../../konnector-policies';
|
|
39
36
|
import manifest from '../../helpers/manifest';
|
|
40
|
-
import
|
|
37
|
+
import withAdaptiveRouter from '../hoc/withRouter';
|
|
41
38
|
import withConnectionFlow from '../../models/withConnectionFlow';
|
|
42
|
-
import
|
|
43
|
-
import
|
|
39
|
+
import withKonnectorLocales from '../hoc/withKonnectorLocales';
|
|
40
|
+
import withLocales from '../hoc/withLocales';
|
|
41
|
+
import { ConnectCard } from '../cards/ConnectCard';
|
|
42
|
+
import { KonnectorJobError } from '../../helpers/konnectors';
|
|
43
|
+
import { findKonnectorPolicy } from '../../konnector-policies';
|
|
44
|
+
import fieldHelpers, { getEncryptedFieldName, SECRET } from '../../helpers/fields';
|
|
44
45
|
var VALIDATION_ERROR_REQUIRED_FIELD = 'VALIDATION_ERROR_REQUIRED_FIELD';
|
|
45
46
|
/**
|
|
46
47
|
* AccountForm is reponsible of generating a form which will allow user to
|
|
@@ -357,7 +358,25 @@ export var AccountForm = /*#__PURE__*/function (_PureComponent) {
|
|
|
357
358
|
variant: "body1",
|
|
358
359
|
component: "button",
|
|
359
360
|
onClick: _this3.showCannotConnectModal
|
|
360
|
-
}, t('accountForm.cannotConnectLink')), /*#__PURE__*/React.createElement(
|
|
361
|
+
}, t('accountForm.cannotConnectLink')), konnector.clientSide ? /*#__PURE__*/React.createElement(ConnectCard, {
|
|
362
|
+
title: t('accountForm.clientSide.title'),
|
|
363
|
+
description: t('accountForm.clientSide.description', {
|
|
364
|
+
name: konnector.name
|
|
365
|
+
}),
|
|
366
|
+
buttonProps: _defineProperty({
|
|
367
|
+
busy: submitting && !flag('harvest.inappconnectors.enabled'),
|
|
368
|
+
disabled: submitting || !_this3.isSubmittable({
|
|
369
|
+
dirty: dirty,
|
|
370
|
+
error: error,
|
|
371
|
+
initialValues: initialValues,
|
|
372
|
+
valid: valid
|
|
373
|
+
}),
|
|
374
|
+
label: t('accountForm.clientSide.submit'),
|
|
375
|
+
onClick: function onClick() {
|
|
376
|
+
return _this3.handleSubmit(values, form);
|
|
377
|
+
}
|
|
378
|
+
}, 'data-testid', 'submit-btn')
|
|
379
|
+
}) : /*#__PURE__*/React.createElement(Button, {
|
|
361
380
|
busy: submitting && !flag('harvest.inappconnectors.enabled'),
|
|
362
381
|
className: "u-mt-2 u-mb-1-half",
|
|
363
382
|
disabled: submitting || !_this3.isSubmittable({
|
|
@@ -13,7 +13,7 @@ import KonnectorUpdateInfos from '../../../components/infos/KonnectorUpdateInfos
|
|
|
13
13
|
import LaunchTriggerCard from '../../../components/cards/LaunchTriggerCard';
|
|
14
14
|
import KonnectorMaintenance from '../../../components/Maintenance';
|
|
15
15
|
import AppLinkCard from '../../../components/cards/AppLinkCard';
|
|
16
|
-
import
|
|
16
|
+
import { InformationsCard } from '../../../components/cards/InformationsCard';
|
|
17
17
|
import useMaintenanceStatus from '../../../components/hooks/useMaintenanceStatus';
|
|
18
18
|
import getRelatedAppsSlugs from '../../../models/getRelatedAppsSlugs';
|
|
19
19
|
import appLinksProps from '../../../components/KonnectorConfiguration/DataTab/appLinksProps';
|
|
@@ -86,7 +86,7 @@ export var DataTab = function DataTab(_ref) {
|
|
|
86
86
|
account: account,
|
|
87
87
|
trigger: trigger,
|
|
88
88
|
konnector: konnector
|
|
89
|
-
}), konnector.vendor_link && /*#__PURE__*/React.createElement(
|
|
89
|
+
}), konnector.vendor_link && /*#__PURE__*/React.createElement(InformationsCard, {
|
|
90
90
|
link: konnector.vendor_link
|
|
91
91
|
}))));
|
|
92
92
|
};
|
|
@@ -15,13 +15,14 @@ var resetFontStyles = {
|
|
|
15
15
|
|
|
16
16
|
var KonnectorModalHeader = function KonnectorModalHeader(_ref) {
|
|
17
17
|
var konnector = _ref.konnector,
|
|
18
|
-
children = _ref.children
|
|
18
|
+
children = _ref.children,
|
|
19
|
+
className = _ref.className;
|
|
19
20
|
|
|
20
21
|
var _useDialogContext = useDialogContext(),
|
|
21
22
|
dialogTitleProps = _useDialogContext.dialogTitleProps;
|
|
22
23
|
|
|
23
24
|
return /*#__PURE__*/React.createElement(DialogTitle, _extends({}, dialogTitleProps, {
|
|
24
|
-
className:
|
|
25
|
+
className: cx('u-pb-half', className),
|
|
25
26
|
disableTypography: true
|
|
26
27
|
}), /*#__PURE__*/React.createElement(Media, null, /*#__PURE__*/React.createElement(Img, {
|
|
27
28
|
className: cx('u-mr-1', _defineProperty({}, children === null ? 'u-w-2 u-h-2' : 'u-w-3 u-h-3', true))
|
|
@@ -16,6 +16,8 @@ import KonnectorMaintenance from './Maintenance';
|
|
|
16
16
|
import useMaintenanceStatus from './hooks/useMaintenanceStatus';
|
|
17
17
|
import { MountPointContext } from './MountPointContext';
|
|
18
18
|
import { useDialogContext } from './DialogContext';
|
|
19
|
+
import { InformationsCard } from './cards/InformationsCard';
|
|
20
|
+
import KonnectorModalHeader from './KonnectorModalHeader';
|
|
19
21
|
/**
|
|
20
22
|
* We need to deal with `onLoginSuccess` and `onSucess` because we
|
|
21
23
|
* can have a `onSuccess` without having a `onLoginSuccess` since only
|
|
@@ -43,6 +45,7 @@ var NewAccountModal = function NewAccountModal(_ref) {
|
|
|
43
45
|
maintenanceMessages = _useMaintenanceStatus2.messages;
|
|
44
46
|
|
|
45
47
|
var isMaintenanceLoaded = fetchStatus === 'loaded' || fetchStatus === 'failed';
|
|
48
|
+
var serverSideKonnector = !(konnector.oauth || konnector.clientSide);
|
|
46
49
|
|
|
47
50
|
var _useDialogContext = useDialogContext(),
|
|
48
51
|
dialogTitleProps = _useDialogContext.dialogTitleProps;
|
|
@@ -65,7 +68,7 @@ var NewAccountModal = function NewAccountModal(_ref) {
|
|
|
65
68
|
replaceHistory("/accounts/".concat(accountId));
|
|
66
69
|
};
|
|
67
70
|
|
|
68
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DialogTitle, _extends({}, dialogTitleProps, {
|
|
71
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, serverSideKonnector ? /*#__PURE__*/React.createElement(DialogTitle, _extends({}, dialogTitleProps, {
|
|
69
72
|
className: cx(dialogTitleProps.className, 'u-ta-center u-flex-column u-stack-m u-pb-1'),
|
|
70
73
|
disableTypography: true
|
|
71
74
|
}), /*#__PURE__*/React.createElement(KonnectorIcon, {
|
|
@@ -75,7 +78,10 @@ var NewAccountModal = function NewAccountModal(_ref) {
|
|
|
75
78
|
variant: "h5"
|
|
76
79
|
}, t('modal.addAccount.title', {
|
|
77
80
|
name: konnector.name
|
|
78
|
-
}))))
|
|
81
|
+
})))) : /*#__PURE__*/React.createElement(KonnectorModalHeader, {
|
|
82
|
+
className: "u-elevation-1 u-mb-1",
|
|
83
|
+
konnector: konnector
|
|
84
|
+
}), !isMaintenanceLoaded ? /*#__PURE__*/React.createElement(DialogContent, {
|
|
79
85
|
className: "u-ta-center u-pt-1 u-pb-3"
|
|
80
86
|
}, /*#__PURE__*/React.createElement(Spinner, {
|
|
81
87
|
size: "xxlarge"
|
|
@@ -91,6 +97,9 @@ var NewAccountModal = function NewAccountModal(_ref) {
|
|
|
91
97
|
onSuccess: handleSuccess,
|
|
92
98
|
onVaultDismiss: onDismiss,
|
|
93
99
|
fieldOptions: fieldOptions
|
|
100
|
+
}), !serverSideKonnector && /*#__PURE__*/React.createElement(InformationsCard, {
|
|
101
|
+
className: "u-mt-1",
|
|
102
|
+
link: konnector.vendor_link
|
|
94
103
|
}), /*#__PURE__*/React.createElement("div", {
|
|
95
104
|
className: "u-mb-2"
|
|
96
105
|
})));
|
|
@@ -4,7 +4,6 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
|
4
4
|
import React, { useCallback, useEffect, useState } from 'react';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
6
|
import compose from 'lodash/flowRight';
|
|
7
|
-
import Button from 'cozy-ui/transpiled/react/Button';
|
|
8
7
|
import { useFlowState } from '../models/withConnectionFlow';
|
|
9
8
|
import useOAuthExtraParams from './hooks/useOAuthExtraParams';
|
|
10
9
|
import withLocales from './hoc/withLocales';
|
|
@@ -18,6 +17,7 @@ import isEqual from 'lodash/isEqual';
|
|
|
18
17
|
import { useClient } from 'cozy-client';
|
|
19
18
|
import { OAUTH_SERVICE_ERROR, OAUTH_SERVICE_OK, openOAuthWindow } from './OAuthService';
|
|
20
19
|
import { useWebviewIntent } from 'cozy-intent';
|
|
20
|
+
import { ConnectCard } from './cards/ConnectCard';
|
|
21
21
|
/**
|
|
22
22
|
* The OAuth Form is responsible for displaying a form for OAuth konnectors. It
|
|
23
23
|
* starts the OAuth process
|
|
@@ -130,18 +130,22 @@ export var OAuthForm = function OAuthForm(props) {
|
|
|
130
130
|
var error = flowState.error;
|
|
131
131
|
var isBusy = showOAuthWindow || flowState.running || needsExtraParams && !extraParams;
|
|
132
132
|
var isBankingKonnector = (_konnector$categories = konnector.categories) === null || _konnector$categories === void 0 ? void 0 : _konnector$categories.includes('banking');
|
|
133
|
-
var buttonLabel = reconnect ? isBankingKonnector ? 'oauth.banking.reconnect.label' : 'oauth.reconnect.label' : isBankingKonnector ? 'oauth.banking.connect.label' : 'oauth.connect.
|
|
133
|
+
var buttonLabel = reconnect ? isBankingKonnector ? 'oauth.banking.reconnect.label' : 'oauth.reconnect.label' : isBankingKonnector ? 'oauth.banking.connect.label' : 'oauth.connect.submit';
|
|
134
134
|
return /*#__PURE__*/React.createElement(React.Fragment, null, error && /*#__PURE__*/React.createElement(TriggerErrorInfo, {
|
|
135
135
|
className: "u-mb-1",
|
|
136
136
|
error: error,
|
|
137
137
|
konnector: konnector
|
|
138
|
-
}), !reconnect && /*#__PURE__*/React.createElement(
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
138
|
+
}), !reconnect && /*#__PURE__*/React.createElement(ConnectCard, {
|
|
139
|
+
title: t('oauth.connect.title'),
|
|
140
|
+
description: t('oauth.connect.description', {
|
|
141
|
+
name: konnector.name
|
|
142
|
+
}),
|
|
143
|
+
buttonProps: {
|
|
144
|
+
busy: isBusy,
|
|
145
|
+
disabled: isBusy,
|
|
146
|
+
label: t(buttonLabel),
|
|
147
|
+
onClick: handleConnect
|
|
148
|
+
}
|
|
145
149
|
}));
|
|
146
150
|
};
|
|
147
151
|
OAuthForm.propTypes = {
|
|
@@ -34,37 +34,59 @@ exports[`OAuthForm should handle oauth cancelation 1`] = `
|
|
|
34
34
|
</div>
|
|
35
35
|
</div>
|
|
36
36
|
</div>
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
aria-disabled="true"
|
|
40
|
-
class="styles__c-btn___-2Vnj styles__c-btn--full___2VmR1 styles__c-btn--center___16_Xh u-mt-1"
|
|
41
|
-
disabled=""
|
|
42
|
-
type="submit"
|
|
37
|
+
<div
|
|
38
|
+
class="styles__c-card___YgP7B u-flex u-flex-wrap"
|
|
43
39
|
>
|
|
44
|
-
<
|
|
40
|
+
<div
|
|
41
|
+
class="styles__c-empty___3w5oV"
|
|
42
|
+
>
|
|
43
|
+
CloudSync2
|
|
44
|
+
<h3
|
|
45
|
+
class="MuiTypography-root MuiTypography-h3 MuiTypography-colorTextPrimary MuiTypography-gutterBottom"
|
|
46
|
+
>
|
|
47
|
+
oauth.connect.title
|
|
48
|
+
</h3>
|
|
49
|
+
<p
|
|
50
|
+
class="MuiTypography-root MuiTypography-body1 MuiTypography-colorTextSecondary MuiTypography-gutterBottom"
|
|
51
|
+
>
|
|
52
|
+
oauth.connect.description
|
|
53
|
+
</p>
|
|
54
|
+
<div
|
|
55
|
+
class="styles__c-empty-text___3HnvR"
|
|
56
|
+
/>
|
|
57
|
+
</div>
|
|
58
|
+
<button
|
|
59
|
+
aria-busy="true"
|
|
60
|
+
aria-disabled="true"
|
|
61
|
+
class="styles__c-btn___-2Vnj styles__c-btn--center___16_Xh u-mh-auto"
|
|
62
|
+
disabled=""
|
|
63
|
+
type="submit"
|
|
64
|
+
>
|
|
45
65
|
<span>
|
|
46
|
-
|
|
66
|
+
<span>
|
|
67
|
+
oauth.connect.submit
|
|
68
|
+
</span>
|
|
69
|
+
<svg
|
|
70
|
+
aria-busy="true"
|
|
71
|
+
aria-hidden="true"
|
|
72
|
+
class="u-ml-half styles__icon___23x3R styles__icon--spin___ybfC1"
|
|
73
|
+
focusable="false"
|
|
74
|
+
height="16"
|
|
75
|
+
role="progressbar"
|
|
76
|
+
viewBox="0 0 32 32"
|
|
77
|
+
width="16"
|
|
78
|
+
>
|
|
79
|
+
<path
|
|
80
|
+
d="M16 0a16 16 0 000 32 16 16 0 000-32m0 4a12 12 0 010 24 12 12 0 010-24"
|
|
81
|
+
opacity="0.25"
|
|
82
|
+
/>
|
|
83
|
+
<path
|
|
84
|
+
d="M16 0a16 16 0 0116 16h-4A12 12 0 0016 4z"
|
|
85
|
+
/>
|
|
86
|
+
</svg>
|
|
47
87
|
</span>
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
aria-hidden="true"
|
|
51
|
-
class="u-ml-half styles__icon___23x3R styles__icon--spin___ybfC1"
|
|
52
|
-
focusable="false"
|
|
53
|
-
height="16"
|
|
54
|
-
role="progressbar"
|
|
55
|
-
viewBox="0 0 32 32"
|
|
56
|
-
width="16"
|
|
57
|
-
>
|
|
58
|
-
<path
|
|
59
|
-
d="M16 0a16 16 0 000 32 16 16 0 000-32m0 4a12 12 0 010 24 12 12 0 010-24"
|
|
60
|
-
opacity="0.25"
|
|
61
|
-
/>
|
|
62
|
-
<path
|
|
63
|
-
d="M16 0a16 16 0 0116 16h-4A12 12 0 0016 4z"
|
|
64
|
-
/>
|
|
65
|
-
</svg>
|
|
66
|
-
</span>
|
|
67
|
-
</button>
|
|
88
|
+
</button>
|
|
89
|
+
</div>
|
|
68
90
|
</div>
|
|
69
91
|
`;
|
|
70
92
|
|
|
@@ -100,30 +122,74 @@ exports[`OAuthForm should handle oauth cancelation 2`] = `
|
|
|
100
122
|
</div>
|
|
101
123
|
</div>
|
|
102
124
|
</div>
|
|
103
|
-
<
|
|
104
|
-
class="styles__c-
|
|
105
|
-
type="submit"
|
|
125
|
+
<div
|
|
126
|
+
class="styles__c-card___YgP7B u-flex u-flex-wrap"
|
|
106
127
|
>
|
|
107
|
-
<
|
|
128
|
+
<div
|
|
129
|
+
class="styles__c-empty___3w5oV"
|
|
130
|
+
>
|
|
131
|
+
CloudSync2
|
|
132
|
+
<h3
|
|
133
|
+
class="MuiTypography-root MuiTypography-h3 MuiTypography-colorTextPrimary MuiTypography-gutterBottom"
|
|
134
|
+
>
|
|
135
|
+
oauth.connect.title
|
|
136
|
+
</h3>
|
|
137
|
+
<p
|
|
138
|
+
class="MuiTypography-root MuiTypography-body1 MuiTypography-colorTextSecondary MuiTypography-gutterBottom"
|
|
139
|
+
>
|
|
140
|
+
oauth.connect.description
|
|
141
|
+
</p>
|
|
142
|
+
<div
|
|
143
|
+
class="styles__c-empty-text___3HnvR"
|
|
144
|
+
/>
|
|
145
|
+
</div>
|
|
146
|
+
<button
|
|
147
|
+
class="styles__c-btn___-2Vnj styles__c-btn--center___16_Xh u-mh-auto"
|
|
148
|
+
type="submit"
|
|
149
|
+
>
|
|
108
150
|
<span>
|
|
109
|
-
|
|
151
|
+
<span>
|
|
152
|
+
oauth.connect.submit
|
|
153
|
+
</span>
|
|
110
154
|
</span>
|
|
111
|
-
</
|
|
112
|
-
</
|
|
155
|
+
</button>
|
|
156
|
+
</div>
|
|
113
157
|
</div>
|
|
114
158
|
`;
|
|
115
159
|
|
|
116
160
|
exports[`OAuthForm should render 1`] = `
|
|
117
161
|
<div>
|
|
118
|
-
<
|
|
119
|
-
class="styles__c-
|
|
120
|
-
type="submit"
|
|
162
|
+
<div
|
|
163
|
+
class="styles__c-card___YgP7B u-flex u-flex-wrap"
|
|
121
164
|
>
|
|
122
|
-
<
|
|
165
|
+
<div
|
|
166
|
+
class="styles__c-empty___3w5oV"
|
|
167
|
+
>
|
|
168
|
+
CloudSync2
|
|
169
|
+
<h3
|
|
170
|
+
class="MuiTypography-root MuiTypography-h3 MuiTypography-colorTextPrimary MuiTypography-gutterBottom"
|
|
171
|
+
>
|
|
172
|
+
oauth.connect.title
|
|
173
|
+
</h3>
|
|
174
|
+
<p
|
|
175
|
+
class="MuiTypography-root MuiTypography-body1 MuiTypography-colorTextSecondary MuiTypography-gutterBottom"
|
|
176
|
+
>
|
|
177
|
+
oauth.connect.description
|
|
178
|
+
</p>
|
|
179
|
+
<div
|
|
180
|
+
class="styles__c-empty-text___3HnvR"
|
|
181
|
+
/>
|
|
182
|
+
</div>
|
|
183
|
+
<button
|
|
184
|
+
class="styles__c-btn___-2Vnj styles__c-btn--center___16_Xh u-mh-auto"
|
|
185
|
+
type="submit"
|
|
186
|
+
>
|
|
123
187
|
<span>
|
|
124
|
-
|
|
188
|
+
<span>
|
|
189
|
+
oauth.connect.submit
|
|
190
|
+
</span>
|
|
125
191
|
</span>
|
|
126
|
-
</
|
|
127
|
-
</
|
|
192
|
+
</button>
|
|
193
|
+
</div>
|
|
128
194
|
</div>
|
|
129
195
|
`;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import Button from 'cozy-ui/transpiled/react/Button';
|
|
4
|
+
import Card from 'cozy-ui/transpiled/react/Card';
|
|
5
|
+
import Empty from 'cozy-ui/transpiled/react/Empty';
|
|
6
|
+
import CloudSync2 from 'cozy-ui/transpiled/react/Icons/CloudSync2';
|
|
7
|
+
export var ConnectCard = function ConnectCard(_ref) {
|
|
8
|
+
var buttonProps = _ref.buttonProps,
|
|
9
|
+
description = _ref.description,
|
|
10
|
+
title = _ref.title;
|
|
11
|
+
return /*#__PURE__*/React.createElement(Card, {
|
|
12
|
+
className: "u-flex u-flex-wrap"
|
|
13
|
+
}, /*#__PURE__*/React.createElement(Empty, {
|
|
14
|
+
icon: CloudSync2,
|
|
15
|
+
title: title,
|
|
16
|
+
text: description
|
|
17
|
+
}), /*#__PURE__*/React.createElement(Button, _extends({
|
|
18
|
+
className: "u-mh-auto"
|
|
19
|
+
}, buttonProps)));
|
|
20
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import cx from 'classnames';
|
|
3
|
+
import Card from 'cozy-ui/transpiled/react/Card';
|
|
4
|
+
import Divider from 'cozy-ui/transpiled/react/MuiCozyTheme/Divider';
|
|
5
|
+
import GlobeIcon from 'cozy-ui/transpiled/react/Icons/Globe';
|
|
6
|
+
import Icon from 'cozy-ui/transpiled/react/Icon';
|
|
7
|
+
import List from 'cozy-ui/transpiled/react/MuiCozyTheme/List';
|
|
8
|
+
import ListItem from 'cozy-ui/transpiled/react/MuiCozyTheme/ListItem';
|
|
9
|
+
import ListItemIcon from 'cozy-ui/transpiled/react/MuiCozyTheme/ListItemIcon';
|
|
10
|
+
import Typography from 'cozy-ui/transpiled/react/Typography';
|
|
11
|
+
import logger from '../../logger';
|
|
12
|
+
import { ListItemText } from '@material-ui/core';
|
|
13
|
+
import { getErrorMessage } from '../../helpers/getErrorMessage';
|
|
14
|
+
import { useI18n } from 'cozy-ui/transpiled/react/I18n';
|
|
15
|
+
|
|
16
|
+
var getLabel = function getLabel(link) {
|
|
17
|
+
if (!link) return null;
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
var url = new URL(link);
|
|
21
|
+
return url.host;
|
|
22
|
+
} catch (error) {
|
|
23
|
+
logger('warn', getErrorMessage(error));
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export var InformationsCard = function InformationsCard(_ref) {
|
|
29
|
+
var className = _ref.className,
|
|
30
|
+
link = _ref.link;
|
|
31
|
+
|
|
32
|
+
var _useI18n = useI18n(),
|
|
33
|
+
t = _useI18n.t;
|
|
34
|
+
|
|
35
|
+
var label = getLabel(link);
|
|
36
|
+
if (!label) return null;
|
|
37
|
+
return /*#__PURE__*/React.createElement(Card, {
|
|
38
|
+
className: cx('u-p-0', className)
|
|
39
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
40
|
+
className: "u-ph-1 u-flex u-flex-items-center",
|
|
41
|
+
style: {
|
|
42
|
+
minHeight: '64px'
|
|
43
|
+
}
|
|
44
|
+
}, /*#__PURE__*/React.createElement(Typography, {
|
|
45
|
+
variant: "h5"
|
|
46
|
+
}, t('card.websiteLink.title'))), /*#__PURE__*/React.createElement(Divider, {
|
|
47
|
+
className: "u-ml-0 u-maw-100 u-mb-half"
|
|
48
|
+
}), /*#__PURE__*/React.createElement(List, {
|
|
49
|
+
className: "u-p-0"
|
|
50
|
+
}, /*#__PURE__*/React.createElement(ListItem, {
|
|
51
|
+
button: true,
|
|
52
|
+
className: "u-mb-half",
|
|
53
|
+
component: "a",
|
|
54
|
+
href: link,
|
|
55
|
+
target: "_blank"
|
|
56
|
+
}, /*#__PURE__*/React.createElement(ListItemIcon, null, /*#__PURE__*/React.createElement(Icon, {
|
|
57
|
+
icon: GlobeIcon,
|
|
58
|
+
size: 16,
|
|
59
|
+
color: "textPrimary"
|
|
60
|
+
})), /*#__PURE__*/React.createElement(ListItemText, {
|
|
61
|
+
primary: t('card.websiteLink.description'),
|
|
62
|
+
secondary: label
|
|
63
|
+
}))));
|
|
64
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
var isErrorWithMessage = function isErrorWithMessage(error) {
|
|
2
|
+
return typeof error === 'object' && error !== null && 'message' in error && typeof error.message === 'string';
|
|
3
|
+
};
|
|
4
|
+
|
|
5
|
+
var toErrorWithMessage = function toErrorWithMessage(maybeError) {
|
|
6
|
+
if (isErrorWithMessage(maybeError)) return maybeError;
|
|
7
|
+
|
|
8
|
+
try {
|
|
9
|
+
return new Error(JSON.stringify(maybeError));
|
|
10
|
+
} catch (_unused) {
|
|
11
|
+
// fallback in case there's an error stringifying the maybeError
|
|
12
|
+
// like with circular references for example.
|
|
13
|
+
return new Error(String(maybeError));
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export var getErrorMessage = function getErrorMessage(error) {
|
|
18
|
+
return toErrorWithMessage(error).message;
|
|
19
|
+
};
|
package/dist/jest.setup.js
CHANGED
|
@@ -41,4 +41,13 @@ console.warn = function (message, component) {
|
|
|
41
41
|
console.error = function () {
|
|
42
42
|
originalConsoleError.apply(this, arguments);
|
|
43
43
|
throw new Error('console.error should not be called during tests');
|
|
44
|
-
};
|
|
44
|
+
}; // Needed for now because `cozy-ui` can't be updated to the latest version in devDependencies
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
jest.mock('cozy-ui/transpiled/react/Icons/CloudSync2', function () {
|
|
48
|
+
return function () {
|
|
49
|
+
return 'CloudSync2';
|
|
50
|
+
};
|
|
51
|
+
}, {
|
|
52
|
+
virtual: true
|
|
53
|
+
});
|
package/dist/locales/en.json
CHANGED
|
@@ -27,7 +27,12 @@
|
|
|
27
27
|
"noAccount": "If you do not have an account you will need to create one on the [%{vendorName}](%{vendorLink})'s website."
|
|
28
28
|
},
|
|
29
29
|
"cannotConnectLink": "I can't connect",
|
|
30
|
-
"notClientSide": "The %{name} application uses a brand-new and efficient system for retrieving your data from your Cozy. This action is only accessible from the Cozy mobile app."
|
|
30
|
+
"notClientSide": "The %{name} application uses a brand-new and efficient system for retrieving your data from your Cozy. This action is only accessible from the Cozy mobile app.",
|
|
31
|
+
"clientSide": {
|
|
32
|
+
"title": "Connect to your Cozy",
|
|
33
|
+
"submit": "Connect",
|
|
34
|
+
"description": "Connect %{name} to your Cozy to synchronize your account and automatically retrieve all your data. "
|
|
35
|
+
}
|
|
31
36
|
},
|
|
32
37
|
"contracts": {
|
|
33
38
|
"headers": {
|
|
@@ -424,7 +429,10 @@
|
|
|
424
429
|
"label": "Reconnect"
|
|
425
430
|
},
|
|
426
431
|
"connect": {
|
|
427
|
-
"
|
|
432
|
+
"description": "Connect %{slug} to your Cozy to synchronize your account and automatically retrieve all your data.",
|
|
433
|
+
"label": "Connect",
|
|
434
|
+
"submit": "Connect",
|
|
435
|
+
"title": "Connect to your Cozy"
|
|
428
436
|
},
|
|
429
437
|
"window": {
|
|
430
438
|
"title": "OAuth"
|
package/dist/locales/fr.json
CHANGED
|
@@ -27,7 +27,12 @@
|
|
|
27
27
|
"noAccount": "Si vous n'avez pas de compte il vous faudra en créer sur le site [%{vendorName}](%{vendorLink})."
|
|
28
28
|
},
|
|
29
29
|
"cannotConnectLink": "Je ne parviens pas à me connecter",
|
|
30
|
-
"notClientSide": "L'application %{name} utilise un nouveau système plus efficace pour la récupération de vos données dans votre Cozy. Cette action est uniquement accessible depuis l’application mobile Cozy."
|
|
30
|
+
"notClientSide": "L'application %{name} utilise un nouveau système plus efficace pour la récupération de vos données dans votre Cozy. Cette action est uniquement accessible depuis l’application mobile Cozy.",
|
|
31
|
+
"clientSide": {
|
|
32
|
+
"title": "Connecter à mon Cozy",
|
|
33
|
+
"submit": "Connecter",
|
|
34
|
+
"description": "Connectez %{name} à votre Cozy pour synchroniser votre compte et récupérer automatiquement vos données."
|
|
35
|
+
}
|
|
31
36
|
},
|
|
32
37
|
"contracts": {
|
|
33
38
|
"headers": {
|
|
@@ -424,7 +429,10 @@
|
|
|
424
429
|
"label": "Se reconnecter"
|
|
425
430
|
},
|
|
426
431
|
"connect": {
|
|
427
|
-
"
|
|
432
|
+
"description": "Connectez %{name} à votre Cozy pour synchroniser votre compte et récupérer automatiquement vos données.",
|
|
433
|
+
"label": "Ajouter un compte",
|
|
434
|
+
"submit": "Connecter",
|
|
435
|
+
"title": "Connecter à mon Cozy"
|
|
428
436
|
},
|
|
429
437
|
"window": {
|
|
430
438
|
"title": "OAuth"
|
package/dist/logger.d.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -924,7 +924,24 @@ export var ConnectionFlow = /*#__PURE__*/function () {
|
|
|
924
924
|
case 0:
|
|
925
925
|
_ref5 = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : {}, _ref5$autoSuccessTime = _ref5.autoSuccessTimer, autoSuccessTimer = _ref5$autoSuccessTime === void 0 ? true : _ref5$autoSuccessTime;
|
|
926
926
|
konnectorPolicy = findKonnectorPolicy(this.konnector);
|
|
927
|
+
computedAutoSuccessTimer = autoSuccessTimer;
|
|
928
|
+
logger.info('ConnectionFlow: Launching job...');
|
|
929
|
+
this.setState({
|
|
930
|
+
status: PENDING
|
|
931
|
+
});
|
|
932
|
+
|
|
933
|
+
if (!this.trigger) {
|
|
934
|
+
_context9.next = 9;
|
|
935
|
+
break;
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
_context9.next = 8;
|
|
939
|
+
return prepareTriggerAccount(this.client, this.trigger);
|
|
927
940
|
|
|
941
|
+
case 8:
|
|
942
|
+
this.account = _context9.sent;
|
|
943
|
+
|
|
944
|
+
case 9:
|
|
928
945
|
if (konnectorPolicy.onLaunch) {
|
|
929
946
|
konnectorPolicy.onLaunch({
|
|
930
947
|
konnector: this.konnector,
|
|
@@ -934,35 +951,25 @@ export var ConnectionFlow = /*#__PURE__*/function () {
|
|
|
934
951
|
}
|
|
935
952
|
|
|
936
953
|
if (konnectorPolicy.needsTriggerLaunch) {
|
|
937
|
-
_context9.next =
|
|
954
|
+
_context9.next = 12;
|
|
938
955
|
break;
|
|
939
956
|
}
|
|
940
957
|
|
|
941
958
|
return _context9.abrupt("return");
|
|
942
959
|
|
|
943
|
-
case
|
|
944
|
-
computedAutoSuccessTimer = autoSuccessTimer;
|
|
945
|
-
logger.info('ConnectionFlow: Launching job...');
|
|
946
|
-
this.setState({
|
|
947
|
-
status: PENDING
|
|
948
|
-
});
|
|
949
|
-
_context9.next = 10;
|
|
950
|
-
return prepareTriggerAccount(this.client, this.trigger);
|
|
951
|
-
|
|
952
|
-
case 10:
|
|
953
|
-
this.account = _context9.sent;
|
|
960
|
+
case 12:
|
|
954
961
|
this.realtime.subscribe('updated', ACCOUNTS_DOCTYPE, this.account._id, this.handleAccountUpdated);
|
|
955
962
|
logger.info("ConnectionFlow: Subscribed to ".concat(ACCOUNTS_DOCTYPE, ":").concat(this.account._id));
|
|
956
|
-
_context9.next =
|
|
963
|
+
_context9.next = 16;
|
|
957
964
|
return launchTrigger(this.client, this.trigger);
|
|
958
965
|
|
|
959
|
-
case
|
|
966
|
+
case 16:
|
|
960
967
|
this.job = _context9.sent;
|
|
961
968
|
this.watchJob({
|
|
962
969
|
autoSuccessTimer: computedAutoSuccessTimer
|
|
963
970
|
});
|
|
964
971
|
|
|
965
|
-
case
|
|
972
|
+
case 18:
|
|
966
973
|
case "end":
|
|
967
974
|
return _context9.stop();
|
|
968
975
|
}
|