env:
  browser: true
  jquery: true
  node: true
  es6: true

globals:
  angular: true

extends:
  - 'eslint:recommended'
  - 'plugin:storybook/recommended'
  - prettier

plugins:
  - import

parserOptions:
  ecmaVersion: 2018
  sourceType: module
  project: './tsconfig.json'
  ecmaFeatures:
    modules: true

rules:
  no-control-regex: 'off'
  no-empty: warn
  no-empty-function: warn
  no-useless-escape: 'off'
  import/order:
    [
      'error',
      {
        pathGroups:
          [
            { pattern: '@@/**', group: 'internal', position: 'after' },
            { pattern: '@/**', group: 'internal' },
            { pattern: '{Kubernetes,Portainer,Agent,Azure,Docker}/**', group: 'internal' },
          ],
        groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
        pathGroupsExcludedImportTypes: ['internal'],
      },
    ]

settings:
  'import/resolver':
    alias:
      map:
        - ['@@', './app/react/components']
        - ['@', './app']
      extensions: ['.js', '.ts', '.tsx']

overrides:
  - files:
      - app/**/*.ts{,x}
    parserOptions:
      project: './tsconfig.json'
    parser: '@typescript-eslint/parser'
    plugins:
      - '@typescript-eslint'
      - 'regex'
    extends:
      - airbnb
      - airbnb-typescript
      - 'plugin:eslint-comments/recommended'
      - 'plugin:react-hooks/recommended'
      - 'plugin:react/jsx-runtime'
      - 'plugin:@typescript-eslint/recommended'
      - 'plugin:@typescript-eslint/eslint-recommended'
      - 'plugin:promise/recommended'
      - 'plugin:storybook/recommended'
      - prettier # should be last
    settings:
      react:
        version: 'detect'
    rules:
      import/order:
        [
          'error',
          {
            pathGroups: [{ pattern: '@@/**', group: 'internal', position: 'after' }, { pattern: '@/**', group: 'internal' }],
            groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
            'newlines-between': 'always',
          },
        ]
      func-style: [error, 'declaration']
      import/prefer-default-export: off
      no-use-before-define: ['error', { functions: false }]
      '@typescript-eslint/no-use-before-define': ['error', { functions: false }]
      no-shadow: 'off'
      '@typescript-eslint/no-shadow': off
      jsx-a11y/no-autofocus: warn
      react/forbid-prop-types: off
      react/require-default-props: off
      react/no-array-index-key: off
      no-underscore-dangle: off
      react/jsx-filename-extension: [0]
      import/no-extraneous-dependencies: ['error', { devDependencies: true }]
      '@typescript-eslint/explicit-module-boundary-types': off
      '@typescript-eslint/no-unused-vars': 'error'
      '@typescript-eslint/no-explicit-any': 'error'
      'jsx-a11y/label-has-associated-control': ['error', { 'assert': 'either' }]
      'react/function-component-definition': ['error', { 'namedComponents': 'function-declaration' }]
      'react/jsx-no-bind': off
      'no-await-in-loop': 'off'
      'react/jsx-no-useless-fragment': ['error', { allowExpressions: true }]
      'regex/invalid': ['error', [{ 'regex': 'data-feather="(.*)"', 'message': 'Please use `react-feather` package instead' }]]
  - files:
      - app/**/*.test.*
    extends:
      - 'plugin:jest/recommended'
      - 'plugin:jest/style'
    env:
      'jest/globals': true
    rules:
      'react/jsx-no-constructed-context-values': off
  - files:
      - app/**/*.stories.*
    rules:
      'no-alert': off
