From 421da92cb312c91daba14e46e361a5f68906acd4 Mon Sep 17 00:00:00 2001 From: dominik-zeglen Date: Mon, 2 Dec 2019 11:49:14 +0100 Subject: [PATCH] Use eslint instead of tslint --- .eslintrc.json | 175 ++++ package-lock.json | 875 +++++++++++++++++- package.json | 9 +- src/auth/AuthProvider.tsx | 32 +- src/categories/index.tsx | 14 +- src/components/AppLayout/menuStructure.ts | 20 +- .../AutocompleteSelectMenu.tsx | 144 ++- .../ConfirmButton/ConfirmButton.tsx | 10 +- src/components/Filter/Filter.tsx | 2 +- src/components/MenuToggle.tsx | 2 +- src/components/Money/Money.tsx | 8 +- src/components/Percent/Percent.tsx | 8 +- .../RichTextEditor/RichTextEditor.tsx | 11 +- .../SingleAutocompleteSelectField.tsx | 6 +- src/components/messages/MessageManager.tsx | 2 +- src/customers/fixtures.ts | 3 +- .../VoucherCreatePage/VoucherCreatePage.tsx | 2 +- src/fixtures.ts | 486 +++++----- src/hooks/useListActions.ts | 6 +- src/hooks/useNavigator.ts | 9 +- .../components/MenuDetailsPage/tree.test.ts | 2 +- src/navigation/fixtures.ts | 10 +- src/orders/fixtures.ts | 16 +- .../PageDetailsPage/PageDetailsPage.tsx | 12 +- src/pages/views/PageDetails.tsx | 32 +- .../PluginsDetailsPage/PluginsDetailsPage.tsx | 8 +- .../components/PluginsList/PluginsList.tsx | 58 +- .../containers/ProductTypeOperations.tsx | 158 ++-- .../ProductVariantCreateDialog/reducer.ts | 3 +- .../containers/ProductVariantOperations.tsx | 50 +- src/products/index.tsx | 12 +- src/products/views/ProductImage.tsx | 144 ++- src/siteSettings/index.tsx | 6 +- .../stories/components/MultiSelectField.tsx | 8 +- .../stories/components/RichTextEditor.tsx | 10 +- .../stories/components/SingleSelectField.tsx | 8 +- .../stories/products/ProductImagePage.tsx | 2 +- .../TranslationsEntitiesList.tsx | 5 +- 38 files changed, 1701 insertions(+), 667 deletions(-) create mode 100644 .eslintrc.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 000000000..9de8290eb --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,175 @@ +{ + "env": { + "browser": true + }, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "tsconfig.json", + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint", + "@typescript-eslint/tslint", + "import", + "prefer-arrow" + ], + "rules": { + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/array-type": [ + "error", + { + "default": "array-simple" + } + ], + "@typescript-eslint/ban-types": "error", + "@typescript-eslint/class-name-casing": "error", + "@typescript-eslint/consistent-type-assertions": "error", + "@typescript-eslint/consistent-type-definitions": "error", + "@typescript-eslint/explicit-member-accessibility": "off", + "@typescript-eslint/indent": "off", + "@typescript-eslint/interface-name-prefix": "off", + "@typescript-eslint/member-delimiter-style": [ + "off", + "error", + { + "multiline": { + "delimiter": "none", + "requireLast": true + }, + "singleline": { + "delimiter": "semi", + "requireLast": false + } + } + ], + "@typescript-eslint/member-ordering": "error", + "@typescript-eslint/no-empty-function": "error", + "@typescript-eslint/no-empty-interface": "error", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-parameter-properties": "off", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-use-before-declare": "off", + "@typescript-eslint/no-var-requires": "error", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/quotes": "off", + "@typescript-eslint/semi": ["off", null], + "@typescript-eslint/space-within-parens": ["off", "never"], + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/type-annotation-spacing": "off", + "@typescript-eslint/unified-signatures": "error", + "arrow-body-style": "error", + "arrow-parens": ["off", "as-needed"], + "camelcase": "off", + "capitalized-comments": "off", + "comma-dangle": "off", + "complexity": "off", + "constructor-super": "error", + "curly": "error", + "dot-notation": "error", + "eol-last": "off", + "eqeqeq": ["error", "smart"], + "guard-for-in": "error", + "id-blacklist": "off", + "import/no-extraneous-dependencies": "off", + "import/no-internal-modules": "off", + "import/order": "error", + "linebreak-style": "off", + "max-classes-per-file": "off", + "max-len": "off", + "new-parens": "off", + "newline-per-chained-call": "off", + "no-bitwise": "error", + "no-caller": "error", + "no-cond-assign": "error", + "no-console": [ + "error", + { + "allow": [ + "warn", + "dir", + "time", + "timeEnd", + "timeLog", + "trace", + "assert", + "clear", + "count", + "countReset", + "group", + "groupEnd", + "table", + "debug", + "info", + "dirxml", + "error", + "groupCollapsed", + "Console", + "profile", + "profileEnd", + "timeStamp", + "context" + ] + } + ], + "no-debugger": "error", + "no-duplicate-case": "error", + "no-duplicate-imports": "error", + "no-empty": "error", + "no-eval": "error", + "no-extra-bind": "error", + "no-extra-semi": "off", + "no-fallthrough": "off", + "no-invalid-this": "off", + "no-irregular-whitespace": "off", + "no-multiple-empty-lines": "off", + "no-new-func": "error", + "no-new-wrappers": "error", + "no-redeclare": "error", + "no-return-await": "error", + "no-sequences": "error", + "no-shadow": [ + "off", + { + "hoist": "all" + } + ], + "no-sparse-arrays": "error", + "no-template-curly-in-string": "error", + "no-throw-literal": "error", + "no-trailing-spaces": "off", + "no-undef-init": "error", + "no-underscore-dangle": "off", + "no-unsafe-finally": "error", + "no-unused-expressions": "error", + "no-unused-labels": "error", + "no-var": "error", + "object-shorthand": "error", + "one-var": ["error", "never"], + "prefer-arrow/prefer-arrow-functions": "off", + "prefer-const": "error", + "prefer-object-spread": "error", + "quote-props": "off", + "radix": "error", + "sort-keys": "warn", + "space-before-function-paren": "off", + "spaced-comment": "error", + "use-isnan": "error", + "valid-typeof": "off", + "@typescript-eslint/tslint/config": [ + "error", + { + "rules": { + "jsdoc-format": [true, "check-multiline-start"], + "no-reference-import": true, + "object-literal-sort-keys": true, + "prefer-conditional-expression": true + } + } + ] + }, + "ignorePatterns": ["node_modules/", "**/types/**/*"] +} diff --git a/package-lock.json b/package-lock.json index 41c04c99a..a32a7bfa1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2922,6 +2922,12 @@ "integrity": "sha1-4ByfjIXKg7YQMgxiJYsMkCat4Pc=", "dev": true }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, "@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", @@ -3044,6 +3050,12 @@ "integrity": "sha512-Q5hTcfdudEL2yOmluA1zaSyPbzWPmJ3XfSWeP3RyoYvS9hnje1ZyagrZOuQ6+1nQC1Gw+7gap3pLNL3xL6UBug==", "dev": true }, + "@types/json-schema": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz", + "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==", + "dev": true + }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -3289,7 +3301,8 @@ "@types/semver-compare": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/semver-compare/-/semver-compare-1.0.1.tgz", - "integrity": "sha512-wx2LQVvKlEkhXp/HoKIZ/aSL+TvfJdKco8i0xJS3aR877mg4qBHzNT6+B5a61vewZHo79EdZavskGnRXEC2H6A==" + "integrity": "sha512-wx2LQVvKlEkhXp/HoKIZ/aSL+TvfJdKco8i0xJS3aR877mg4qBHzNT6+B5a61vewZHo79EdZavskGnRXEC2H6A==", + "dev": true }, "@types/shallowequal": { "version": "1.1.1", @@ -3371,6 +3384,127 @@ "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.0.tgz", "integrity": "sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==" }, + "@typescript-eslint/eslint-plugin": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.9.0.tgz", + "integrity": "sha512-98rfOt3NYn5Gr9wekTB8TexxN6oM8ZRvYuphPs1Atfsy419SDLYCaE30aJkRiiTCwGEY98vOhFsEVm7Zs4toQQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "2.9.0", + "eslint-utils": "^1.4.3", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + }, + "dependencies": { + "regexpp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz", + "integrity": "sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "@typescript-eslint/eslint-plugin-tslint": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-2.9.0.tgz", + "integrity": "sha512-v3+NSv6d1tyKiEjCYZJ1PmlT7dTOVwGob9bjvGg3S6ZrngQUnZkXFauiFH2toUsvkBIQGu6/f0RybdttA2eHxg==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "2.9.0", + "lodash.memoize": "^4.1.2" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.9.0.tgz", + "integrity": "sha512-0lOLFdpdJsCMqMSZT7l7W2ta0+GX8A3iefG3FovJjrX+QR8y6htFlFdU7aOVPL6pDvt6XcsOb8fxk5sq+girTw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.9.0", + "eslint-scope": "^5.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.9.0.tgz", + "integrity": "sha512-fJ+dNs3CCvEsJK2/Vg5c2ZjuQ860ySOAsodDPwBaVlrGvRN+iCNC8kUfLFL8cT49W4GSiLPa/bHiMjYXA7EhKQ==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.9.0", + "@typescript-eslint/typescript-estree": "2.9.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.9.0.tgz", + "integrity": "sha512-v6btSPXEWCP594eZbM+JCXuFoXWXyF/z8kaSBSdCb83DF+Y7+xItW29SsKtSULgLemqJBT+LpT+0ZqdfH7QVmA==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash.unescape": "4.0.1", + "semver": "^6.3.0", + "tsutils": "^3.17.1" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, "@webassemblyjs/ast": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", @@ -3617,6 +3751,12 @@ "@types/estree": "^0.0.39" } }, + "acorn-jsx": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "dev": true + }, "acorn-walk": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", @@ -7687,6 +7827,12 @@ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, "content-disposition": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", @@ -9219,6 +9365,534 @@ } } }, + "eslint": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.1.tgz", + "integrity": "sha512-UWzBS79pNcsDSxgxbdjkmzn/B6BhsXMfUaOHnNwyE8nD+Q6pyT96ow2MccVayUTV4yMid4qLhMiQaywctRkBLA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", + "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "figures": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", + "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "inquirer": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.0.tgz", + "integrity": "sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "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", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.2.tgz", + "integrity": "sha512-S5VnD+UpVY1PyYRqeBd/4pgsmkvSokbHqTXAQMpvCyRr3XN2tvSLo9spm2nEpqQqh9dezw3os/0zWihLeOg2Rw==", + "dev": true, + "requires": { + "fs-extra": "^8.1.0", + "loader-fs-cache": "^1.0.2", + "loader-utils": "^1.2.3", + "object-hash": "^1.3.1", + "schema-utils": "^2.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "schema-utils": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", + "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", + "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", + "dev": true, + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.18.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", + "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.0", + "read-pkg-up": "^2.0.0", + "resolve": "^1.11.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + } + } + }, + "eslint-plugin-prefer-arrow": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.1.6.tgz", + "integrity": "sha512-CT7a5pT6SG9hvhCjyHKFA1+lClB4WA+gvBt04E7/buUTELgatneCrublqTzi++tZuCefUhJXrTm3W1wpK14sqg==", + "dev": true + }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -9229,6 +9903,21 @@ "estraverse": "^4.1.1" } }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, "esotope-hammerhead": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/esotope-hammerhead/-/esotope-hammerhead-0.4.0.tgz", @@ -9238,11 +9927,39 @@ "@types/estree": "^0.0.39" } }, + "espree": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", + "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", + "dev": true, + "requires": { + "acorn": "^7.1.0", + "acorn-jsx": "^5.1.0", + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "dev": true + } + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", @@ -9774,6 +10491,15 @@ "object-assign": "^4.1.0" } }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, "file-loader": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", @@ -10039,6 +10765,34 @@ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", "dev": true }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, "flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", @@ -10703,6 +11457,12 @@ "is-callable": "^1.1.4" } }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "functions-have-names": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.0.tgz", @@ -13170,6 +13930,12 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -13868,6 +14634,57 @@ "type-fest": "^0.3.0" } }, + "loader-fs-cache": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", + "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "dev": true, + "requires": { + "find-cache-dir": "^0.1.1", + "mkdirp": "0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + } + } + }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -13996,6 +14813,12 @@ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, "lodash.xorby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.xorby/-/lodash.xorby-4.7.0.tgz", @@ -15279,6 +16102,12 @@ } } }, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", + "dev": true + }, "object-inspect": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", @@ -15689,6 +16518,23 @@ "no-case": "^2.2.0" } }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, "parse-asn1": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", @@ -16359,6 +17205,12 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -17579,6 +18431,12 @@ "define-properties": "^1.1.2" } }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, "regexpu-core": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", @@ -19024,6 +19882,12 @@ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true + }, "style-loader": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", @@ -21661,6 +22525,15 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, "write-file-atomic": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", diff --git a/package.json b/package.json index 74788cf4c..de4818bbd 100644 --- a/package.json +++ b/package.json @@ -104,6 +104,9 @@ "@types/storybook__react": "^4.0.2", "@types/url-join": "^0.8.3", "@types/webappsec-credential-management": "^0.5.1", + "@typescript-eslint/eslint-plugin": "^2.9.0", + "@typescript-eslint/eslint-plugin-tslint": "^2.9.0", + "@typescript-eslint/parser": "^2.9.0", "babel-core": "^7.0.0-bridge.0", "babel-jest": "^23.6.0", "babel-loader": "^8.0.6", @@ -115,6 +118,10 @@ "enzyme": "^3.10.0", "enzyme-adapter-react-16": "^1.14.0", "enzyme-to-json": "^3.3.5", + "eslint": "^6.7.1", + "eslint-loader": "^3.0.2", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-prefer-arrow": "^1.1.6", "file-loader": "^1.1.11", "fork-ts-checker-webpack-plugin": "^0.5.2", "html-webpack-plugin": "^3.2.0", @@ -171,7 +178,7 @@ }, "lint-staged": { "*.{ts,tsx}": [ - "tslint --fix", + "eslint --fix", "prettier --write", "git add" ] diff --git a/src/auth/AuthProvider.tsx b/src/auth/AuthProvider.tsx index 2ffc3c8b0..55c11ab4b 100644 --- a/src/auth/AuthProvider.tsx +++ b/src/auth/AuthProvider.tsx @@ -6,12 +6,12 @@ import { saveCredentials } from "@saleor/utils/credentialsManagement"; import { MutationFunction, MutationResult } from "react-apollo"; -import { UserContext } from "./"; import { TypedTokenAuthMutation, TypedVerifyTokenMutation } from "./mutations"; import { TokenAuth, TokenAuthVariables } from "./types/TokenAuth"; import { User } from "./types/User"; import { VerifyToken, VerifyTokenVariables } from "./types/VerifyToken"; import { getAuthToken, removeAuthToken, setAuthToken } from "./utils"; +import { UserContext } from "./"; interface AuthProviderOperationsProps { children: (props: { @@ -24,21 +24,19 @@ interface AuthProviderOperationsProps { } const AuthProviderOperations: React.FC = ({ children -}) => { - return ( - - {(...tokenAuth) => ( - - {(...tokenVerify) => ( - - {children} - - )} - - )} - - ); -}; +}) => ( + + {(...tokenAuth) => ( + + {(...tokenVerify) => ( + + {children} + + )} + + )} + +); interface AuthProviderProps { children: (props: { @@ -69,7 +67,7 @@ class AuthProvider extends React.Component< > { constructor(props) { super(props); - this.state = { user: undefined, persistToken: false }; + this.state = { persistToken: false, user: undefined }; } componentWillReceiveProps(props: AuthProviderProps) { diff --git a/src/categories/index.tsx b/src/categories/index.tsx index 71f051beb..2bccd2f8d 100644 --- a/src/categories/index.tsx +++ b/src/categories/index.tsx @@ -40,15 +40,11 @@ interface CategoryCreateRouteParams { } const CategoryCreate: React.FC< RouteComponentProps -> = ({ match }) => { - return ( - - ); -}; +> = ({ match }) => ( + +); const CategoryList: React.FC> = ({ location }) => { const qs = parseQs(location.search.substr(1)); diff --git a/src/components/AppLayout/menuStructure.ts b/src/components/AppLayout/menuStructure.ts index 3e1c46da2..2c6aaaac8 100644 --- a/src/components/AppLayout/menuStructure.ts +++ b/src/components/AppLayout/menuStructure.ts @@ -1,11 +1,5 @@ -import { categoryListUrl } from "../../categories/urls"; -import { collectionListUrl } from "../../collections/urls"; -import { customerListUrl } from "../../customers/urls"; -import { saleListUrl, voucherListUrl } from "../../discounts/urls"; -import { orderDraftListUrl, orderListUrl } from "../../orders/urls"; -import { productListUrl } from "../../products/urls"; -import { languageListUrl } from "../../translations/urls"; -import { PermissionEnum } from "../../types/globalTypes"; +import { commonMessages, sectionNames } from "@saleor/intl"; +import { IntlShape } from "react-intl"; import catalogIcon from "@assets/images/menu-catalog-icon.svg"; import customerIcon from "@assets/images/menu-customers-icon.svg"; @@ -13,8 +7,14 @@ import discountsIcon from "@assets/images/menu-discounts-icon.svg"; import homeIcon from "@assets/images/menu-home-icon.svg"; import ordersIcon from "@assets/images/menu-orders-icon.svg"; import translationIcon from "@assets/images/menu-translation-icon.svg"; -import { commonMessages, sectionNames } from "@saleor/intl"; -import { IntlShape } from "react-intl"; +import { categoryListUrl } from "../../categories/urls"; +import { collectionListUrl } from "../../collections/urls"; +import { customerListUrl } from "../../customers/urls"; +import { orderDraftListUrl, orderListUrl } from "../../orders/urls"; +import { productListUrl } from "../../products/urls"; +import { saleListUrl, voucherListUrl } from "../../discounts/urls"; +import { languageListUrl } from "../../translations/urls"; +import { PermissionEnum } from "../../types/globalTypes"; export interface IMenuItem { ariaLabel: string; diff --git a/src/components/AutocompleteSelectMenu/AutocompleteSelectMenu.tsx b/src/components/AutocompleteSelectMenu/AutocompleteSelectMenu.tsx index a59c44723..b7513124a 100644 --- a/src/components/AutocompleteSelectMenu/AutocompleteSelectMenu.tsx +++ b/src/components/AutocompleteSelectMenu/AutocompleteSelectMenu.tsx @@ -104,80 +104,76 @@ const AutocompleteSelectMenu: React.FC = props => { itemToString={item => (item ? item.label : "")} onSelect={handleChange} > - {({ getItemProps, isOpen, openMenu, closeMenu, selectItem }) => { - return ( -
- , - id: undefined, - onBlur: () => { - closeMenu(); - setMenuPath([]); - setInputValue(displayValue); - }, - onChange: event => { - debounceFn(event.target.value); - setInputValue(event.target.value); - }, - onFocus: () => openMenu(), - placeholder - }} - disabled={disabled} - error={error} - helperText={helperText} - label={label} - fullWidth={true} - value={inputValue} - /> - {isOpen && ( - - {options.length ? ( - <> - {menuPath.length > 0 && ( - - setMenuPath( - menuPath.slice(0, menuPath.length - 2) - ) - } - > - - - - )} - {(menuPath.length - ? getMenuItemByPath(options, menuPath).children - : options - ).map((suggestion, index) => ( - - suggestion.value - ? selectItem(suggestion.value) - : setMenuPath([...menuPath, index]) - } - > - {suggestion.label} - - ))} - - ) : ( - - - - )} - - )} -
- ); - }} + {({ getItemProps, isOpen, openMenu, closeMenu, selectItem }) => ( +
+ , + id: undefined, + onBlur: () => { + closeMenu(); + setMenuPath([]); + setInputValue(displayValue); + }, + onChange: event => { + debounceFn(event.target.value); + setInputValue(event.target.value); + }, + onFocus: () => openMenu(), + placeholder + }} + disabled={disabled} + error={error} + helperText={helperText} + label={label} + fullWidth={true} + value={inputValue} + /> + {isOpen && ( + + {options.length ? ( + <> + {menuPath.length > 0 && ( + + setMenuPath(menuPath.slice(0, menuPath.length - 2)) + } + > + + + + )} + {(menuPath.length + ? getMenuItemByPath(options, menuPath).children + : options + ).map((suggestion, index) => ( + + suggestion.value + ? selectItem(suggestion.value) + : setMenuPath([...menuPath, index]) + } + > + {suggestion.label} + + ))} + + ) : ( + + + + )} + + )} +
+ )} )} diff --git a/src/components/ConfirmButton/ConfirmButton.tsx b/src/components/ConfirmButton/ConfirmButton.tsx index d570afbf4..6779eebb3 100644 --- a/src/components/ConfirmButton/ConfirmButton.tsx +++ b/src/components/ConfirmButton/ConfirmButton.tsx @@ -75,6 +75,11 @@ const ConfirmButton = withStyles(styles)( >, ConfirmButtonState > { + state: ConfirmButtonState = { + displayCompletedActionState: false + }; + timeout = null; + static getDerivedStateFromProps( nextProps: ConfirmButtonProps, prevState: ConfirmButtonState @@ -87,11 +92,6 @@ const ConfirmButton = withStyles(styles)( return prevState; } - state: ConfirmButtonState = { - displayCompletedActionState: false - }; - timeout = null; - componentDidUpdate(prevProps: ConfirmButtonProps) { const { transitionState } = this.props; if (prevProps.transitionState !== transitionState) { diff --git a/src/components/Filter/Filter.tsx b/src/components/Filter/Filter.tsx index 0f5e2a166..9d5d5e0d0 100644 --- a/src/components/Filter/Filter.tsx +++ b/src/components/Filter/Filter.tsx @@ -10,9 +10,9 @@ import classNames from "classnames"; import React from "react"; import { FormattedMessage } from "react-intl"; -import { FilterContent } from "."; import { FilterContentSubmitData } from "./FilterContent"; import { IFilter } from "./types"; +import { FilterContent } from "."; export interface FilterProps { currencySymbol: string; diff --git a/src/components/MenuToggle.tsx b/src/components/MenuToggle.tsx index a7daaffab..ea08fb68f 100644 --- a/src/components/MenuToggle.tsx +++ b/src/components/MenuToggle.tsx @@ -33,7 +33,7 @@ class MenuToggle extends React.Component { const { open } = this.state; return children({ - actions: { open: this.handleClick, close: this.handleClose }, + actions: { close: this.handleClose, open: this.handleClick }, open }); } diff --git a/src/components/Money/Money.tsx b/src/components/Money/Money.tsx index 5fe4829f6..c515c102d 100644 --- a/src/components/Money/Money.tsx +++ b/src/components/Money/Money.tsx @@ -12,12 +12,12 @@ export interface MoneyProps { export const Money: React.FC = ({ money }) => ( - {({ locale }) => { - return money.amount.toLocaleString(locale, { + {({ locale }) => + money.amount.toLocaleString(locale, { currency: money.currency, style: "currency" - }); - }} + }) + } ); diff --git a/src/components/Percent/Percent.tsx b/src/components/Percent/Percent.tsx index 731ea8516..4a34cf72c 100644 --- a/src/components/Percent/Percent.tsx +++ b/src/components/Percent/Percent.tsx @@ -8,12 +8,12 @@ interface PercentProps { const Percent: React.FC = ({ amount }) => ( - {({ locale }) => { - return (amount / 100).toLocaleString(locale, { + {({ locale }) => + (amount / 100).toLocaleString(locale, { maximumFractionDigits: 2, style: "percent" - }); - }} + }) + } ); Percent.displayName = "Percent"; diff --git a/src/components/RichTextEditor/RichTextEditor.tsx b/src/components/RichTextEditor/RichTextEditor.tsx index 08ed8dd8b..c0be198d1 100644 --- a/src/components/RichTextEditor/RichTextEditor.tsx +++ b/src/components/RichTextEditor/RichTextEditor.tsx @@ -12,20 +12,17 @@ import { import isEqual from "lodash-es/isEqual"; import React from "react"; +import { ChangeEvent } from "@saleor/hooks/useForm"; import BoldIcon from "../../icons/BoldIcon"; -import HeaderOne from "../../icons/HeaderOne"; -import HeaderThree from "../../icons/HeaderThree"; import HeaderTwo from "../../icons/HeaderTwo"; +import HeaderThree from "../../icons/HeaderThree"; import ItalicIcon from "../../icons/ItalicIcon"; import LinkIcon from "../../icons/LinkIcon"; import OrderedListIcon from "../../icons/OrderedListIcon"; +import HeaderOne from "../../icons/HeaderOne"; import QuotationIcon from "../../icons/QuotationIcon"; import StrikethroughIcon from "../../icons/StrikethroughIcon"; import UnorderedListIcon from "../../icons/UnorderedListIcon"; - -// import ImageEntity from "./ImageEntity"; -// import ImageSource from "./ImageSource"; -import { ChangeEvent } from "@saleor/hooks/useForm"; import LinkEntity from "./LinkEntity"; import LinkSource from "./LinkSource"; @@ -33,10 +30,10 @@ export interface RichTextEditorProps { disabled: boolean; error: boolean; helperText: string; + initial?: RawDraftContentState; label: string; name: string; scroll?: boolean; - initial?: RawDraftContentState; onChange: (event: React.ChangeEvent) => void; } diff --git a/src/components/SingleAutocompleteSelectField/SingleAutocompleteSelectField.tsx b/src/components/SingleAutocompleteSelectField/SingleAutocompleteSelectField.tsx index 374522e1f..deb13f6cb 100644 --- a/src/components/SingleAutocompleteSelectField/SingleAutocompleteSelectField.tsx +++ b/src/components/SingleAutocompleteSelectField/SingleAutocompleteSelectField.tsx @@ -4,14 +4,14 @@ import TextField from "@material-ui/core/TextField"; import Downshift from "downshift"; import { filter } from "fuzzaldrin"; import React from "react"; -import SingleAutocompleteSelectFieldContent, { - SingleAutocompleteChoiceType -} from "./SingleAutocompleteSelectFieldContent"; import useStateFromProps from "@saleor/hooks/useStateFromProps"; import { FetchMoreProps } from "@saleor/types"; import ArrowDropdownIcon from "../../icons/ArrowDropdown"; import Debounce, { DebounceProps } from "../Debounce"; +import SingleAutocompleteSelectFieldContent, { + SingleAutocompleteChoiceType +} from "./SingleAutocompleteSelectFieldContent"; const useStyles = makeStyles({ container: { diff --git a/src/components/messages/MessageManager.tsx b/src/components/messages/MessageManager.tsx index e580ce721..cbc604c71 100644 --- a/src/components/messages/MessageManager.tsx +++ b/src/components/messages/MessageManager.tsx @@ -17,7 +17,7 @@ interface MessageManagerState { export class MessageManager extends React.Component<{}, MessageManagerState> { state: MessageManagerState = { - message: { text: "", key: "0", onUndo: undefined }, + message: { key: "0", onUndo: undefined, text: "" }, opened: false }; queue = []; diff --git a/src/customers/fixtures.ts b/src/customers/fixtures.ts index 9d3e60e1d..e3f2eb94d 100644 --- a/src/customers/fixtures.ts +++ b/src/customers/fixtures.ts @@ -987,8 +987,6 @@ export const customer: CustomerDetails_user & CustomerAddresses_user = { } ], dateJoined: "2017-05-07T09:37:30.124154+00:00", - firstName: "Tom", - defaultBillingAddress: { __typename: "Address", city: "Port Danielshire", @@ -1028,6 +1026,7 @@ export const customer: CustomerDetails_user & CustomerAddresses_user = { streetAddress2: "" }, email: "elizabeth.vaughn@example.com", + firstName: "Tom", id: "VXNlcjoy", isActive: true, lastLogin: "2018-05-07T09:37:30.124154+00:00", diff --git a/src/discounts/components/VoucherCreatePage/VoucherCreatePage.tsx b/src/discounts/components/VoucherCreatePage/VoucherCreatePage.tsx index 5db458e5c..6d4e72858 100644 --- a/src/discounts/components/VoucherCreatePage/VoucherCreatePage.tsx +++ b/src/discounts/components/VoucherCreatePage/VoucherCreatePage.tsx @@ -9,6 +9,7 @@ import Form from "@saleor/components/Form"; import Grid from "@saleor/components/Grid"; import PageHeader from "@saleor/components/PageHeader"; import SaveButtonBar from "@saleor/components/SaveButtonBar"; +import { sectionNames } from "@saleor/intl"; import { UserError } from "../../../types"; import { DiscountValueTypeEnum, @@ -21,7 +22,6 @@ import VoucherLimits from "../VoucherLimits"; import VoucherRequirements from "../VoucherRequirements"; import VoucherTypes from "../VoucherTypes"; -import { sectionNames } from "@saleor/intl"; import VoucherValue from "../VoucherValue"; export interface FormData { applyOncePerCustomer: boolean; diff --git a/src/fixtures.ts b/src/fixtures.ts index 77e9e4264..2a4816c93 100644 --- a/src/fixtures.ts +++ b/src/fixtures.ts @@ -44,249 +44,249 @@ export const listActionsProps: ListActions = { }; export const countries = [ - { name: "Afghanistan", code: "AF" }, - { name: "Åland Islands", code: "AX" }, - { name: "Albania", code: "AL" }, - { name: "Algeria", code: "DZ" }, - { name: "American Samoa", code: "AS" }, - { name: "AndorrA", code: "AD" }, - { name: "Angola", code: "AO" }, - { name: "Anguilla", code: "AI" }, - { name: "Antarctica", code: "AQ" }, - { name: "Antigua and Barbuda", code: "AG" }, - { name: "Argentina", code: "AR" }, - { name: "Armenia", code: "AM" }, - { name: "Aruba", code: "AW" }, - { name: "Australia", code: "AU" }, - { name: "Austria", code: "AT" }, - { name: "Azerbaijan", code: "AZ" }, - { name: "Bahamas", code: "BS" }, - { name: "Bahrain", code: "BH" }, - { name: "Bangladesh", code: "BD" }, - { name: "Barbados", code: "BB" }, - { name: "Belarus", code: "BY" }, - { name: "Belgium", code: "BE" }, - { name: "Belize", code: "BZ" }, - { name: "Benin", code: "BJ" }, - { name: "Bermuda", code: "BM" }, - { name: "Bhutan", code: "BT" }, - { name: "Bolivia", code: "BO" }, - { name: "Bosnia and Herzegovina", code: "BA" }, - { name: "Botswana", code: "BW" }, - { name: "Bouvet Island", code: "BV" }, - { name: "Brazil", code: "BR" }, - { name: "British Indian Ocean Territory", code: "IO" }, - { name: "Brunei Darussalam", code: "BN" }, - { name: "Bulgaria", code: "BG" }, - { name: "Burkina Faso", code: "BF" }, - { name: "Burundi", code: "BI" }, - { name: "Cambodia", code: "KH" }, - { name: "Cameroon", code: "CM" }, - { name: "Canada", code: "CA" }, - { name: "Cape Verde", code: "CV" }, - { name: "Cayman Islands", code: "KY" }, - { name: "Central African Republic", code: "CF" }, - { name: "Chad", code: "TD" }, - { name: "Chile", code: "CL" }, - { name: "China", code: "CN" }, - { name: "Christmas Island", code: "CX" }, - { name: "Cocos (Keeling) Islands", code: "CC" }, - { name: "Colombia", code: "CO" }, - { name: "Comoros", code: "KM" }, - { name: "Congo", code: "CG" }, - { name: "Congo, The Democratic Republic of the", code: "CD" }, - { name: "Cook Islands", code: "CK" }, - { name: "Costa Rica", code: "CR" }, - { name: "Cote D'Ivoire", code: "CI" }, - { name: "Croatia", code: "HR" }, - { name: "Cuba", code: "CU" }, - { name: "Cyprus", code: "CY" }, - { name: "Czech Republic", code: "CZ" }, - { name: "Denmark", code: "DK" }, - { name: "Djibouti", code: "DJ" }, - { name: "Dominica", code: "DM" }, - { name: "Dominican Republic", code: "DO" }, - { name: "Ecuador", code: "EC" }, - { name: "Egypt", code: "EG" }, - { name: "El Salvador", code: "SV" }, - { name: "Equatorial Guinea", code: "GQ" }, - { name: "Eritrea", code: "ER" }, - { name: "Estonia", code: "EE" }, - { name: "Ethiopia", code: "ET" }, - { name: "Falkland Islands (Malvinas)", code: "FK" }, - { name: "Faroe Islands", code: "FO" }, - { name: "Fiji", code: "FJ" }, - { name: "Finland", code: "FI" }, - { name: "France", code: "FR" }, - { name: "French Guiana", code: "GF" }, - { name: "French Polynesia", code: "PF" }, - { name: "French Southern Territories", code: "TF" }, - { name: "Gabon", code: "GA" }, - { name: "Gambia", code: "GM" }, - { name: "Georgia", code: "GE" }, - { name: "Germany", code: "DE" }, - { name: "Ghana", code: "GH" }, - { name: "Gibraltar", code: "GI" }, - { name: "Greece", code: "GR" }, - { name: "Greenland", code: "GL" }, - { name: "Grenada", code: "GD" }, - { name: "Guadeloupe", code: "GP" }, - { name: "Guam", code: "GU" }, - { name: "Guatemala", code: "GT" }, - { name: "Guernsey", code: "GG" }, - { name: "Guinea", code: "GN" }, - { name: "Guinea-Bissau", code: "GW" }, - { name: "Guyana", code: "GY" }, - { name: "Haiti", code: "HT" }, - { name: "Heard Island and Mcdonald Islands", code: "HM" }, - { name: "Holy See (Vatican City State)", code: "VA" }, - { name: "Honduras", code: "HN" }, - { name: "Hong Kong", code: "HK" }, - { name: "Hungary", code: "HU" }, - { name: "Iceland", code: "IS" }, - { name: "India", code: "IN" }, - { name: "Indonesia", code: "ID" }, - { name: "Iran, Islamic Republic Of", code: "IR" }, - { name: "Iraq", code: "IQ" }, - { name: "Ireland", code: "IE" }, - { name: "Isle of Man", code: "IM" }, - { name: "Israel", code: "IL" }, - { name: "Italy", code: "IT" }, - { name: "Jamaica", code: "JM" }, - { name: "Japan", code: "JP" }, - { name: "Jersey", code: "JE" }, - { name: "Jordan", code: "JO" }, - { name: "Kazakhstan", code: "KZ" }, - { name: "Kenya", code: "KE" }, - { name: "Kiribati", code: "KI" }, - { name: "Korea, Democratic People'S Republic of", code: "KP" }, - { name: "Korea, Republic of", code: "KR" }, - { name: "Kuwait", code: "KW" }, - { name: "Kyrgyzstan", code: "KG" }, - { name: "Lao People'S Democratic Republic", code: "LA" }, - { name: "Latvia", code: "LV" }, - { name: "Lebanon", code: "LB" }, - { name: "Lesotho", code: "LS" }, - { name: "Liberia", code: "LR" }, - { name: "Libyan Arab Jamahiriya", code: "LY" }, - { name: "Liechtenstein", code: "LI" }, - { name: "Lithuania", code: "LT" }, - { name: "Luxembourg", code: "LU" }, - { name: "Macao", code: "MO" }, - { name: "Macedonia, The Former Yugoslav Republic of", code: "MK" }, - { name: "Madagascar", code: "MG" }, - { name: "Malawi", code: "MW" }, - { name: "Malaysia", code: "MY" }, - { name: "Maldives", code: "MV" }, - { name: "Mali", code: "ML" }, - { name: "Malta", code: "MT" }, - { name: "Marshall Islands", code: "MH" }, - { name: "Martinique", code: "MQ" }, - { name: "Mauritania", code: "MR" }, - { name: "Mauritius", code: "MU" }, - { name: "Mayotte", code: "YT" }, - { name: "Mexico", code: "MX" }, - { name: "Micronesia, Federated States of", code: "FM" }, - { name: "Moldova, Republic of", code: "MD" }, - { name: "Monaco", code: "MC" }, - { name: "Mongolia", code: "MN" }, - { name: "Montserrat", code: "MS" }, - { name: "Morocco", code: "MA" }, - { name: "Mozambique", code: "MZ" }, - { name: "Myanmar", code: "MM" }, - { name: "Namibia", code: "NA" }, - { name: "Nauru", code: "NR" }, - { name: "Nepal", code: "NP" }, - { name: "Netherlands", code: "NL" }, - { name: "Netherlands Antilles", code: "AN" }, - { name: "New Caledonia", code: "NC" }, - { name: "New Zealand", code: "NZ" }, - { name: "Nicaragua", code: "NI" }, - { name: "Niger", code: "NE" }, - { name: "Nigeria", code: "NG" }, - { name: "Niue", code: "NU" }, - { name: "Norfolk Island", code: "NF" }, - { name: "Northern Mariana Islands", code: "MP" }, - { name: "Norway", code: "NO" }, - { name: "Oman", code: "OM" }, - { name: "Pakistan", code: "PK" }, - { name: "Palau", code: "PW" }, - { name: "Palestinian Territory, Occupied", code: "PS" }, - { name: "Panama", code: "PA" }, - { name: "Papua New Guinea", code: "PG" }, - { name: "Paraguay", code: "PY" }, - { name: "Peru", code: "PE" }, - { name: "Philippines", code: "PH" }, - { name: "Pitcairn", code: "PN" }, - { name: "Poland", code: "PL" }, - { name: "Portugal", code: "PT" }, - { name: "Puerto Rico", code: "PR" }, - { name: "Qatar", code: "QA" }, - { name: "Reunion", code: "RE" }, - { name: "Romania", code: "RO" }, - { name: "Russian Federation", code: "RU" }, - { name: "RWANDA", code: "RW" }, - { name: "Saint Helena", code: "SH" }, - { name: "Saint Kitts and Nevis", code: "KN" }, - { name: "Saint Lucia", code: "LC" }, - { name: "Saint Pierre and Miquelon", code: "PM" }, - { name: "Saint Vincent and the Grenadines", code: "VC" }, - { name: "Samoa", code: "WS" }, - { name: "San Marino", code: "SM" }, - { name: "Sao Tome and Principe", code: "ST" }, - { name: "Saudi Arabia", code: "SA" }, - { name: "Senegal", code: "SN" }, - { name: "Serbia and Montenegro", code: "CS" }, - { name: "Seychelles", code: "SC" }, - { name: "Sierra Leone", code: "SL" }, - { name: "Singapore", code: "SG" }, - { name: "Slovakia", code: "SK" }, - { name: "Slovenia", code: "SI" }, - { name: "Solomon Islands", code: "SB" }, - { name: "Somalia", code: "SO" }, - { name: "South Africa", code: "ZA" }, - { name: "South Georgia and the South Sandwich Islands", code: "GS" }, - { name: "Spain", code: "ES" }, - { name: "Sri Lanka", code: "LK" }, - { name: "Sudan", code: "SD" }, - { name: "Suriname", code: "SR" }, - { name: "Svalbard and Jan Mayen", code: "SJ" }, - { name: "Swaziland", code: "SZ" }, - { name: "Sweden", code: "SE" }, - { name: "Switzerland", code: "CH" }, - { name: "Syrian Arab Republic", code: "SY" }, - { name: "Taiwan, Province of China", code: "TW" }, - { name: "Tajikistan", code: "TJ" }, - { name: "Tanzania, United Republic of", code: "TZ" }, - { name: "Thailand", code: "TH" }, - { name: "Timor-Leste", code: "TL" }, - { name: "Togo", code: "TG" }, - { name: "Tokelau", code: "TK" }, - { name: "Tonga", code: "TO" }, - { name: "Trinidad and Tobago", code: "TT" }, - { name: "Tunisia", code: "TN" }, - { name: "Turkey", code: "TR" }, - { name: "Turkmenistan", code: "TM" }, - { name: "Turks and Caicos Islands", code: "TC" }, - { name: "Tuvalu", code: "TV" }, - { name: "Uganda", code: "UG" }, - { name: "Ukraine", code: "UA" }, - { name: "United Arab Emirates", code: "AE" }, - { name: "United Kingdom", code: "GB" }, - { name: "United States", code: "US" }, - { name: "United States Minor Outlying Islands", code: "UM" }, - { name: "Uruguay", code: "UY" }, - { name: "Uzbekistan", code: "UZ" }, - { name: "Vanuatu", code: "VU" }, - { name: "Venezuela", code: "VE" }, - { name: "Viet Nam", code: "VN" }, - { name: "Virgin Islands, British", code: "VG" }, - { name: "Virgin Islands, U.S.", code: "VI" }, - { name: "Wallis and Futuna", code: "WF" }, - { name: "Western Sahara", code: "EH" }, - { name: "Yemen", code: "YE" }, - { name: "Zambia", code: "ZM" }, - { name: "Zimbabwe", code: "ZW" } + { code: "AF", name: "Afghanistan" }, + { code: "AX", name: "Åland Islands" }, + { code: "AL", name: "Albania" }, + { code: "DZ", name: "Algeria" }, + { code: "AS", name: "American Samoa" }, + { code: "AD", name: "AndorrA" }, + { code: "AO", name: "Angola" }, + { code: "AI", name: "Anguilla" }, + { code: "AQ", name: "Antarctica" }, + { code: "AG", name: "Antigua and Barbuda" }, + { code: "AR", name: "Argentina" }, + { code: "AM", name: "Armenia" }, + { code: "AW", name: "Aruba" }, + { code: "AU", name: "Australia" }, + { code: "AT", name: "Austria" }, + { code: "AZ", name: "Azerbaijan" }, + { code: "BS", name: "Bahamas" }, + { code: "BH", name: "Bahrain" }, + { code: "BD", name: "Bangladesh" }, + { code: "BB", name: "Barbados" }, + { code: "BY", name: "Belarus" }, + { code: "BE", name: "Belgium" }, + { code: "BZ", name: "Belize" }, + { code: "BJ", name: "Benin" }, + { code: "BM", name: "Bermuda" }, + { code: "BT", name: "Bhutan" }, + { code: "BO", name: "Bolivia" }, + { code: "BA", name: "Bosnia and Herzegovina" }, + { code: "BW", name: "Botswana" }, + { code: "BV", name: "Bouvet Island" }, + { code: "BR", name: "Brazil" }, + { code: "IO", name: "British Indian Ocean Territory" }, + { code: "BN", name: "Brunei Darussalam" }, + { code: "BG", name: "Bulgaria" }, + { code: "BF", name: "Burkina Faso" }, + { code: "BI", name: "Burundi" }, + { code: "KH", name: "Cambodia" }, + { code: "CM", name: "Cameroon" }, + { code: "CA", name: "Canada" }, + { code: "CV", name: "Cape Verde" }, + { code: "KY", name: "Cayman Islands" }, + { code: "CF", name: "Central African Republic" }, + { code: "TD", name: "Chad" }, + { code: "CL", name: "Chile" }, + { code: "CN", name: "China" }, + { code: "CX", name: "Christmas Island" }, + { code: "CC", name: "Cocos (Keeling) Islands" }, + { code: "CO", name: "Colombia" }, + { code: "KM", name: "Comoros" }, + { code: "CG", name: "Congo" }, + { code: "CD", name: "Congo, The Democratic Republic of the" }, + { code: "CK", name: "Cook Islands" }, + { code: "CR", name: "Costa Rica" }, + { code: "CI", name: "Cote D'Ivoire" }, + { code: "HR", name: "Croatia" }, + { code: "CU", name: "Cuba" }, + { code: "CY", name: "Cyprus" }, + { code: "CZ", name: "Czech Republic" }, + { code: "DK", name: "Denmark" }, + { code: "DJ", name: "Djibouti" }, + { code: "DM", name: "Dominica" }, + { code: "DO", name: "Dominican Republic" }, + { code: "EC", name: "Ecuador" }, + { code: "EG", name: "Egypt" }, + { code: "SV", name: "El Salvador" }, + { code: "GQ", name: "Equatorial Guinea" }, + { code: "ER", name: "Eritrea" }, + { code: "EE", name: "Estonia" }, + { code: "ET", name: "Ethiopia" }, + { code: "FK", name: "Falkland Islands (Malvinas)" }, + { code: "FO", name: "Faroe Islands" }, + { code: "FJ", name: "Fiji" }, + { code: "FI", name: "Finland" }, + { code: "FR", name: "France" }, + { code: "GF", name: "French Guiana" }, + { code: "PF", name: "French Polynesia" }, + { code: "TF", name: "French Southern Territories" }, + { code: "GA", name: "Gabon" }, + { code: "GM", name: "Gambia" }, + { code: "GE", name: "Georgia" }, + { code: "DE", name: "Germany" }, + { code: "GH", name: "Ghana" }, + { code: "GI", name: "Gibraltar" }, + { code: "GR", name: "Greece" }, + { code: "GL", name: "Greenland" }, + { code: "GD", name: "Grenada" }, + { code: "GP", name: "Guadeloupe" }, + { code: "GU", name: "Guam" }, + { code: "GT", name: "Guatemala" }, + { code: "GG", name: "Guernsey" }, + { code: "GN", name: "Guinea" }, + { code: "GW", name: "Guinea-Bissau" }, + { code: "GY", name: "Guyana" }, + { code: "HT", name: "Haiti" }, + { code: "HM", name: "Heard Island and Mcdonald Islands" }, + { code: "VA", name: "Holy See (Vatican City State)" }, + { code: "HN", name: "Honduras" }, + { code: "HK", name: "Hong Kong" }, + { code: "HU", name: "Hungary" }, + { code: "IS", name: "Iceland" }, + { code: "IN", name: "India" }, + { code: "ID", name: "Indonesia" }, + { code: "IR", name: "Iran, Islamic Republic Of" }, + { code: "IQ", name: "Iraq" }, + { code: "IE", name: "Ireland" }, + { code: "IM", name: "Isle of Man" }, + { code: "IL", name: "Israel" }, + { code: "IT", name: "Italy" }, + { code: "JM", name: "Jamaica" }, + { code: "JP", name: "Japan" }, + { code: "JE", name: "Jersey" }, + { code: "JO", name: "Jordan" }, + { code: "KZ", name: "Kazakhstan" }, + { code: "KE", name: "Kenya" }, + { code: "KI", name: "Kiribati" }, + { code: "KP", name: "Korea, Democratic People'S Republic of" }, + { code: "KR", name: "Korea, Republic of" }, + { code: "KW", name: "Kuwait" }, + { code: "KG", name: "Kyrgyzstan" }, + { code: "LA", name: "Lao People'S Democratic Republic" }, + { code: "LV", name: "Latvia" }, + { code: "LB", name: "Lebanon" }, + { code: "LS", name: "Lesotho" }, + { code: "LR", name: "Liberia" }, + { code: "LY", name: "Libyan Arab Jamahiriya" }, + { code: "LI", name: "Liechtenstein" }, + { code: "LT", name: "Lithuania" }, + { code: "LU", name: "Luxembourg" }, + { code: "MO", name: "Macao" }, + { code: "MK", name: "Macedonia, The Former Yugoslav Republic of" }, + { code: "MG", name: "Madagascar" }, + { code: "MW", name: "Malawi" }, + { code: "MY", name: "Malaysia" }, + { code: "MV", name: "Maldives" }, + { code: "ML", name: "Mali" }, + { code: "MT", name: "Malta" }, + { code: "MH", name: "Marshall Islands" }, + { code: "MQ", name: "Martinique" }, + { code: "MR", name: "Mauritania" }, + { code: "MU", name: "Mauritius" }, + { code: "YT", name: "Mayotte" }, + { code: "MX", name: "Mexico" }, + { code: "FM", name: "Micronesia, Federated States of" }, + { code: "MD", name: "Moldova, Republic of" }, + { code: "MC", name: "Monaco" }, + { code: "MN", name: "Mongolia" }, + { code: "MS", name: "Montserrat" }, + { code: "MA", name: "Morocco" }, + { code: "MZ", name: "Mozambique" }, + { code: "MM", name: "Myanmar" }, + { code: "NA", name: "Namibia" }, + { code: "NR", name: "Nauru" }, + { code: "NP", name: "Nepal" }, + { code: "NL", name: "Netherlands" }, + { code: "AN", name: "Netherlands Antilles" }, + { code: "NC", name: "New Caledonia" }, + { code: "NZ", name: "New Zealand" }, + { code: "NI", name: "Nicaragua" }, + { code: "NE", name: "Niger" }, + { code: "NG", name: "Nigeria" }, + { code: "NU", name: "Niue" }, + { code: "NF", name: "Norfolk Island" }, + { code: "MP", name: "Northern Mariana Islands" }, + { code: "NO", name: "Norway" }, + { code: "OM", name: "Oman" }, + { code: "PK", name: "Pakistan" }, + { code: "PW", name: "Palau" }, + { code: "PS", name: "Palestinian Territory, Occupied" }, + { code: "PA", name: "Panama" }, + { code: "PG", name: "Papua New Guinea" }, + { code: "PY", name: "Paraguay" }, + { code: "PE", name: "Peru" }, + { code: "PH", name: "Philippines" }, + { code: "PN", name: "Pitcairn" }, + { code: "PL", name: "Poland" }, + { code: "PT", name: "Portugal" }, + { code: "PR", name: "Puerto Rico" }, + { code: "QA", name: "Qatar" }, + { code: "RE", name: "Reunion" }, + { code: "RO", name: "Romania" }, + { code: "RU", name: "Russian Federation" }, + { code: "RW", name: "RWANDA" }, + { code: "SH", name: "Saint Helena" }, + { code: "KN", name: "Saint Kitts and Nevis" }, + { code: "LC", name: "Saint Lucia" }, + { code: "PM", name: "Saint Pierre and Miquelon" }, + { code: "VC", name: "Saint Vincent and the Grenadines" }, + { code: "WS", name: "Samoa" }, + { code: "SM", name: "San Marino" }, + { code: "ST", name: "Sao Tome and Principe" }, + { code: "SA", name: "Saudi Arabia" }, + { code: "SN", name: "Senegal" }, + { code: "CS", name: "Serbia and Montenegro" }, + { code: "SC", name: "Seychelles" }, + { code: "SL", name: "Sierra Leone" }, + { code: "SG", name: "Singapore" }, + { code: "SK", name: "Slovakia" }, + { code: "SI", name: "Slovenia" }, + { code: "SB", name: "Solomon Islands" }, + { code: "SO", name: "Somalia" }, + { code: "ZA", name: "South Africa" }, + { code: "GS", name: "South Georgia and the South Sandwich Islands" }, + { code: "ES", name: "Spain" }, + { code: "LK", name: "Sri Lanka" }, + { code: "SD", name: "Sudan" }, + { code: "SR", name: "Suriname" }, + { code: "SJ", name: "Svalbard and Jan Mayen" }, + { code: "SZ", name: "Swaziland" }, + { code: "SE", name: "Sweden" }, + { code: "CH", name: "Switzerland" }, + { code: "SY", name: "Syrian Arab Republic" }, + { code: "TW", name: "Taiwan, Province of China" }, + { code: "TJ", name: "Tajikistan" }, + { code: "TZ", name: "Tanzania, United Republic of" }, + { code: "TH", name: "Thailand" }, + { code: "TL", name: "Timor-Leste" }, + { code: "TG", name: "Togo" }, + { code: "TK", name: "Tokelau" }, + { code: "TO", name: "Tonga" }, + { code: "TT", name: "Trinidad and Tobago" }, + { code: "TN", name: "Tunisia" }, + { code: "TR", name: "Turkey" }, + { code: "TM", name: "Turkmenistan" }, + { code: "TC", name: "Turks and Caicos Islands" }, + { code: "TV", name: "Tuvalu" }, + { code: "UG", name: "Uganda" }, + { code: "UA", name: "Ukraine" }, + { code: "AE", name: "United Arab Emirates" }, + { code: "GB", name: "United Kingdom" }, + { code: "US", name: "United States" }, + { code: "UM", name: "United States Minor Outlying Islands" }, + { code: "UY", name: "Uruguay" }, + { code: "UZ", name: "Uzbekistan" }, + { code: "VU", name: "Vanuatu" }, + { code: "VE", name: "Venezuela" }, + { code: "VN", name: "Viet Nam" }, + { code: "VG", name: "Virgin Islands, British" }, + { code: "VI", name: "Virgin Islands, U.S." }, + { code: "WF", name: "Wallis and Futuna" }, + { code: "EH", name: "Western Sahara" }, + { code: "YE", name: "Yemen" }, + { code: "ZM", name: "Zambia" }, + { code: "ZW", name: "Zimbabwe" } ]; export const tabPageProps: TabPageProps = { diff --git a/src/hooks/useListActions.ts b/src/hooks/useListActions.ts index 81fd789b1..aab9a8375 100644 --- a/src/hooks/useListActions.ts +++ b/src/hooks/useListActions.ts @@ -25,7 +25,11 @@ function useListActions( } function toggle(data: TData) { - isSelected(data) ? remove(data) : add(data); + if (isSelected(data)) { + remove(data); + } else { + add(data); + } } function set(data: TData[]) { diff --git a/src/hooks/useNavigator.ts b/src/hooks/useNavigator.ts index 180b1d1bb..e6f1c9f93 100644 --- a/src/hooks/useNavigator.ts +++ b/src/hooks/useNavigator.ts @@ -13,8 +13,13 @@ function useNavigator(): UseNavigatorResult { return (url: string, replace = false, preserveQs = false) => { const targetUrl = preserveQs ? url + search : url; - replace ? history.replace(targetUrl) : history.push(targetUrl); - window.scrollTo({ top: 0, behavior: "smooth" }); + if (replace) { + history.replace(targetUrl); + } else { + history.push(targetUrl); + } + + window.scrollTo({ behavior: "smooth", top: 0 }); }; } diff --git a/src/navigation/components/MenuDetailsPage/tree.test.ts b/src/navigation/components/MenuDetailsPage/tree.test.ts index 5464565a3..43b562d18 100644 --- a/src/navigation/components/MenuDetailsPage/tree.test.ts +++ b/src/navigation/components/MenuDetailsPage/tree.test.ts @@ -171,7 +171,7 @@ describe("Properly computes trees", () => { [{ id: "2accessories", type: "remove" }], [ { id: "2accessories", type: "remove" }, - { id: "4apparel", type: "move", sortOrder: 0 }, + { id: "4apparel", sortOrder: 0, type: "move" }, { id: "3groceries", type: "remove" } ] ]; diff --git a/src/navigation/fixtures.ts b/src/navigation/fixtures.ts index b21e5b2b5..d4a2b35de 100644 --- a/src/navigation/fixtures.ts +++ b/src/navigation/fixtures.ts @@ -6,9 +6,9 @@ export const menuList: MenuList_menus_edges_node[] = [ __typename: "Menu", id: "TWVudTox", items: [ - { id: "TWVudUl0ZW06MQ==", __typename: "MenuItem" }, - { id: "TWVudUl0ZW06Mg==", __typename: "MenuItem" }, - { id: "TWVudUl0ZW06Mw==", __typename: "MenuItem" } + { __typename: "MenuItem", id: "TWVudUl0ZW06MQ==" }, + { __typename: "MenuItem", id: "TWVudUl0ZW06Mg==" }, + { __typename: "MenuItem", id: "TWVudUl0ZW06Mw==" } ], name: "navbar" }, @@ -16,8 +16,8 @@ export const menuList: MenuList_menus_edges_node[] = [ __typename: "Menu", id: "TWVudToy", items: [ - { id: "TWVudUl0ZW06NA==", __typename: "MenuItem" }, - { id: "TWVudUl0ZW06Nw==", __typename: "MenuItem" } + { __typename: "MenuItem", id: "TWVudUl0ZW06NA==" }, + { __typename: "MenuItem", id: "TWVudUl0ZW06Nw==" } ], name: "footer" } diff --git a/src/orders/fixtures.ts b/src/orders/fixtures.ts index 754d8628d..806bcacf3 100644 --- a/src/orders/fixtures.ts +++ b/src/orders/fixtures.ts @@ -1160,8 +1160,8 @@ export const countries = [ { code: "AS", label: "American Samoa" } ]; export const shippingMethods = [ - { id: "s1", name: "DHL", country: "whole world", price: {} }, - { id: "s2", name: "UPS", country: "Afghanistan" } + { country: "whole world", id: "s1", name: "DHL", price: {} }, + { country: "Afghanistan", id: "s2", name: "UPS" } ]; export const orderLineSearch = (placeholderImage: string) => [ { @@ -1177,21 +1177,21 @@ export const orderLineSearch = (placeholderImage: string) => [ __typename: "ProductVariant" as "ProductVariant", id: "UHJvZHVjdFZhcmlhbnQ6MjAy", name: "500ml", - price: { amount: 3.0, currency: "USD", __typename: "Money" as "Money" }, + price: { __typename: "Money" as "Money", amount: 3.0, currency: "USD" }, sku: "93855755" }, { __typename: "ProductVariant" as "ProductVariant", id: "UHJvZHVjdFZhcmlhbnQ6MjAz", name: "1l", - price: { amount: 5.0, currency: "USD", __typename: "Money" as "Money" }, + price: { __typename: "Money" as "Money", amount: 5.0, currency: "USD" }, sku: "43226647" }, { __typename: "ProductVariant" as "ProductVariant", id: "UHJvZHVjdFZhcmlhbnQ6MjA0", name: "2l", - price: { amount: 7.0, currency: "USD", __typename: "Money" as "Money" }, + price: { __typename: "Money" as "Money", amount: 7.0, currency: "USD" }, sku: "80884671" } ] @@ -1209,21 +1209,21 @@ export const orderLineSearch = (placeholderImage: string) => [ __typename: "ProductVariant" as "ProductVariant", id: "UHJvZHVjdFZhcmlhbnQ6MjEx", name: "500ml", - price: { amount: 3.0, currency: "USD", __typename: "Money" as "Money" }, + price: { __typename: "Money" as "Money", amount: 3.0, currency: "USD" }, sku: "43200242" }, { __typename: "ProductVariant" as "ProductVariant", id: "UHJvZHVjdFZhcmlhbnQ6MjEy", name: "1l", - price: { amount: 5.0, currency: "USD", __typename: "Money" as "Money" }, + price: { __typename: "Money" as "Money", amount: 5.0, currency: "USD" }, sku: "79129513" }, { __typename: "ProductVariant" as "ProductVariant", id: "UHJvZHVjdFZhcmlhbnQ6MjEz", name: "2l", - price: { amount: 7.0, currency: "USD", __typename: "Money" as "Money" }, + price: { __typename: "Money" as "Money", amount: 7.0, currency: "USD" }, sku: "75799450" } ] diff --git a/src/pages/components/PageDetailsPage/PageDetailsPage.tsx b/src/pages/components/PageDetailsPage/PageDetailsPage.tsx index a95995b5d..d59e96026 100644 --- a/src/pages/components/PageDetailsPage/PageDetailsPage.tsx +++ b/src/pages/components/PageDetailsPage/PageDetailsPage.tsx @@ -99,11 +99,13 @@ const PageDetailsPage: React.FC = ({ { - return convertFromRaw(data.content) - .getPlainText() - .slice(0, 300); - }, "")} + descriptionPlaceholder={maybe( + () => + convertFromRaw(data.content) + .getPlainText() + .slice(0, 300), + "" + )} onChange={change} title={data.seoTitle} titlePlaceholder={data.title} diff --git a/src/pages/views/PageDetails.tsx b/src/pages/views/PageDetails.tsx index be91c70dc..83e956fae 100644 --- a/src/pages/views/PageDetails.tsx +++ b/src/pages/views/PageDetails.tsx @@ -19,23 +19,21 @@ export interface PageDetailsProps { params: PageUrlQueryParams; } -const createPageInput = (data: FormData): PageInput => { - return { - contentJson: JSON.stringify(data.content), - isPublished: data.isPublished, - publicationDate: data.isPublished - ? null - : data.publicationDate === "" - ? null - : data.publicationDate, - seo: { - description: data.seoDescription, - title: data.seoTitle - }, - slug: data.slug === "" ? null : data.slug, - title: data.title - }; -}; +const createPageInput = (data: FormData): PageInput => ({ + contentJson: JSON.stringify(data.content), + isPublished: data.isPublished, + publicationDate: data.isPublished + ? null + : data.publicationDate === "" + ? null + : data.publicationDate, + seo: { + description: data.seoDescription, + title: data.seoTitle + }, + slug: data.slug === "" ? null : data.slug, + title: data.title +}); export const PageDetails: React.FC = ({ id, params }) => { const navigate = useNavigator(); diff --git a/src/plugins/components/PluginsDetailsPage/PluginsDetailsPage.tsx b/src/plugins/components/PluginsDetailsPage/PluginsDetailsPage.tsx index 7258b19e7..ae0bb778a 100644 --- a/src/plugins/components/PluginsDetailsPage/PluginsDetailsPage.tsx +++ b/src/plugins/components/PluginsDetailsPage/PluginsDetailsPage.tsx @@ -80,14 +80,12 @@ const PluginsDetailsPage: React.FC = props => {
{({ data, errors, hasChanged, submit, set, triggerChange }) => { const onChange = (event: ChangeEvent) => { + const { name, value } = event.target; const newData = { - active: data.active, + active: name === "active" ? value : data.active, configuration: data.configuration }; - const { name, value } = event.target; - name === "active" - ? (newData.active = value) - : (newData.active = data.active); + if (newData.configuration) { newData.configuration.map(item => { if (item.name === name) { diff --git a/src/plugins/components/PluginsList/PluginsList.tsx b/src/plugins/components/PluginsList/PluginsList.tsx index 35699875c..0094146a7 100644 --- a/src/plugins/components/PluginsList/PluginsList.tsx +++ b/src/plugins/components/PluginsList/PluginsList.tsx @@ -98,36 +98,34 @@ const PluginList: React.FC = props => { {renderCollection( plugins, - plugin => { - return ( - - - {maybe(() => plugin.name, )} - - - {maybe( - () => ( - - ), - - )} - - -
- -
-
-
- ); - }, + plugin => ( + + + {maybe(() => plugin.name, )} + + + {maybe( + () => ( + + ), + + )} + + +
+ +
+
+
+ ), () => ( diff --git a/src/productTypes/containers/ProductTypeOperations.tsx b/src/productTypes/containers/ProductTypeOperations.tsx index a16c1d2d8..6fdc327d3 100644 --- a/src/productTypes/containers/ProductTypeOperations.tsx +++ b/src/productTypes/containers/ProductTypeOperations.tsx @@ -98,88 +98,84 @@ const ProductTypeOperations: React.FC = ({ onProductTypeAttributeReorder, onProductTypeDelete, onProductTypeUpdate -}) => { - return ( - - {(...deleteProductType) => ( - - {(...updateProductType) => ( - - {(...assignAttribute) => ( - - {(...unassignAttribute) => ( - - {( - reorderAttributeMutation, - reorderAttributeMutationResult - ) => { - const reorderAttributeMutationFn: MutationFunction< - ProductTypeAttributeReorder, - ProductTypeAttributeReorderVariables - > = opts => { - const optimisticResponse: ProductTypeAttributeReorder = { - productTypeReorderAttributes: { - __typename: "ProductTypeReorderAttributes" as "ProductTypeReorderAttributes", - errors: [], - productType: { - ...productType, - productAttributes: - opts.variables.type === - AttributeTypeEnum.PRODUCT - ? moveAttribute( - productType.productAttributes, - opts.variables.move - ) - : productType.productAttributes, - variantAttributes: - opts.variables.type === - AttributeTypeEnum.VARIANT - ? moveAttribute( - productType.variantAttributes, - opts.variables.move - ) - : productType.variantAttributes - } +}) => ( + + {(...deleteProductType) => ( + + {(...updateProductType) => ( + + {(...assignAttribute) => ( + + {(...unassignAttribute) => ( + + {( + reorderAttributeMutation, + reorderAttributeMutationResult + ) => { + const reorderAttributeMutationFn: MutationFunction< + ProductTypeAttributeReorder, + ProductTypeAttributeReorderVariables + > = opts => { + const optimisticResponse: ProductTypeAttributeReorder = { + productTypeReorderAttributes: { + __typename: "ProductTypeReorderAttributes" as "ProductTypeReorderAttributes", + errors: [], + productType: { + ...productType, + productAttributes: + opts.variables.type === + AttributeTypeEnum.PRODUCT + ? moveAttribute( + productType.productAttributes, + opts.variables.move + ) + : productType.productAttributes, + variantAttributes: + opts.variables.type === + AttributeTypeEnum.VARIANT + ? moveAttribute( + productType.variantAttributes, + opts.variables.move + ) + : productType.variantAttributes } - }; - return reorderAttributeMutation({ - ...opts, - optimisticResponse - }); + } }; - - return children({ - assignAttribute: getMutationProviderData( - ...assignAttribute - ), - deleteProductType: getMutationProviderData( - ...deleteProductType - ), - reorderAttribute: getMutationProviderData( - reorderAttributeMutationFn, - reorderAttributeMutationResult - ), - unassignAttribute: getMutationProviderData( - ...unassignAttribute - ), - updateProductType: getMutationProviderData( - ...updateProductType - ) + return reorderAttributeMutation({ + ...opts, + optimisticResponse }); - }} - - )} - - )} - - )} - - )} - - ); -}; + }; + + return children({ + assignAttribute: getMutationProviderData( + ...assignAttribute + ), + deleteProductType: getMutationProviderData( + ...deleteProductType + ), + reorderAttribute: getMutationProviderData( + reorderAttributeMutationFn, + reorderAttributeMutationResult + ), + unassignAttribute: getMutationProviderData( + ...unassignAttribute + ), + updateProductType: getMutationProviderData( + ...updateProductType + ) + }); + }} + + )} + + )} + + )} + + )} + +); export default ProductTypeOperations; diff --git a/src/products/components/ProductVariantCreateDialog/reducer.ts b/src/products/components/ProductVariantCreateDialog/reducer.ts index ee8480ef0..6280a3e24 100644 --- a/src/products/components/ProductVariantCreateDialog/reducer.ts +++ b/src/products/components/ProductVariantCreateDialog/reducer.ts @@ -1,4 +1,3 @@ -//#region import { add, remove, @@ -36,7 +35,7 @@ export interface ProductVariantCreateReducerAction { valueId?: string; variantIndex?: number; } -//#endregion + function selectValue( prevState: ProductVariantCreateFormData, attributeId: string, diff --git a/src/products/containers/ProductVariantOperations.tsx b/src/products/containers/ProductVariantOperations.tsx index 466ddb5b2..fdb9a4a8b 100644 --- a/src/products/containers/ProductVariantOperations.tsx +++ b/src/products/containers/ProductVariantOperations.tsx @@ -50,30 +50,28 @@ const VariantUpdateOperations: React.FC = ({ onUpdate, onImageAssign, onImageUnassign -}) => { - return ( - - {(...assignImage) => ( - - {(...unassignImage) => ( - - {(...updateVariant) => ( - - {(...deleteVariant) => - children({ - assignImage: getMutationProviderData(...assignImage), - deleteVariant: getMutationProviderData(...deleteVariant), - unassignImage: getMutationProviderData(...unassignImage), - updateVariant: getMutationProviderData(...updateVariant) - }) - } - - )} - - )} - - )} - - ); -}; +}) => ( + + {(...assignImage) => ( + + {(...unassignImage) => ( + + {(...updateVariant) => ( + + {(...deleteVariant) => + children({ + assignImage: getMutationProviderData(...assignImage), + deleteVariant: getMutationProviderData(...deleteVariant), + unassignImage: getMutationProviderData(...unassignImage), + updateVariant: getMutationProviderData(...updateVariant) + }) + } + + )} + + )} + + )} + +); export default VariantUpdateOperations; diff --git a/src/products/index.tsx b/src/products/index.tsx index e08553b87..179b094b9 100644 --- a/src/products/index.tsx +++ b/src/products/index.tsx @@ -82,13 +82,11 @@ const ProductImage: React.FC> = ({ const ProductVariantCreate: React.FC> = ({ match -}) => { - return ( - - ); -}; +}) => ( + +); const Component = () => { const intl = useIntl(); diff --git a/src/products/views/ProductImage.tsx b/src/products/views/ProductImage.tsx index 3a21d105a..2ec569879 100644 --- a/src/products/views/ProductImage.tsx +++ b/src/products/views/ProductImage.tsx @@ -49,80 +49,78 @@ export const ProductImage: React.FC = ({ }} require={["product"]} > - {({ data, loading }) => { - return ( - - {(updateImage, updateResult) => ( - - {(deleteImage, deleteResult) => { - const handleDelete = () => - deleteImage({ variables: { id: imageId } }); - const handleImageClick = (id: string) => () => - navigate(productImageUrl(productId, id)); - const handleUpdate = (formData: { description: string }) => { - updateImage({ - variables: { - alt: formData.description, - id: imageId - } - }); - }; - const image = data && data.product && data.product.mainImage; + {({ data, loading }) => ( + + {(updateImage, updateResult) => ( + + {(deleteImage, deleteResult) => { + const handleDelete = () => + deleteImage({ variables: { id: imageId } }); + const handleImageClick = (id: string) => () => + navigate(productImageUrl(productId, id)); + const handleUpdate = (formData: { description: string }) => { + updateImage({ + variables: { + alt: formData.description, + id: imageId + } + }); + }; + const image = data && data.product && data.product.mainImage; - const formTransitionState = getMutationState( - updateResult.called, - updateResult.loading, - maybe(() => updateResult.data.productImageUpdate.errors) - ); - const deleteTransitionState = getMutationState( - deleteResult.called, - deleteResult.loading, - [] - ); - return ( - <> - data.product.name)} - image={image || null} - images={maybe(() => data.product.images)} - onBack={handleBack} - onDelete={() => - navigate( - productImageUrl(productId, imageId, { - action: "remove" - }) - ) - } - onRowClick={handleImageClick} - onSubmit={handleUpdate} - saveButtonBarState={formTransitionState} - /> - - navigate(productImageUrl(productId, imageId), true) - } - onConfirm={handleDelete} - open={params.action === "remove"} - title={intl.formatMessage({ - defaultMessage: "Delete Image", - description: "dialog header" - })} - variant="delete" - confirmButtonState={deleteTransitionState} - > - - - - - - ); - }} - - )} - - ); - }} + const formTransitionState = getMutationState( + updateResult.called, + updateResult.loading, + maybe(() => updateResult.data.productImageUpdate.errors) + ); + const deleteTransitionState = getMutationState( + deleteResult.called, + deleteResult.loading, + [] + ); + return ( + <> + data.product.name)} + image={image || null} + images={maybe(() => data.product.images)} + onBack={handleBack} + onDelete={() => + navigate( + productImageUrl(productId, imageId, { + action: "remove" + }) + ) + } + onRowClick={handleImageClick} + onSubmit={handleUpdate} + saveButtonBarState={formTransitionState} + /> + + navigate(productImageUrl(productId, imageId), true) + } + onConfirm={handleDelete} + open={params.action === "remove"} + title={intl.formatMessage({ + defaultMessage: "Delete Image", + description: "dialog header" + })} + variant="delete" + confirmButtonState={deleteTransitionState} + > + + + + + + ); + }} + + )} + + )} ); }; diff --git a/src/siteSettings/index.tsx b/src/siteSettings/index.tsx index 3d83171f7..195e46012 100644 --- a/src/siteSettings/index.tsx +++ b/src/siteSettings/index.tsx @@ -12,7 +12,7 @@ const SiteSettings: React.FC> = ({ location }) => { return ; }; -export const SiteSettingsSection: React.FC = () => { - return ; -}; +export const SiteSettingsSection: React.FC = () => ( + +); export default SiteSettingsSection; diff --git a/src/storybook/stories/components/MultiSelectField.tsx b/src/storybook/stories/components/MultiSelectField.tsx index 4b5b4dc6c..d68921491 100644 --- a/src/storybook/stories/components/MultiSelectField.tsx +++ b/src/storybook/stories/components/MultiSelectField.tsx @@ -7,10 +7,10 @@ import CardDecorator from "../../CardDecorator"; import Decorator from "../../Decorator"; const choices = [ - { value: "1", label: "Apparel" }, - { value: "2", label: "Groceries" }, - { value: "3", label: "Books" }, - { value: "4", label: "Accessories" } + { label: "Apparel", value: "1" }, + { label: "Groceries", value: "2" }, + { label: "Books", value: "3" }, + { label: "Accessories", value: "4" } ]; storiesOf("Generics / MultiSelectField", module) diff --git a/src/storybook/stories/components/RichTextEditor.tsx b/src/storybook/stories/components/RichTextEditor.tsx index 9085612c0..375129efe 100644 --- a/src/storybook/stories/components/RichTextEditor.tsx +++ b/src/storybook/stories/components/RichTextEditor.tsx @@ -12,7 +12,7 @@ export const content: RawDraftContentState = { data: {}, depth: 0, entityRanges: [], - inlineStyleRanges: [{ offset: 0, length: 4, style: "BOLD" }], + inlineStyleRanges: [{ length: 4, offset: 0, style: "BOLD" }], key: "rosn", text: "bold", type: "unstyled" @@ -21,7 +21,7 @@ export const content: RawDraftContentState = { data: {}, depth: 0, entityRanges: [], - inlineStyleRanges: [{ offset: 0, length: 6, style: "ITALIC" }], + inlineStyleRanges: [{ length: 6, offset: 0, style: "ITALIC" }], key: "6tbch", text: "italic", type: "unstyled" @@ -30,7 +30,7 @@ export const content: RawDraftContentState = { data: {}, depth: 0, entityRanges: [], - inlineStyleRanges: [{ offset: 0, length: 13, style: "STRIKETHROUGH" }], + inlineStyleRanges: [{ length: 13, offset: 0, style: "STRIKETHROUGH" }], key: "1p044", text: "strikethrough", type: "unstyled" @@ -92,7 +92,7 @@ export const content: RawDraftContentState = { { data: {}, depth: 0, - entityRanges: [{ offset: 0, length: 4, key: 0 }], + entityRanges: [{ key: 0, length: 4, offset: 0 }], inlineStyleRanges: [], key: "5aejo", text: "link", @@ -100,7 +100,7 @@ export const content: RawDraftContentState = { } ], entityMap: { - "0": { type: "LINK", mutability: "MUTABLE", data: { url: "#" } } + "0": { data: { url: "#" }, mutability: "MUTABLE", type: "LINK" } } }; storiesOf("Generics / Rich text editor", module) diff --git a/src/storybook/stories/components/SingleSelectField.tsx b/src/storybook/stories/components/SingleSelectField.tsx index 56d815f2d..ead6afeed 100644 --- a/src/storybook/stories/components/SingleSelectField.tsx +++ b/src/storybook/stories/components/SingleSelectField.tsx @@ -6,10 +6,10 @@ import CardDecorator from "../../CardDecorator"; import Decorator from "../../Decorator"; const choices = [ - { value: "1", label: "Apparel" }, - { value: "2", label: "Groceries" }, - { value: "3", label: "Books" }, - { value: "4", label: "Accessories" } + { label: "Apparel", value: "1" }, + { label: "Groceries", value: "2" }, + { label: "Books", value: "3" }, + { label: "Accessories", value: "4" } ]; storiesOf("Generics / SingleSelectField", module) diff --git a/src/storybook/stories/products/ProductImagePage.tsx b/src/storybook/stories/products/ProductImagePage.tsx index 4d5a1cd37..5df07bd61 100644 --- a/src/storybook/stories/products/ProductImagePage.tsx +++ b/src/storybook/stories/products/ProductImagePage.tsx @@ -5,7 +5,7 @@ import placeholder from "@assets/images/placeholder1080x1080.png"; import ProductImagePage from "../../../products/components/ProductImagePage"; import Decorator from "../../Decorator"; -const image = { id: "", url: placeholder, alt: "Lorem ipsum" }; +const image = { alt: "Lorem ipsum", id: "", url: placeholder }; const images = (Array(8) as any) .fill({ id: "img", url: placeholder }) .map((image, imageIndex) => ({ ...image, id: image.id + imageIndex })); diff --git a/src/translations/components/TranslationsEntitiesList/TranslationsEntitiesList.tsx b/src/translations/components/TranslationsEntitiesList/TranslationsEntitiesList.tsx index 2b58938f7..60d632900 100644 --- a/src/translations/components/TranslationsEntitiesList/TranslationsEntitiesList.tsx +++ b/src/translations/components/TranslationsEntitiesList/TranslationsEntitiesList.tsx @@ -9,11 +9,10 @@ import classNames from "classnames"; import React from "react"; import { FormattedMessage, useIntl } from "react-intl"; -import { ListProps } from "../../../types"; - import ResponsiveTable from "@saleor/components/ResponsiveTable"; -import Skeleton from "@saleor/components/Skeleton"; import TablePagination from "@saleor/components/TablePagination"; +import Skeleton from "@saleor/components/Skeleton"; +import { ListProps } from "../../../types"; import { maybe, renderCollection } from "../../../misc"; export interface TranslatableEntity {