diff --git a/.eslintrc b/.eslintrc index a56727e2c4..c22e9fa16d 100644 --- a/.eslintrc +++ b/.eslintrc @@ -8,13 +8,11 @@ "modules": true } }, - "extends": [ - "airbnb" - ], + "extends": ["airbnb", "prettier", "prettier/react"], "settings": { - 'import/resolver': { - webpack: { - config: 'webpack.config.js' + "import/resolver": { + "webpack": { + "config": "webpack.config.js" } }, "react": { @@ -33,16 +31,16 @@ "camelcase": "off", "arrow-parens": "off", "comma-dangle": "off", - // https://github.com/benmosher/eslint-plugin-import/issues/479#issuecomment-252500896 + "//": "https://github.com/benmosher/eslint-plugin-import/issues/479#issuecomment-252500896", "import/no-extraneous-dependencies": "off", - "indent": ["error", 2, { - "SwitchCase": 1 - }], - "max-len": ["error", { - "code": 100, - "ignoreStrings": true, - "ignoreTemplateLiterals": true - }], + "max-len": [ + "error", + { + "code": 100, + "ignoreStrings": true, + "ignoreTemplateLiterals": true + } + ], "no-continue": "off", "no-debugger": "off", "no-mixed-operators": "off", @@ -52,7 +50,6 @@ "no-use-before-define": "off", "no-multiple-empty-lines": ["error", { "max": 1 }], "object-curly-newline": "off", - "space-before-function-paren": ["error", "always"], "no-trailing-spaces": ["error"], "no-unused-expressions": ["error", { "allowShortCircuit": true }], "react/prefer-stateless-function": "off", diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000..93b2f46c80 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "printWidth": 80, + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "trailingComma": "es5", + "bracketSpacing": true +} diff --git a/package-lock.json b/package-lock.json index e6af746ba0..a1783d92e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6018,6 +6018,23 @@ "object.entries": "^1.0.4" } }, + "eslint-config-prettier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-5.0.0.tgz", + "integrity": "sha512-c17Aqiz5e8LEqoc/QPmYnaxQFAHTx2KlCZBPxXXjEMmNchOLnV/7j0HoPZuC+rL/tDC9bazUYOKJW9bOhftI/w==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + }, + "dependencies": { + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + } + } + }, "eslint-import-resolver-node": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", @@ -7157,8 +7174,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -7179,14 +7195,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7201,20 +7215,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -7331,8 +7342,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -7344,7 +7354,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -7359,7 +7368,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -7367,14 +7375,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -7393,7 +7399,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -7474,8 +7479,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -7487,7 +7491,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -7573,8 +7576,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -7610,7 +7612,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -7630,7 +7631,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -7674,14 +7674,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -12780,6 +12778,12 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, + "prettier": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", + "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", + "dev": true + }, "pretty-format": { "version": "23.6.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", diff --git a/package.json b/package.json index 8a81e028f9..5ed872d98f 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "lint": "eslint --ext .js --ext .jsx .", "add-locale": "lingui add-locale", "extract-strings": "lingui extract", - "compile-strings": "lingui compile" + "compile-strings": "lingui compile", + "prettier": "prettier --write \"src/**/*.{js,jsx,scss}\"" }, "keywords": [], "author": "", @@ -36,6 +37,7 @@ "enzyme-to-json": "^3.3.5", "eslint": "^5.6.0", "eslint-config-airbnb": "^17.1.0", + "eslint-config-prettier": "^5.0.0", "eslint-import-resolver-webpack": "0.11.1", "eslint-plugin-import": "^2.14.0", "eslint-plugin-jsx-a11y": "^6.1.1", @@ -44,6 +46,7 @@ "history": "^4.9.0", "jest": "^24.7.1", "node-sass": "^4.12.0", + "prettier": "^1.18.2", "react-hot-loader": "^4.3.3", "sass-loader": "^7.1.0", "style-loader": "^0.23.0", diff --git a/src/api/mixins/Notifications.mixin.js b/src/api/mixins/Notifications.mixin.js index 85e37dc3f3..9072e30874 100644 --- a/src/api/mixins/Notifications.mixin.js +++ b/src/api/mixins/Notifications.mixin.js @@ -1,61 +1,102 @@ -const NotificationsMixin = (parent) => class extends parent { - readNotificationTemplates (id, params = {}) { - return this.http.get(`${this.baseUrl}${id}/notification_templates/`, { params }); - } - - readNotificationTemplatesSuccess (id, params = {}) { - return this.http.get(`${this.baseUrl}${id}/notification_templates_success/`, { params }); - } - - readNotificationTemplatesError (id, params = {}) { - return this.http.get(`${this.baseUrl}${id}/notification_templates_error/`, { params }); - } - - associateNotificationTemplatesSuccess (resourceId, notificationId) { - return this.http.post(`${this.baseUrl}${resourceId}/notification_templates_success/`, { id: notificationId }); - } - - disassociateNotificationTemplatesSuccess (resourceId, notificationId) { - return this.http.post(`${this.baseUrl}${resourceId}/notification_templates_success/`, { id: notificationId, disassociate: true }); - } - - associateNotificationTemplatesError (resourceId, notificationId) { - return this.http.post(`${this.baseUrl}${resourceId}/notification_templates_error/`, { id: notificationId }); - } - - disassociateNotificationTemplatesError (resourceId, notificationId) { - return this.http.post(`${this.baseUrl}${resourceId}/notification_templates_error/`, { id: notificationId, disassociate: true }); - } - - /** - * This is a helper method meant to simplify setting the "on" or "off" status of - * a related notification. - * - * @param[resourceId] - id of the base resource - * @param[notificationId] - id of the notification - * @param[notificationType] - the type of notification, options are "success" and "error" - * @param[associationState] - Boolean for associating or disassociating, options are true or false - */ - // eslint-disable-next-line max-len - updateNotificationTemplateAssociation (resourceId, notificationId, notificationType, associationState) { - if (notificationType === 'success' && associationState === true) { - return this.associateNotificationTemplatesSuccess(resourceId, notificationId); +const NotificationsMixin = parent => + class extends parent { + readNotificationTemplates(id, params = {}) { + return this.http.get(`${this.baseUrl}${id}/notification_templates/`, { + params, + }); } - if (notificationType === 'success' && associationState === false) { - return this.disassociateNotificationTemplatesSuccess(resourceId, notificationId); + readNotificationTemplatesSuccess(id, params = {}) { + return this.http.get( + `${this.baseUrl}${id}/notification_templates_success/`, + { params } + ); } - if (notificationType === 'error' && associationState === true) { - return this.associateNotificationTemplatesError(resourceId, notificationId); + readNotificationTemplatesError(id, params = {}) { + return this.http.get( + `${this.baseUrl}${id}/notification_templates_error/`, + { params } + ); } - if (notificationType === 'error' && associationState === false) { - return this.disassociateNotificationTemplatesError(resourceId, notificationId); + associateNotificationTemplatesSuccess(resourceId, notificationId) { + return this.http.post( + `${this.baseUrl}${resourceId}/notification_templates_success/`, + { id: notificationId } + ); } - throw new Error(`Unsupported notificationType, associationState combination: ${notificationType}, ${associationState}`); - } -}; + disassociateNotificationTemplatesSuccess(resourceId, notificationId) { + return this.http.post( + `${this.baseUrl}${resourceId}/notification_templates_success/`, + { id: notificationId, disassociate: true } + ); + } + + associateNotificationTemplatesError(resourceId, notificationId) { + return this.http.post( + `${this.baseUrl}${resourceId}/notification_templates_error/`, + { id: notificationId } + ); + } + + disassociateNotificationTemplatesError(resourceId, notificationId) { + return this.http.post( + `${this.baseUrl}${resourceId}/notification_templates_error/`, + { id: notificationId, disassociate: true } + ); + } + + /** + * This is a helper method meant to simplify setting the "on" or "off" status of + * a related notification. + * + * @param[resourceId] - id of the base resource + * @param[notificationId] - id of the notification + * @param[notificationType] - the type of notification, options are "success" and "error" + * @param[associationState] - Boolean for associating or disassociating, + * options are true or false + */ + // eslint-disable-next-line max-len + updateNotificationTemplateAssociation( + resourceId, + notificationId, + notificationType, + associationState + ) { + if (notificationType === 'success' && associationState === true) { + return this.associateNotificationTemplatesSuccess( + resourceId, + notificationId + ); + } + + if (notificationType === 'success' && associationState === false) { + return this.disassociateNotificationTemplatesSuccess( + resourceId, + notificationId + ); + } + + if (notificationType === 'error' && associationState === true) { + return this.associateNotificationTemplatesError( + resourceId, + notificationId + ); + } + + if (notificationType === 'error' && associationState === false) { + return this.disassociateNotificationTemplatesError( + resourceId, + notificationId + ); + } + + throw new Error( + `Unsupported notificationType, associationState combination: ${notificationType}, ${associationState}` + ); + } + }; export default NotificationsMixin;