mirror of
https://github.com/twentyhq/twenty
synced 2026-04-21 13:37:22 +00:00
Move tools/eslint-rules to packages/twenty-eslint-rules (#17203)
## Summary Moves the custom ESLint rules from `tools/eslint-rules` to `packages/twenty-eslint-rules` for better organization within the monorepo packages structure. ## Changes - Move `eslint-rules` from `tools/` to `packages/twenty-eslint-rules` - Use `loadWorkspaceRules` from `@nx/eslint-plugin` to load custom rules - Update all ESLint configs to use the `twenty/` rule prefix instead of `@nx/workspace-` - Update `project.json`, `jest.config.mjs` with new paths - Update `package.json` workspaces and `nx.json` cache inputs - Update Dockerfile reference ## Technical Details The custom ESLint rules are now loaded using Nx's `loadWorkspaceRules` utility which: - Handles TypeScript transpilation automatically - Allows loading workspace rules from any directory - Provides a cleaner approach than the previous `@nx/workspace-` convention ## Testing - Verified all 17 custom ESLint rules load correctly from the new location - Verified linting works on dependent packages (twenty-front, twenty-server, etc.)
This commit is contained in:
parent
a429bc922d
commit
c737028dd6
225 changed files with 622 additions and 4600 deletions
|
|
@ -11,6 +11,8 @@ import unicornPlugin from 'eslint-plugin-unicorn';
|
||||||
import unusedImportsPlugin from 'eslint-plugin-unused-imports';
|
import unusedImportsPlugin from 'eslint-plugin-unused-imports';
|
||||||
import jsoncParser from 'jsonc-eslint-parser';
|
import jsoncParser from 'jsonc-eslint-parser';
|
||||||
|
|
||||||
|
const twentyRules = await nxPlugin.loadWorkspaceRules('packages/twenty-eslint-rules');
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
// Base JavaScript configuration
|
// Base JavaScript configuration
|
||||||
js.configs.recommended,
|
js.configs.recommended,
|
||||||
|
|
@ -195,6 +197,7 @@ export default [
|
||||||
plugins: {
|
plugins: {
|
||||||
...mdxPlugin.flat.plugins,
|
...mdxPlugin.flat.plugins,
|
||||||
'@nx': nxPlugin,
|
'@nx': nxPlugin,
|
||||||
|
'twenty': { rules: twentyRules },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mdxPlugin.flatCodeBlocks,
|
mdxPlugin.flatCodeBlocks,
|
||||||
|
|
@ -205,9 +208,9 @@ export default [
|
||||||
'unused-imports/no-unused-imports': 'off',
|
'unused-imports/no-unused-imports': 'off',
|
||||||
'unused-imports/no-unused-vars': 'off',
|
'unused-imports/no-unused-vars': 'off',
|
||||||
// Enforce JSX tags on separate lines to prevent Crowdin translation issues
|
// Enforce JSX tags on separate lines to prevent Crowdin translation issues
|
||||||
'@nx/workspace-mdx-component-newlines': 'error',
|
'twenty/mdx-component-newlines': 'error',
|
||||||
// Disallow angle bracket placeholders to prevent Crowdin translation errors
|
// Disallow angle bracket placeholders to prevent Crowdin translation errors
|
||||||
'@nx/workspace-no-angle-bracket-placeholders': 'error',
|
'twenty/no-angle-bracket-placeholders': 'error',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,9 @@
|
||||||
const nxPreset = require('@nx/jest/preset').default;
|
const nxPreset = require('@nx/jest/preset').default;
|
||||||
|
|
||||||
module.exports = { ...nxPreset };
|
module.exports = {
|
||||||
|
...nxPreset,
|
||||||
|
// Override the new testEnvironmentOptions added in @nx/jest 22.3.3
|
||||||
|
// which breaks Lingui's module resolution
|
||||||
|
testEnvironmentOptions: {},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
|
||||||
117
nx.json
117
nx.json
|
|
@ -4,9 +4,7 @@
|
||||||
"libsDir": "packages"
|
"libsDir": "packages"
|
||||||
},
|
},
|
||||||
"namedInputs": {
|
"namedInputs": {
|
||||||
"default": [
|
"default": ["{projectRoot}/**/*"],
|
||||||
"{projectRoot}/**/*"
|
|
||||||
],
|
|
||||||
"excludeStories": [
|
"excludeStories": [
|
||||||
"default",
|
"default",
|
||||||
"!{projectRoot}/.storybook/*",
|
"!{projectRoot}/.storybook/*",
|
||||||
|
|
@ -34,26 +32,17 @@
|
||||||
"targetDefaults": {
|
"targetDefaults": {
|
||||||
"build": {
|
"build": {
|
||||||
"cache": true,
|
"cache": true,
|
||||||
"inputs": [
|
"inputs": ["^production", "production"],
|
||||||
"^production",
|
"dependsOn": ["^build"]
|
||||||
"production"
|
|
||||||
],
|
|
||||||
"dependsOn": [
|
|
||||||
"^build"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"start": {
|
"start": {
|
||||||
"cache": false,
|
"cache": false,
|
||||||
"dependsOn": [
|
"dependsOn": ["^build"]
|
||||||
"^build"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"lint": {
|
"lint": {
|
||||||
"executor": "@nx/eslint:lint",
|
"executor": "@nx/eslint:lint",
|
||||||
"cache": true,
|
"cache": true,
|
||||||
"outputs": [
|
"outputs": ["{options.outputFile}"],
|
||||||
"{options.outputFile}"
|
|
||||||
],
|
|
||||||
"options": {
|
"options": {
|
||||||
"eslintConfig": "{projectRoot}/eslint.config.mjs",
|
"eslintConfig": "{projectRoot}/eslint.config.mjs",
|
||||||
"cache": true,
|
"cache": true,
|
||||||
|
|
@ -67,9 +56,7 @@
|
||||||
"fix": true
|
"fix": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependsOn": [
|
"dependsOn": ["^build"]
|
||||||
"^build"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"lint:diff-with-main": {
|
"lint:diff-with-main": {
|
||||||
"executor": "nx:run-commands",
|
"executor": "nx:run-commands",
|
||||||
|
|
@ -103,9 +90,7 @@
|
||||||
"write": true
|
"write": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependsOn": [
|
"dependsOn": ["^build"]
|
||||||
"^build"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"typecheck": {
|
"typecheck": {
|
||||||
"executor": "nx:run-commands",
|
"executor": "nx:run-commands",
|
||||||
|
|
@ -119,30 +104,22 @@
|
||||||
"watch": true
|
"watch": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependsOn": [
|
"dependsOn": ["^build"]
|
||||||
"^build"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"test": {
|
"test": {
|
||||||
"executor": "@nx/jest:jest",
|
"executor": "@nx/jest:jest",
|
||||||
"cache": true,
|
"cache": true,
|
||||||
"dependsOn": [
|
"dependsOn": ["^build"],
|
||||||
"^build"
|
|
||||||
],
|
|
||||||
"inputs": [
|
"inputs": [
|
||||||
"^default",
|
"^default",
|
||||||
"excludeStories",
|
"excludeStories",
|
||||||
"{workspaceRoot}/jest.preset.js"
|
"{workspaceRoot}/jest.preset.js"
|
||||||
],
|
],
|
||||||
"outputs": [
|
"outputs": ["{projectRoot}/coverage"],
|
||||||
"{projectRoot}/coverage"
|
|
||||||
],
|
|
||||||
"options": {
|
"options": {
|
||||||
"jestConfig": "{projectRoot}/jest.config.mjs",
|
"jestConfig": "{projectRoot}/jest.config.mjs",
|
||||||
"coverage": true,
|
"coverage": true,
|
||||||
"coverageReporters": [
|
"coverageReporters": ["text-summary"],
|
||||||
"text-summary"
|
|
||||||
],
|
|
||||||
"cacheDirectory": "../../.cache/jest/{projectRoot}"
|
"cacheDirectory": "../../.cache/jest/{projectRoot}"
|
||||||
},
|
},
|
||||||
"configurations": {
|
"configurations": {
|
||||||
|
|
@ -151,10 +128,7 @@
|
||||||
"maxWorkers": 3
|
"maxWorkers": 3
|
||||||
},
|
},
|
||||||
"coverage": {
|
"coverage": {
|
||||||
"coverageReporters": [
|
"coverageReporters": ["lcov", "text"]
|
||||||
"lcov",
|
|
||||||
"text"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"watch": {
|
"watch": {
|
||||||
"watch": true
|
"watch": true
|
||||||
|
|
@ -163,36 +137,25 @@
|
||||||
},
|
},
|
||||||
"test:e2e": {
|
"test:e2e": {
|
||||||
"cache": true,
|
"cache": true,
|
||||||
"dependsOn": [
|
"dependsOn": ["^build"]
|
||||||
"^build"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"storybook:build": {
|
"storybook:build": {
|
||||||
"executor": "nx:run-commands",
|
"executor": "nx:run-commands",
|
||||||
"cache": true,
|
"cache": true,
|
||||||
"inputs": [
|
"inputs": ["^default", "excludeTests"],
|
||||||
"^default",
|
"outputs": ["{projectRoot}/{options.output-dir}"],
|
||||||
"excludeTests"
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
"{projectRoot}/{options.output-dir}"
|
|
||||||
],
|
|
||||||
"options": {
|
"options": {
|
||||||
"cwd": "{projectRoot}",
|
"cwd": "{projectRoot}",
|
||||||
"command": "NODE_OPTIONS='--max-old-space-size=10240' VITE_DISABLE_TYPESCRIPT_CHECKER=true storybook build --test",
|
"command": "NODE_OPTIONS='--max-old-space-size=10240' VITE_DISABLE_TYPESCRIPT_CHECKER=true storybook build --test",
|
||||||
"output-dir": "storybook-static",
|
"output-dir": "storybook-static",
|
||||||
"config-dir": ".storybook"
|
"config-dir": ".storybook"
|
||||||
},
|
},
|
||||||
"dependsOn": [
|
"dependsOn": ["^build"]
|
||||||
"^build"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"storybook:serve:dev": {
|
"storybook:serve:dev": {
|
||||||
"executor": "nx:run-commands",
|
"executor": "nx:run-commands",
|
||||||
"cache": true,
|
"cache": true,
|
||||||
"dependsOn": [
|
"dependsOn": ["^build"],
|
||||||
"^build"
|
|
||||||
],
|
|
||||||
"options": {
|
"options": {
|
||||||
"cwd": "{projectRoot}",
|
"cwd": "{projectRoot}",
|
||||||
"command": "storybook dev",
|
"command": "storybook dev",
|
||||||
|
|
@ -201,9 +164,7 @@
|
||||||
},
|
},
|
||||||
"storybook:serve:static": {
|
"storybook:serve:static": {
|
||||||
"executor": "nx:run-commands",
|
"executor": "nx:run-commands",
|
||||||
"dependsOn": [
|
"dependsOn": ["storybook:build"],
|
||||||
"storybook:build"
|
|
||||||
],
|
|
||||||
"options": {
|
"options": {
|
||||||
"cwd": "{projectRoot}",
|
"cwd": "{projectRoot}",
|
||||||
"command": "npx http-server {args.staticDir} -a={args.host} --port={args.port} --silent={args.silent}",
|
"command": "npx http-server {args.staticDir} -a={args.host} --port={args.port} --silent={args.silent}",
|
||||||
|
|
@ -216,13 +177,8 @@
|
||||||
"storybook:test": {
|
"storybook:test": {
|
||||||
"executor": "nx:run-commands",
|
"executor": "nx:run-commands",
|
||||||
"cache": true,
|
"cache": true,
|
||||||
"inputs": [
|
"inputs": ["^default", "excludeTests"],
|
||||||
"^default",
|
"outputs": ["{projectRoot}/coverage/storybook"],
|
||||||
"excludeTests"
|
|
||||||
],
|
|
||||||
"outputs": [
|
|
||||||
"{projectRoot}/coverage/storybook"
|
|
||||||
],
|
|
||||||
"options": {
|
"options": {
|
||||||
"cwd": "{projectRoot}",
|
"cwd": "{projectRoot}",
|
||||||
"commands": [
|
"commands": [
|
||||||
|
|
@ -238,10 +194,7 @@
|
||||||
},
|
},
|
||||||
"storybook:test:no-coverage": {
|
"storybook:test:no-coverage": {
|
||||||
"executor": "nx:run-commands",
|
"executor": "nx:run-commands",
|
||||||
"inputs": [
|
"inputs": ["^default", "excludeTests"],
|
||||||
"^default",
|
|
||||||
"excludeTests"
|
|
||||||
],
|
|
||||||
"options": {
|
"options": {
|
||||||
"cwd": "{projectRoot}",
|
"cwd": "{projectRoot}",
|
||||||
"commands": [
|
"commands": [
|
||||||
|
|
@ -326,29 +279,21 @@
|
||||||
"inputs": [
|
"inputs": [
|
||||||
"default",
|
"default",
|
||||||
"{workspaceRoot}/eslint.config.mjs",
|
"{workspaceRoot}/eslint.config.mjs",
|
||||||
"{workspaceRoot}/tools/eslint-rules/**/*"
|
"{workspaceRoot}/packages/twenty-eslint-rules/**/*"
|
||||||
]
|
|
||||||
},
|
|
||||||
"@nx/vite:test": {
|
|
||||||
"cache": true,
|
|
||||||
"inputs": [
|
|
||||||
"default",
|
|
||||||
"^default"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"@nx/vite:build": {
|
"@nx/vite:build": {
|
||||||
"cache": true,
|
"cache": true,
|
||||||
"dependsOn": [
|
"dependsOn": ["^build"],
|
||||||
"^build"
|
"inputs": ["default", "^default"]
|
||||||
],
|
},
|
||||||
"inputs": [
|
"@nx/vitest:test": {
|
||||||
"default",
|
"cache": true,
|
||||||
"^default"
|
"inputs": ["default", "^default"]
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"installation": {
|
"installation": {
|
||||||
"version": "22.0.3"
|
"version": "22.3.3"
|
||||||
},
|
},
|
||||||
"generators": {
|
"generators": {
|
||||||
"@nx/react": {
|
"@nx/react": {
|
||||||
|
|
@ -376,9 +321,7 @@
|
||||||
"tasksRunnerOptions": {
|
"tasksRunnerOptions": {
|
||||||
"default": {
|
"default": {
|
||||||
"options": {
|
"options": {
|
||||||
"cacheableOperations": [
|
"cacheableOperations": ["storybook:build"]
|
||||||
"storybook:build"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
24
package.json
24
package.json
|
|
@ -72,14 +72,14 @@
|
||||||
"@graphql-codegen/typescript": "^3.0.4",
|
"@graphql-codegen/typescript": "^3.0.4",
|
||||||
"@graphql-codegen/typescript-operations": "^3.0.4",
|
"@graphql-codegen/typescript-operations": "^3.0.4",
|
||||||
"@graphql-codegen/typescript-react-apollo": "^3.3.7",
|
"@graphql-codegen/typescript-react-apollo": "^3.3.7",
|
||||||
"@nx/eslint": "22.0.3",
|
"@nx/eslint": "22.3.3",
|
||||||
"@nx/eslint-plugin": "22.0.3",
|
"@nx/eslint-plugin": "22.3.3",
|
||||||
"@nx/jest": "22.0.3",
|
"@nx/jest": "22.3.3",
|
||||||
"@nx/js": "22.0.3",
|
"@nx/js": "22.3.3",
|
||||||
"@nx/react": "22.0.3",
|
"@nx/react": "22.3.3",
|
||||||
"@nx/storybook": "22.0.3",
|
"@nx/storybook": "22.3.3",
|
||||||
"@nx/vite": "22.0.3",
|
"@nx/vite": "22.3.3",
|
||||||
"@nx/web": "22.0.3",
|
"@nx/web": "22.3.3",
|
||||||
"@sentry/types": "^8",
|
"@sentry/types": "^8",
|
||||||
"@storybook-community/storybook-addon-cookie": "^5.0.0",
|
"@storybook-community/storybook-addon-cookie": "^5.0.0",
|
||||||
"@storybook/addon-coverage": "^3.0.0",
|
"@storybook/addon-coverage": "^3.0.0",
|
||||||
|
|
@ -165,7 +165,7 @@
|
||||||
"jsdom": "~22.1.0",
|
"jsdom": "~22.1.0",
|
||||||
"msw": "^2.0.11",
|
"msw": "^2.0.11",
|
||||||
"msw-storybook-addon": "^2.0.5",
|
"msw-storybook-addon": "^2.0.5",
|
||||||
"nx": "22.0.3",
|
"nx": "22.3.3",
|
||||||
"prettier": "^3.1.1",
|
"prettier": "^3.1.1",
|
||||||
"raw-loader": "^4.0.2",
|
"raw-loader": "^4.0.2",
|
||||||
"rimraf": "^5.0.5",
|
"rimraf": "^5.0.5",
|
||||||
|
|
@ -195,7 +195,9 @@
|
||||||
"typescript": "5.9.2",
|
"typescript": "5.9.2",
|
||||||
"graphql-redis-subscriptions/ioredis": "^5.6.0",
|
"graphql-redis-subscriptions/ioredis": "^5.6.0",
|
||||||
"prosemirror-view": "1.40.0",
|
"prosemirror-view": "1.40.0",
|
||||||
"prosemirror-transform": "1.10.4"
|
"prosemirror-transform": "1.10.4",
|
||||||
|
"@lingui/core": "5.1.2",
|
||||||
|
"@types/qs": "6.9.16"
|
||||||
},
|
},
|
||||||
"version": "0.2.1",
|
"version": "0.2.1",
|
||||||
"nx": {},
|
"nx": {},
|
||||||
|
|
@ -220,7 +222,7 @@
|
||||||
"packages/twenty-apps",
|
"packages/twenty-apps",
|
||||||
"packages/twenty-cli",
|
"packages/twenty-cli",
|
||||||
"packages/create-twenty-app",
|
"packages/create-twenty-app",
|
||||||
"tools/eslint-rules"
|
"packages/twenty-eslint-rules"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"prettier": {
|
"prettier": {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import typescriptParser from '@typescript-eslint/parser';
|
import typescriptParser from '@typescript-eslint/parser';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import { fileURLToPath } from 'url';
|
import { fileURLToPath } from 'url';
|
||||||
import reactConfig from '../../../../../tools/eslint-rules/eslint.config.react.mjs';
|
import reactConfig from '../../../../twenty-eslint-rules/eslint.config.react.mjs';
|
||||||
|
|
||||||
const __filename = fileURLToPath(import.meta.url);
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
const __dirname = path.dirname(__filename);
|
const __dirname = path.dirname(__filename);
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ COPY ./yarn.lock .
|
||||||
COPY ./.yarnrc.yml .
|
COPY ./.yarnrc.yml .
|
||||||
COPY ./.yarn/releases /app/.yarn/releases
|
COPY ./.yarn/releases /app/.yarn/releases
|
||||||
COPY ./.yarn/patches /app/.yarn/patches
|
COPY ./.yarn/patches /app/.yarn/patches
|
||||||
COPY ./tools/eslint-rules /app/tools/eslint-rules
|
COPY ./packages/twenty-eslint-rules /app/packages/twenty-eslint-rules
|
||||||
COPY ./packages/twenty-ui/package.json /app/packages/twenty-ui/
|
COPY ./packages/twenty-ui/package.json /app/packages/twenty-ui/
|
||||||
COPY ./packages/twenty-shared/package.json /app/packages/twenty-shared/
|
COPY ./packages/twenty-shared/package.json /app/packages/twenty-shared/
|
||||||
COPY ./packages/twenty-website/package.json /app/packages/twenty-website/package.json
|
COPY ./packages/twenty-website/package.json /app/packages/twenty-website/package.json
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import typescriptParser from '@typescript-eslint/parser';
|
import typescriptParser from '@typescript-eslint/parser';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import { fileURLToPath } from 'url';
|
import { fileURLToPath } from 'url';
|
||||||
import reactConfig from '../../tools/eslint-rules/eslint.config.react.mjs';
|
import reactConfig from '../twenty-eslint-rules/eslint.config.react.mjs';
|
||||||
|
|
||||||
const __filename = fileURLToPath(import.meta.url);
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
const __dirname = path.dirname(__filename);
|
const __dirname = path.dirname(__filename);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
/* eslint-disable @nx/workspace-no-hardcoded-colors */
|
/* eslint-disable twenty/no-hardcoded-colors */
|
||||||
|
|
||||||
const grayScale = {
|
const grayScale = {
|
||||||
gray100: '#000000',
|
gray100: '#000000',
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,8 @@ import unicornPlugin from 'eslint-plugin-unicorn';
|
||||||
import unusedImportsPlugin from 'eslint-plugin-unused-imports';
|
import unusedImportsPlugin from 'eslint-plugin-unused-imports';
|
||||||
import jsoncParser from 'jsonc-eslint-parser';
|
import jsoncParser from 'jsonc-eslint-parser';
|
||||||
|
|
||||||
|
const twentyRules = await nxPlugin.loadWorkspaceRules('packages/twenty-eslint-rules');
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
// Base JavaScript configuration
|
// Base JavaScript configuration
|
||||||
js.configs.recommended,
|
js.configs.recommended,
|
||||||
|
|
@ -34,6 +36,7 @@ export default [
|
||||||
'import': importPlugin,
|
'import': importPlugin,
|
||||||
'unused-imports': unusedImportsPlugin,
|
'unused-imports': unusedImportsPlugin,
|
||||||
'unicorn': unicornPlugin,
|
'unicorn': unicornPlugin,
|
||||||
|
'twenty': { rules: twentyRules },
|
||||||
},
|
},
|
||||||
settings: {
|
settings: {
|
||||||
react: {
|
react: {
|
||||||
|
|
@ -567,17 +570,17 @@ export default [
|
||||||
'@typescript-eslint/no-unused-vars': 'off',
|
'@typescript-eslint/no-unused-vars': 'off',
|
||||||
|
|
||||||
// Custom workspace rules
|
// Custom workspace rules
|
||||||
'@nx/workspace-effect-components': 'error',
|
'twenty/effect-components': 'error',
|
||||||
'@nx/workspace-no-hardcoded-colors': 'error',
|
'twenty/no-hardcoded-colors': 'error',
|
||||||
'@nx/workspace-matching-state-variable': 'error',
|
'twenty/matching-state-variable': 'error',
|
||||||
'@nx/workspace-sort-css-properties-alphabetically': 'error',
|
'twenty/sort-css-properties-alphabetically': 'error',
|
||||||
'@nx/workspace-styled-components-prefixed-with-styled': 'error',
|
'twenty/styled-components-prefixed-with-styled': 'error',
|
||||||
'@nx/workspace-no-state-useref': 'error',
|
'twenty/no-state-useref': 'error',
|
||||||
'@nx/workspace-component-props-naming': 'error',
|
'twenty/component-props-naming': 'error',
|
||||||
'@nx/workspace-explicit-boolean-predicates-in-if': 'error',
|
'twenty/explicit-boolean-predicates-in-if': 'error',
|
||||||
'@nx/workspace-use-getLoadable-and-getValue-to-get-atoms': 'error',
|
'twenty/use-getLoadable-and-getValue-to-get-atoms': 'error',
|
||||||
'@nx/workspace-useRecoilCallback-has-dependency-array': 'error',
|
'twenty/useRecoilCallback-has-dependency-array': 'error',
|
||||||
'@nx/workspace-no-navigate-prefer-link': 'error',
|
'twenty/no-navigate-prefer-link': 'error',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -721,7 +724,7 @@ export default [
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
'@nx/workspace-max-consts-per-file': ['error', { max: 1 }],
|
'twenty/max-consts-per-file': ['error', { max: 1 }],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -778,7 +781,7 @@ export default [
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
'@nx/workspace-max-consts-per-file': ['error', { max: 1 }],
|
'twenty/max-consts-per-file': ['error', { max: 1 }],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
displayName: 'eslint-rules',
|
displayName: 'twenty-eslint-rules',
|
||||||
silent: false,
|
silent: false,
|
||||||
preset: '../../jest.preset.js',
|
preset: '../../jest.preset.js',
|
||||||
transform: {
|
transform: {
|
||||||
'^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
|
'^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
|
||||||
},
|
},
|
||||||
moduleFileExtensions: ['ts', 'js', 'html'],
|
moduleFileExtensions: ['ts', 'js', 'html'],
|
||||||
coverageDirectory: '../../coverage/tools/eslint-rules',
|
coverageDirectory: '../../coverage/packages/twenty-eslint-rules',
|
||||||
};
|
};
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "eslint-rules",
|
"name": "twenty-eslint-rules",
|
||||||
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
||||||
"sourceRoot": "tools/eslint-rules",
|
"sourceRoot": "packages/twenty-eslint-rules",
|
||||||
"tags": ["scope:shared"],
|
"tags": ["scope:shared"],
|
||||||
"targets": {
|
"targets": {
|
||||||
"lint": {
|
"lint": {
|
||||||
|
|
@ -1,7 +1,10 @@
|
||||||
import { ThemeProvider } from '@emotion/react';
|
import { ThemeProvider } from '@emotion/react';
|
||||||
|
import { i18n } from '@lingui/core';
|
||||||
|
import { I18nProvider } from '@lingui/react';
|
||||||
import { type Preview } from '@storybook/react-vite';
|
import { type Preview } from '@storybook/react-vite';
|
||||||
import { initialize, mswLoader } from 'msw-storybook-addon';
|
import { initialize, mswLoader } from 'msw-storybook-addon';
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
|
import { SOURCE_LOCALE } from 'twenty-shared/translations';
|
||||||
//import { useDarkMode } from 'storybook-dark-mode';
|
//import { useDarkMode } from 'storybook-dark-mode';
|
||||||
|
|
||||||
// eslint-disable-next-line no-restricted-imports
|
// eslint-disable-next-line no-restricted-imports
|
||||||
|
|
@ -10,6 +13,12 @@ import { RootDecorator } from '../src/testing/decorators/RootDecorator';
|
||||||
import 'react-loading-skeleton/dist/skeleton.css';
|
import 'react-loading-skeleton/dist/skeleton.css';
|
||||||
import 'twenty-ui/style.css';
|
import 'twenty-ui/style.css';
|
||||||
import { THEME_LIGHT, ThemeContextProvider } from 'twenty-ui/theme';
|
import { THEME_LIGHT, ThemeContextProvider } from 'twenty-ui/theme';
|
||||||
|
// eslint-disable-next-line no-restricted-imports
|
||||||
|
import { messages as enMessages } from '../src/locales/generated/en';
|
||||||
|
|
||||||
|
// Initialize i18n globally for all stories
|
||||||
|
i18n.load({ [SOURCE_LOCALE]: enMessages });
|
||||||
|
i18n.activate(SOURCE_LOCALE);
|
||||||
import { mockedUserJWT } from '~/testing/mock-data/jwt';
|
import { mockedUserJWT } from '~/testing/mock-data/jwt';
|
||||||
// eslint-disable-next-line no-restricted-imports
|
// eslint-disable-next-line no-restricted-imports
|
||||||
import { ClickOutsideListenerContext } from '../src/modules/ui/utilities/pointer-event/contexts/ClickOutsideListenerContext';
|
import { ClickOutsideListenerContext } from '../src/modules/ui/utilities/pointer-event/contexts/ClickOutsideListenerContext';
|
||||||
|
|
@ -59,15 +68,17 @@ const preview: Preview = {
|
||||||
}, [theme]);
|
}, [theme]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ThemeProvider theme={theme}>
|
<I18nProvider i18n={i18n}>
|
||||||
<ThemeContextProvider theme={theme}>
|
<ThemeProvider theme={theme}>
|
||||||
<ClickOutsideListenerContext.Provider
|
<ThemeContextProvider theme={theme}>
|
||||||
value={{ excludedClickOutsideId: undefined }}
|
<ClickOutsideListenerContext.Provider
|
||||||
>
|
value={{ excludedClickOutsideId: undefined }}
|
||||||
<Story />
|
>
|
||||||
</ClickOutsideListenerContext.Provider>
|
<Story />
|
||||||
</ThemeContextProvider>
|
</ClickOutsideListenerContext.Provider>
|
||||||
</ThemeProvider>
|
</ThemeContextProvider>
|
||||||
|
</ThemeProvider>
|
||||||
|
</I18nProvider>
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
RootDecorator,
|
RootDecorator,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import typescriptParser from '@typescript-eslint/parser';
|
import typescriptParser from '@typescript-eslint/parser';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import { fileURLToPath } from 'url';
|
import { fileURLToPath } from 'url';
|
||||||
import reactConfig from '../../tools/eslint-rules/eslint.config.react.mjs';
|
import reactConfig from '../twenty-eslint-rules/eslint.config.react.mjs';
|
||||||
|
|
||||||
const __filename = fileURLToPath(import.meta.url);
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
const __dirname = path.dirname(__filename);
|
const __dirname = path.dirname(__filename);
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ const jestConfig = {
|
||||||
preset: '../../jest.preset.js',
|
preset: '../../jest.preset.js',
|
||||||
setupFilesAfterEnv: ['./setupTests.ts'],
|
setupFilesAfterEnv: ['./setupTests.ts'],
|
||||||
testEnvironment: 'jsdom',
|
testEnvironment: 'jsdom',
|
||||||
|
testEnvironmentOptions: {},
|
||||||
|
|
||||||
transformIgnorePatterns: [
|
transformIgnorePatterns: [
|
||||||
'/node_modules/(?!(twenty-ui)/.*)',
|
'/node_modules/(?!(twenty-ui)/.*)',
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,14 @@
|
||||||
// learn more: https://github.com/testing-library/jest-dom
|
// learn more: https://github.com/testing-library/jest-dom
|
||||||
import '@testing-library/jest-dom';
|
import '@testing-library/jest-dom';
|
||||||
|
|
||||||
|
import { i18n } from '@lingui/core';
|
||||||
|
import { SOURCE_LOCALE } from 'twenty-shared/translations';
|
||||||
|
import { messages as enMessages } from '~/locales/generated/en';
|
||||||
|
|
||||||
|
// Initialize i18n for all tests
|
||||||
|
i18n.load({ [SOURCE_LOCALE]: enMessages });
|
||||||
|
i18n.activate(SOURCE_LOCALE);
|
||||||
|
|
||||||
// Add Jest matchers for toThrowError and other missing methods
|
// Add Jest matchers for toThrowError and other missing methods
|
||||||
declare global {
|
declare global {
|
||||||
namespace jest {
|
namespace jest {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { useRef } from 'react';
|
import { useRef } from 'react';
|
||||||
|
|
||||||
export const useFirstMountState = (): boolean => {
|
export const useFirstMountState = (): boolean => {
|
||||||
// eslint-disable-next-line @nx/workspace-no-state-useref
|
// eslint-disable-next-line twenty/no-state-useref
|
||||||
const isFirst = useRef(true);
|
const isFirst = useRef(true);
|
||||||
|
|
||||||
if (isFirst.current) {
|
if (isFirst.current) {
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@ import {
|
||||||
getCanvasElementForDropdownTesting,
|
getCanvasElementForDropdownTesting,
|
||||||
} from 'twenty-ui/testing';
|
} from 'twenty-ui/testing';
|
||||||
import { ContextStoreDecorator } from '~/testing/decorators/ContextStoreDecorator';
|
import { ContextStoreDecorator } from '~/testing/decorators/ContextStoreDecorator';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
const deleteMock = test.fn();
|
const deleteMock = test.fn();
|
||||||
const addToFavoritesMock = test.fn();
|
const addToFavoritesMock = test.fn();
|
||||||
const exportMock = test.fn();
|
const exportMock = test.fn();
|
||||||
|
|
@ -24,7 +23,6 @@ const meta: Meta<typeof CommandMenuActionMenuDropdown> = {
|
||||||
title: 'Modules/ActionMenu/CommandMenuActionMenuDropdown',
|
title: 'Modules/ActionMenu/CommandMenuActionMenuDropdown',
|
||||||
component: CommandMenuActionMenuDropdown,
|
component: CommandMenuActionMenuDropdown,
|
||||||
decorators: [
|
decorators: [
|
||||||
I18nFrontDecorator,
|
|
||||||
(Story) => (
|
(Story) => (
|
||||||
<RecoilRoot
|
<RecoilRoot
|
||||||
initializeState={({ set }) => {
|
initializeState={({ set }) => {
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@ import {
|
||||||
getCanvasElementForDropdownTesting,
|
getCanvasElementForDropdownTesting,
|
||||||
} from 'twenty-ui/testing';
|
} from 'twenty-ui/testing';
|
||||||
import { ContextStoreDecorator } from '~/testing/decorators/ContextStoreDecorator';
|
import { ContextStoreDecorator } from '~/testing/decorators/ContextStoreDecorator';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
|
|
||||||
const deleteMock = test.fn();
|
const deleteMock = test.fn();
|
||||||
const addToFavoritesMock = test.fn();
|
const addToFavoritesMock = test.fn();
|
||||||
|
|
@ -25,7 +24,6 @@ const meta: Meta<typeof RecordIndexActionMenuDropdown> = {
|
||||||
title: 'Modules/ActionMenu/RecordIndexActionMenuDropdown',
|
title: 'Modules/ActionMenu/RecordIndexActionMenuDropdown',
|
||||||
component: RecordIndexActionMenuDropdown,
|
component: RecordIndexActionMenuDropdown,
|
||||||
decorators: [
|
decorators: [
|
||||||
I18nFrontDecorator,
|
|
||||||
(Story) => (
|
(Story) => (
|
||||||
<RecoilRoot
|
<RecoilRoot
|
||||||
initializeState={({ set }) => {
|
initializeState={({ set }) => {
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi
|
||||||
import { LayoutRenderingProvider } from '@/ui/layout/contexts/LayoutRenderingContext';
|
import { LayoutRenderingProvider } from '@/ui/layout/contexts/LayoutRenderingContext';
|
||||||
import { ComponentDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator } from 'twenty-ui/testing';
|
||||||
import { PageLayoutType } from '~/generated/graphql';
|
import { PageLayoutType } from '~/generated/graphql';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
import { graphqlMocks } from '~/testing/graphqlMocks';
|
import { graphqlMocks } from '~/testing/graphqlMocks';
|
||||||
|
|
@ -18,7 +17,6 @@ const meta: Meta<typeof CalendarEventsCard> = {
|
||||||
title: 'Modules/Activities/Calendar/CalendarEventsCard',
|
title: 'Modules/Activities/Calendar/CalendarEventsCard',
|
||||||
component: CalendarEventsCard,
|
component: CalendarEventsCard,
|
||||||
decorators: [
|
decorators: [
|
||||||
I18nFrontDecorator,
|
|
||||||
ComponentDecorator,
|
ComponentDecorator,
|
||||||
ObjectMetadataItemsDecorator,
|
ObjectMetadataItemsDecorator,
|
||||||
SnackBarDecorator,
|
SnackBarDecorator,
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import { type ActivityTargetableObject } from '@/activities/types/ActivityTarget
|
||||||
import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext';
|
import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext';
|
||||||
import { TabListComponentInstanceContext } from '@/ui/layout/tab-list/states/contexts/TabListComponentInstanceContext';
|
import { TabListComponentInstanceContext } from '@/ui/layout/tab-list/states/contexts/TabListComponentInstanceContext';
|
||||||
import { ComponentWithRouterDecorator } from '~/testing/decorators/ComponentWithRouterDecorator';
|
import { ComponentWithRouterDecorator } from '~/testing/decorators/ComponentWithRouterDecorator';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
import { graphqlMocks } from '~/testing/graphqlMocks';
|
import { graphqlMocks } from '~/testing/graphqlMocks';
|
||||||
|
|
@ -29,7 +28,6 @@ const meta: Meta<typeof TaskGroups> = {
|
||||||
ComponentWithRouterDecorator,
|
ComponentWithRouterDecorator,
|
||||||
ObjectMetadataItemsDecorator,
|
ObjectMetadataItemsDecorator,
|
||||||
SnackBarDecorator,
|
SnackBarDecorator,
|
||||||
I18nFrontDecorator,
|
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { TaskList } from '@/activities/tasks/components/TaskList';
|
import { TaskList } from '@/activities/tasks/components/TaskList';
|
||||||
import { ComponentDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator } from 'twenty-ui/testing';
|
||||||
import { ContextStoreDecorator } from '~/testing/decorators/ContextStoreDecorator';
|
import { ContextStoreDecorator } from '~/testing/decorators/ContextStoreDecorator';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { MemoryRouterDecorator } from '~/testing/decorators/MemoryRouterDecorator';
|
import { MemoryRouterDecorator } from '~/testing/decorators/MemoryRouterDecorator';
|
||||||
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
||||||
import { RightDrawerDecorator } from '~/testing/decorators/RightDrawerDecorator';
|
import { RightDrawerDecorator } from '~/testing/decorators/RightDrawerDecorator';
|
||||||
|
|
@ -17,7 +16,6 @@ const meta: Meta<typeof TaskList> = {
|
||||||
decorators: [
|
decorators: [
|
||||||
ComponentDecorator,
|
ComponentDecorator,
|
||||||
ContextStoreDecorator,
|
ContextStoreDecorator,
|
||||||
I18nFrontDecorator,
|
|
||||||
MemoryRouterDecorator,
|
MemoryRouterDecorator,
|
||||||
ObjectMetadataItemsDecorator,
|
ObjectMetadataItemsDecorator,
|
||||||
SnackBarDecorator,
|
SnackBarDecorator,
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ import { HttpResponse, graphql } from 'msw';
|
||||||
|
|
||||||
import { EventCardCalendarEvent } from '@/activities/timeline-activities/rows/calendar/components/EventCardCalendarEvent';
|
import { EventCardCalendarEvent } from '@/activities/timeline-activities/rows/calendar/components/EventCardCalendarEvent';
|
||||||
import { ComponentDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator } from 'twenty-ui/testing';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
|
|
||||||
|
|
@ -11,7 +10,6 @@ const meta: Meta<typeof EventCardCalendarEvent> = {
|
||||||
title: 'Modules/TimelineActivities/Rows/CalendarEvent/EventCardCalendarEvent',
|
title: 'Modules/TimelineActivities/Rows/CalendarEvent/EventCardCalendarEvent',
|
||||||
component: EventCardCalendarEvent,
|
component: EventCardCalendarEvent,
|
||||||
decorators: [
|
decorators: [
|
||||||
I18nFrontDecorator,
|
|
||||||
ComponentDecorator,
|
ComponentDecorator,
|
||||||
ObjectMetadataItemsDecorator,
|
ObjectMetadataItemsDecorator,
|
||||||
SnackBarDecorator,
|
SnackBarDecorator,
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ import { type TimelineActivity } from '@/activities/timeline-activities/types/Ti
|
||||||
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
|
|
||||||
import { ComponentDecorator, RouterDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator, RouterDecorator } from 'twenty-ui/testing';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
import { generatedMockObjectMetadataItems } from '~/testing/utils/generatedMockObjectMetadataItems';
|
import { generatedMockObjectMetadataItems } from '~/testing/utils/generatedMockObjectMetadataItems';
|
||||||
|
|
@ -45,7 +44,6 @@ const meta: Meta<typeof EventRowMainObjectUpdated> = {
|
||||||
ObjectMetadataItemsDecorator,
|
ObjectMetadataItemsDecorator,
|
||||||
SnackBarDecorator,
|
SnackBarDecorator,
|
||||||
RouterDecorator,
|
RouterDecorator,
|
||||||
I18nFrontDecorator,
|
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import { TimelineActivityContext } from '@/activities/timeline-activities/contex
|
||||||
import { EventCardMessage } from '@/activities/timeline-activities/rows/message/components/EventCardMessage';
|
import { EventCardMessage } from '@/activities/timeline-activities/rows/message/components/EventCardMessage';
|
||||||
import { FIELD_RESTRICTED_ADDITIONAL_PERMISSIONS_REQUIRED } from 'twenty-shared/constants';
|
import { FIELD_RESTRICTED_ADDITIONAL_PERMISSIONS_REQUIRED } from 'twenty-shared/constants';
|
||||||
import { ComponentDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator } from 'twenty-ui/testing';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
|
|
||||||
|
|
@ -14,7 +13,6 @@ const meta: Meta<typeof EventCardMessage> = {
|
||||||
title: 'Modules/TimelineActivities/Rows/Message/EventCardMessage',
|
title: 'Modules/TimelineActivities/Rows/Message/EventCardMessage',
|
||||||
component: EventCardMessage,
|
component: EventCardMessage,
|
||||||
decorators: [
|
decorators: [
|
||||||
I18nFrontDecorator,
|
|
||||||
ComponentDecorator,
|
ComponentDecorator,
|
||||||
ObjectMetadataItemsDecorator,
|
ObjectMetadataItemsDecorator,
|
||||||
SnackBarDecorator,
|
SnackBarDecorator,
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { expect, fn, userEvent, waitFor } from 'storybook/test';
|
import { expect, fn, userEvent, waitFor } from 'storybook/test';
|
||||||
import { isDefined } from 'twenty-shared/utils';
|
import { isDefined } from 'twenty-shared/utils';
|
||||||
import { ComponentDecorator, RouterDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator, RouterDecorator } from 'twenty-ui/testing';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
import { WorkflowStepActionDrawerDecorator } from '~/testing/decorators/WorkflowStepActionDrawerDecorator';
|
import { WorkflowStepActionDrawerDecorator } from '~/testing/decorators/WorkflowStepActionDrawerDecorator';
|
||||||
|
|
@ -75,7 +74,6 @@ const meta: Meta<typeof EditorWrapper> = {
|
||||||
SnackBarDecorator,
|
SnackBarDecorator,
|
||||||
RouterDecorator,
|
RouterDecorator,
|
||||||
WorkspaceDecorator,
|
WorkspaceDecorator,
|
||||||
I18nFrontDecorator,
|
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import { type ExtendedUIMessage } from 'twenty-shared/ai';
|
||||||
import { ComponentDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator } from 'twenty-ui/testing';
|
||||||
|
|
||||||
import { AIChatMessage } from '@/ai/components/AIChatMessage';
|
import { AIChatMessage } from '@/ai/components/AIChatMessage';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { RootDecorator } from '~/testing/decorators/RootDecorator';
|
import { RootDecorator } from '~/testing/decorators/RootDecorator';
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
|
|
||||||
|
|
@ -176,12 +175,7 @@ print(df.head())`,
|
||||||
const meta: Meta<typeof AIChatMessage> = {
|
const meta: Meta<typeof AIChatMessage> = {
|
||||||
title: 'Modules/AI/AIChatMessage',
|
title: 'Modules/AI/AIChatMessage',
|
||||||
component: AIChatMessage,
|
component: AIChatMessage,
|
||||||
decorators: [
|
decorators: [ComponentDecorator, RootDecorator, SnackBarDecorator],
|
||||||
ComponentDecorator,
|
|
||||||
RootDecorator,
|
|
||||||
I18nFrontDecorator,
|
|
||||||
SnackBarDecorator,
|
|
||||||
],
|
|
||||||
parameters: {
|
parameters: {
|
||||||
container: { width: 700 },
|
container: { width: 700 },
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ import { expect, userEvent, within } from 'storybook/test';
|
||||||
import { ComponentDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator } from 'twenty-ui/testing';
|
||||||
|
|
||||||
import { CodeExecutionDisplay } from '@/ai/components/CodeExecutionDisplay';
|
import { CodeExecutionDisplay } from '@/ai/components/CodeExecutionDisplay';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
|
|
||||||
const samplePythonCode = `import pandas as pd
|
const samplePythonCode = `import pandas as pd
|
||||||
|
|
@ -31,7 +30,7 @@ plt.savefig('revenue_chart.png')`;
|
||||||
const meta: Meta<typeof CodeExecutionDisplay> = {
|
const meta: Meta<typeof CodeExecutionDisplay> = {
|
||||||
title: 'Modules/AI/CodeExecutionDisplay',
|
title: 'Modules/AI/CodeExecutionDisplay',
|
||||||
component: CodeExecutionDisplay,
|
component: CodeExecutionDisplay,
|
||||||
decorators: [I18nFrontDecorator, SnackBarDecorator, ComponentDecorator],
|
decorators: [SnackBarDecorator, ComponentDecorator],
|
||||||
parameters: {
|
parameters: {
|
||||||
container: { width: 600 },
|
container: { width: 600 },
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,12 @@ import { expect, userEvent, within } from 'storybook/test';
|
||||||
import { ComponentDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator } from 'twenty-ui/testing';
|
||||||
|
|
||||||
import { TerminalOutput } from '@/ai/components/TerminalOutput';
|
import { TerminalOutput } from '@/ai/components/TerminalOutput';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
|
|
||||||
const meta: Meta<typeof TerminalOutput> = {
|
const meta: Meta<typeof TerminalOutput> = {
|
||||||
title: 'Modules/AI/TerminalOutput',
|
title: 'Modules/AI/TerminalOutput',
|
||||||
component: TerminalOutput,
|
component: TerminalOutput,
|
||||||
decorators: [I18nFrontDecorator, SnackBarDecorator, ComponentDecorator],
|
decorators: [SnackBarDecorator, ComponentDecorator],
|
||||||
parameters: {
|
parameters: {
|
||||||
container: { width: 500 },
|
container: { width: 500 },
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import { isDefined } from 'twenty-shared/utils';
|
||||||
import { ApolloFactory, type Options } from '@/apollo/services/apollo.factory';
|
import { ApolloFactory, type Options } from '@/apollo/services/apollo.factory';
|
||||||
|
|
||||||
export const useApolloFactory = (options: Partial<Options<any>> = {}) => {
|
export const useApolloFactory = (options: Partial<Options<any>> = {}) => {
|
||||||
// eslint-disable-next-line @nx/workspace-no-state-useref
|
// eslint-disable-next-line twenty/no-state-useref
|
||||||
const apolloRef = useRef<ApolloFactory<NormalizedCacheObject> | null>(null);
|
const apolloRef = useRef<ApolloFactory<NormalizedCacheObject> | null>(null);
|
||||||
|
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
import { OperationType } from '@/apollo/types/operation-type';
|
import { OperationType } from '@/apollo/types/operation-type';
|
||||||
|
|
||||||
const operationTypeColors = {
|
const operationTypeColors = {
|
||||||
// eslint-disable-next-line @nx/workspace-no-hardcoded-colors
|
// eslint-disable-next-line twenty/no-hardcoded-colors
|
||||||
query: '#03A9F4',
|
query: '#03A9F4',
|
||||||
// eslint-disable-next-line @nx/workspace-no-hardcoded-colors
|
// eslint-disable-next-line twenty/no-hardcoded-colors
|
||||||
mutation: '#61A600',
|
mutation: '#61A600',
|
||||||
// eslint-disable-next-line @nx/workspace-no-hardcoded-colors
|
// eslint-disable-next-line twenty/no-hardcoded-colors
|
||||||
subscription: '#61A600',
|
subscription: '#61A600',
|
||||||
// eslint-disable-next-line @nx/workspace-no-hardcoded-colors
|
// eslint-disable-next-line twenty/no-hardcoded-colors
|
||||||
error: '#F51818',
|
error: '#F51818',
|
||||||
// eslint-disable-next-line @nx/workspace-no-hardcoded-colors
|
// eslint-disable-next-line twenty/no-hardcoded-colors
|
||||||
default: '#61A600',
|
default: '#61A600',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ export const loggerLink = (getSchemaName: (operation: Operation) => string) =>
|
||||||
errors.forEach((err: any) => {
|
errors.forEach((err: any) => {
|
||||||
logDebug(
|
logDebug(
|
||||||
`%c${err.message}`,
|
`%c${err.message}`,
|
||||||
// eslint-disable-next-line @nx/workspace-no-hardcoded-colors
|
// eslint-disable-next-line twenty/no-hardcoded-colors
|
||||||
'color: #F51818; font-weight: lighter',
|
'color: #F51818; font-weight: lighter',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -31,13 +31,13 @@ export const variables = {
|
||||||
email,
|
email,
|
||||||
password,
|
password,
|
||||||
workspacePersonalInviteToken: null,
|
workspacePersonalInviteToken: null,
|
||||||
locale: '',
|
locale: 'en',
|
||||||
},
|
},
|
||||||
signUpInWorkspace: {
|
signUpInWorkspace: {
|
||||||
email,
|
email,
|
||||||
password,
|
password,
|
||||||
workspacePersonalInviteToken: null,
|
workspacePersonalInviteToken: null,
|
||||||
locale: '',
|
locale: 'en',
|
||||||
},
|
},
|
||||||
getCurrentUser: {},
|
getCurrentUser: {},
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,6 @@ import { RecordComponentInstanceContextsWrapper } from '@/object-record/componen
|
||||||
import { ViewComponentInstanceContext } from '@/views/states/contexts/ViewComponentInstanceContext';
|
import { ViewComponentInstanceContext } from '@/views/states/contexts/ViewComponentInstanceContext';
|
||||||
import { HttpResponse, graphql } from 'msw';
|
import { HttpResponse, graphql } from 'msw';
|
||||||
import { IconDotsVertical } from 'twenty-ui/display';
|
import { IconDotsVertical } from 'twenty-ui/display';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { JestContextStoreSetter } from '~/testing/jest/JestContextStoreSetter';
|
import { JestContextStoreSetter } from '~/testing/jest/JestContextStoreSetter';
|
||||||
|
|
||||||
const openTimeout = 50;
|
const openTimeout = 50;
|
||||||
|
|
@ -72,7 +71,6 @@ const meta: Meta<typeof CommandMenu> = {
|
||||||
title: 'Modules/CommandMenu/CommandMenu',
|
title: 'Modules/CommandMenu/CommandMenu',
|
||||||
component: CommandMenuRouter,
|
component: CommandMenuRouter,
|
||||||
decorators: [
|
decorators: [
|
||||||
I18nFrontDecorator,
|
|
||||||
(Story) => {
|
(Story) => {
|
||||||
const setCurrentWorkspace = useSetRecoilState(currentWorkspaceState);
|
const setCurrentWorkspace = useSetRecoilState(currentWorkspaceState);
|
||||||
const setCurrentUserWorkspace = useSetRecoilState(
|
const setCurrentUserWorkspace = useSetRecoilState(
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,11 @@ import { KeyboardShortcutMenu } from '@/keyboard-shortcut-menu/components/Keyboa
|
||||||
import { useKeyboardShortcutMenu } from '@/keyboard-shortcut-menu/hooks/useKeyboardShortcutMenu';
|
import { useKeyboardShortcutMenu } from '@/keyboard-shortcut-menu/hooks/useKeyboardShortcutMenu';
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
import { ComponentWithRouterDecorator } from '~/testing/decorators/ComponentWithRouterDecorator';
|
import { ComponentWithRouterDecorator } from '~/testing/decorators/ComponentWithRouterDecorator';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
|
|
||||||
const meta: Meta<typeof KeyboardShortcutMenu> = {
|
const meta: Meta<typeof KeyboardShortcutMenu> = {
|
||||||
title: 'Modules/KeyboardShortcutMenu/KeyboardShortcutMenu',
|
title: 'Modules/KeyboardShortcutMenu/KeyboardShortcutMenu',
|
||||||
component: KeyboardShortcutMenu,
|
component: KeyboardShortcutMenu,
|
||||||
decorators: [
|
decorators: [
|
||||||
I18nFrontDecorator,
|
|
||||||
(Story) => {
|
(Story) => {
|
||||||
const { openKeyboardShortcutMenu } = useKeyboardShortcutMenu();
|
const { openKeyboardShortcutMenu } = useKeyboardShortcutMenu();
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@ import {
|
||||||
} from '@/navigation/components/AppNavigationDrawer';
|
} from '@/navigation/components/AppNavigationDrawer';
|
||||||
import { isNavigationDrawerExpandedState } from '@/ui/navigation/states/isNavigationDrawerExpanded';
|
import { isNavigationDrawerExpandedState } from '@/ui/navigation/states/isNavigationDrawerExpanded';
|
||||||
import { AppPath } from 'twenty-shared/types';
|
import { AppPath } from 'twenty-shared/types';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
|
|
||||||
const MobileNavigationDrawerStateSetterEffect = ({
|
const MobileNavigationDrawerStateSetterEffect = ({
|
||||||
mobileNavigationDrawer = 'main',
|
mobileNavigationDrawer = 'main',
|
||||||
|
|
@ -55,7 +54,6 @@ const meta: Meta<StoryArgs> = {
|
||||||
decorators: [
|
decorators: [
|
||||||
IconsProviderDecorator,
|
IconsProviderDecorator,
|
||||||
ObjectMetadataItemsDecorator,
|
ObjectMetadataItemsDecorator,
|
||||||
I18nFrontDecorator,
|
|
||||||
(Story, { args }) => (
|
(Story, { args }) => (
|
||||||
<MemoryRouter initialEntries={[args.routePath]}>
|
<MemoryRouter initialEntries={[args.routePath]}>
|
||||||
<Story />
|
<Story />
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ import { MemoryRouter } from 'react-router-dom';
|
||||||
import { useSetRecoilState } from 'recoil';
|
import { useSetRecoilState } from 'recoil';
|
||||||
import { ComponentDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator } from 'twenty-ui/testing';
|
||||||
import { ContextStoreDecorator } from '~/testing/decorators/ContextStoreDecorator';
|
import { ContextStoreDecorator } from '~/testing/decorators/ContextStoreDecorator';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { IconsProviderDecorator } from '~/testing/decorators/IconsProviderDecorator';
|
import { IconsProviderDecorator } from '~/testing/decorators/IconsProviderDecorator';
|
||||||
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
|
|
@ -31,7 +30,6 @@ const meta: Meta<typeof ObjectOptionsDropdownContent> = {
|
||||||
'Modules/ObjectRecord/ObjectOptionsDropdown/ObjectOptionsDropdownContent',
|
'Modules/ObjectRecord/ObjectOptionsDropdown/ObjectOptionsDropdownContent',
|
||||||
component: ObjectOptionsDropdownContent,
|
component: ObjectOptionsDropdownContent,
|
||||||
decorators: [
|
decorators: [
|
||||||
I18nFrontDecorator,
|
|
||||||
(Story) => {
|
(Story) => {
|
||||||
const setObjectMetadataItems = useSetRecoilState(
|
const setObjectMetadataItems = useSetRecoilState(
|
||||||
objectMetadataItemsState,
|
objectMetadataItemsState,
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ import { coreViewsState } from '@/views/states/coreViewState';
|
||||||
import { useSetRecoilState } from 'recoil';
|
import { useSetRecoilState } from 'recoil';
|
||||||
import { ComponentDecorator, RouterDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator, RouterDecorator } from 'twenty-ui/testing';
|
||||||
import { ContextStoreDecorator } from '~/testing/decorators/ContextStoreDecorator';
|
import { ContextStoreDecorator } from '~/testing/decorators/ContextStoreDecorator';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { IconsProviderDecorator } from '~/testing/decorators/IconsProviderDecorator';
|
import { IconsProviderDecorator } from '~/testing/decorators/IconsProviderDecorator';
|
||||||
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
|
|
@ -141,7 +140,6 @@ const meta: Meta<typeof RecordCalendarMonth> = {
|
||||||
SnackBarDecorator,
|
SnackBarDecorator,
|
||||||
ComponentDecorator,
|
ComponentDecorator,
|
||||||
IconsProviderDecorator,
|
IconsProviderDecorator,
|
||||||
I18nFrontDecorator,
|
|
||||||
RouterDecorator,
|
RouterDecorator,
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@ import { RecordDetailRelationSection } from '@/object-record/record-field-list/r
|
||||||
import { LayoutRenderingProvider } from '@/ui/layout/contexts/LayoutRenderingContext';
|
import { LayoutRenderingProvider } from '@/ui/layout/contexts/LayoutRenderingContext';
|
||||||
import { ComponentDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator } from 'twenty-ui/testing';
|
||||||
import { PageLayoutType } from '~/generated/graphql';
|
import { PageLayoutType } from '~/generated/graphql';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { RightDrawerDecorator } from '~/testing/decorators/RightDrawerDecorator';
|
import { RightDrawerDecorator } from '~/testing/decorators/RightDrawerDecorator';
|
||||||
import { allMockPersonRecords } from '~/testing/mock-data/people';
|
import { allMockPersonRecords } from '~/testing/mock-data/people';
|
||||||
import { generatedMockObjectMetadataItems } from '~/testing/utils/generatedMockObjectMetadataItems';
|
import { generatedMockObjectMetadataItems } from '~/testing/utils/generatedMockObjectMetadataItems';
|
||||||
|
|
@ -78,7 +77,6 @@ const meta: Meta<typeof RecordDetailRelationSection> = {
|
||||||
ObjectMetadataItemsDecorator,
|
ObjectMetadataItemsDecorator,
|
||||||
SnackBarDecorator,
|
SnackBarDecorator,
|
||||||
MemoryRouterDecorator,
|
MemoryRouterDecorator,
|
||||||
I18nFrontDecorator,
|
|
||||||
],
|
],
|
||||||
parameters: {
|
parameters: {
|
||||||
msw: graphqlMocks,
|
msw: graphqlMocks,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
import { FormAddressFieldInput } from '@/object-record/record-field/ui/form-types/components/FormAddressFieldInput';
|
import { FormAddressFieldInput } from '@/object-record/record-field/ui/form-types/components/FormAddressFieldInput';
|
||||||
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { expect, fn, userEvent, within } from 'storybook/test';
|
import { expect, fn, userEvent, within } from 'storybook/test';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
|
|
||||||
const meta: Meta<typeof FormAddressFieldInput> = {
|
const meta: Meta<typeof FormAddressFieldInput> = {
|
||||||
|
|
@ -9,7 +8,7 @@ const meta: Meta<typeof FormAddressFieldInput> = {
|
||||||
component: FormAddressFieldInput,
|
component: FormAddressFieldInput,
|
||||||
args: {},
|
args: {},
|
||||||
argTypes: {},
|
argTypes: {},
|
||||||
decorators: [WorkflowStepDecorator, I18nFrontDecorator],
|
decorators: [WorkflowStepDecorator],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { graphql, HttpResponse } from 'msw';
|
import { graphql, HttpResponse } from 'msw';
|
||||||
import { expect, fn, userEvent, within } from 'storybook/test';
|
import { expect, fn, userEvent, within } from 'storybook/test';
|
||||||
import { ComponentDecorator, RouterDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator, RouterDecorator } from 'twenty-ui/testing';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
import { WorkflowStepActionDrawerDecorator } from '~/testing/decorators/WorkflowStepActionDrawerDecorator';
|
import { WorkflowStepActionDrawerDecorator } from '~/testing/decorators/WorkflowStepActionDrawerDecorator';
|
||||||
|
|
@ -101,7 +100,6 @@ const meta: Meta<typeof FormAdvancedTextFieldInput> = {
|
||||||
SnackBarDecorator,
|
SnackBarDecorator,
|
||||||
RouterDecorator,
|
RouterDecorator,
|
||||||
WorkspaceDecorator,
|
WorkspaceDecorator,
|
||||||
I18nFrontDecorator,
|
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { expect, fn, userEvent, waitFor, within } from 'storybook/test';
|
import { expect, fn, userEvent, waitFor, within } from 'storybook/test';
|
||||||
import { isDefined } from 'twenty-shared/utils';
|
import { isDefined } from 'twenty-shared/utils';
|
||||||
import { getCanvasElementForDropdownTesting } from 'twenty-ui/testing';
|
import { getCanvasElementForDropdownTesting } from 'twenty-ui/testing';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||||
|
|
||||||
|
|
@ -12,7 +11,7 @@ const meta: Meta<typeof FormArrayFieldInput> = {
|
||||||
component: FormArrayFieldInput,
|
component: FormArrayFieldInput,
|
||||||
args: {},
|
args: {},
|
||||||
argTypes: {},
|
argTypes: {},
|
||||||
decorators: [WorkflowStepDecorator, I18nFrontDecorator],
|
decorators: [WorkflowStepDecorator],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ import { FormBooleanFieldInput } from '@/object-record/record-field/ui/form-type
|
||||||
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { expect, fn, userEvent, waitFor, within } from 'storybook/test';
|
import { expect, fn, userEvent, waitFor, within } from 'storybook/test';
|
||||||
import { getCanvasElementForDropdownTesting } from 'twenty-ui/testing';
|
import { getCanvasElementForDropdownTesting } from 'twenty-ui/testing';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||||
|
|
||||||
|
|
@ -11,7 +10,7 @@ const meta: Meta<typeof FormBooleanFieldInput> = {
|
||||||
component: FormBooleanFieldInput,
|
component: FormBooleanFieldInput,
|
||||||
args: {},
|
args: {},
|
||||||
argTypes: {},
|
argTypes: {},
|
||||||
decorators: [WorkflowStepDecorator, I18nFrontDecorator],
|
decorators: [WorkflowStepDecorator],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ import { type FieldCurrencyValue } from '@/object-record/record-field/ui/types/F
|
||||||
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { expect, within } from 'storybook/test';
|
import { expect, within } from 'storybook/test';
|
||||||
import { CurrencyCode } from 'twenty-shared/constants';
|
import { CurrencyCode } from 'twenty-shared/constants';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||||
|
|
||||||
|
|
@ -12,7 +11,7 @@ const meta: Meta<typeof FormCurrencyFieldInput> = {
|
||||||
component: FormCurrencyFieldInput,
|
component: FormCurrencyFieldInput,
|
||||||
args: {},
|
args: {},
|
||||||
argTypes: {},
|
argTypes: {},
|
||||||
decorators: [WorkflowStepDecorator, I18nFrontDecorator],
|
decorators: [WorkflowStepDecorator],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
import { FormEmailsFieldInput } from '@/object-record/record-field/ui/form-types/components/FormEmailsFieldInput';
|
import { FormEmailsFieldInput } from '@/object-record/record-field/ui/form-types/components/FormEmailsFieldInput';
|
||||||
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { expect, fn, userEvent, waitFor, within } from 'storybook/test';
|
import { expect, fn, userEvent, waitFor, within } from 'storybook/test';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||||
|
|
||||||
|
|
@ -10,7 +9,7 @@ const meta: Meta<typeof FormEmailsFieldInput> = {
|
||||||
component: FormEmailsFieldInput,
|
component: FormEmailsFieldInput,
|
||||||
args: {},
|
args: {},
|
||||||
argTypes: {},
|
argTypes: {},
|
||||||
decorators: [WorkflowStepDecorator, I18nFrontDecorator],
|
decorators: [WorkflowStepDecorator],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
import { FormFullNameFieldInput } from '@/object-record/record-field/ui/form-types/components/FormFullNameFieldInput';
|
import { FormFullNameFieldInput } from '@/object-record/record-field/ui/form-types/components/FormFullNameFieldInput';
|
||||||
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { expect, fn, userEvent, within } from 'storybook/test';
|
import { expect, fn, userEvent, within } from 'storybook/test';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||||
|
|
||||||
|
|
@ -10,7 +9,7 @@ const meta: Meta<typeof FormFullNameFieldInput> = {
|
||||||
component: FormFullNameFieldInput,
|
component: FormFullNameFieldInput,
|
||||||
args: {},
|
args: {},
|
||||||
argTypes: {},
|
argTypes: {},
|
||||||
decorators: [WorkflowStepDecorator, I18nFrontDecorator],
|
decorators: [WorkflowStepDecorator],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
import { FormLinksFieldInput } from '@/object-record/record-field/ui/form-types/components/FormLinksFieldInput';
|
import { FormLinksFieldInput } from '@/object-record/record-field/ui/form-types/components/FormLinksFieldInput';
|
||||||
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { expect, fn, userEvent, within } from 'storybook/test';
|
import { expect, fn, userEvent, within } from 'storybook/test';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
|
|
||||||
const meta: Meta<typeof FormLinksFieldInput> = {
|
const meta: Meta<typeof FormLinksFieldInput> = {
|
||||||
|
|
@ -9,7 +8,7 @@ const meta: Meta<typeof FormLinksFieldInput> = {
|
||||||
component: FormLinksFieldInput,
|
component: FormLinksFieldInput,
|
||||||
args: {},
|
args: {},
|
||||||
argTypes: {},
|
argTypes: {},
|
||||||
decorators: [WorkflowStepDecorator, I18nFrontDecorator],
|
decorators: [WorkflowStepDecorator],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
import { FormMultiSelectFieldInput } from '@/object-record/record-field/ui/form-types/components/FormMultiSelectFieldInput';
|
import { FormMultiSelectFieldInput } from '@/object-record/record-field/ui/form-types/components/FormMultiSelectFieldInput';
|
||||||
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { expect, fn, userEvent, within } from 'storybook/test';
|
import { expect, fn, userEvent, within } from 'storybook/test';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||||
|
|
||||||
|
|
@ -10,7 +9,7 @@ const meta: Meta<typeof FormMultiSelectFieldInput> = {
|
||||||
component: FormMultiSelectFieldInput,
|
component: FormMultiSelectFieldInput,
|
||||||
args: {},
|
args: {},
|
||||||
argTypes: {},
|
argTypes: {},
|
||||||
decorators: [WorkflowStepDecorator, I18nFrontDecorator],
|
decorators: [WorkflowStepDecorator],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import { expect, fn, userEvent, waitFor, within } from 'storybook/test';
|
||||||
|
|
||||||
import { FormPhoneFieldInput } from '@/object-record/record-field/ui/form-types/components/FormPhoneFieldInput';
|
import { FormPhoneFieldInput } from '@/object-record/record-field/ui/form-types/components/FormPhoneFieldInput';
|
||||||
import { type FieldPhonesValue } from '@/object-record/record-field/ui/types/FieldMetadata';
|
import { type FieldPhonesValue } from '@/object-record/record-field/ui/types/FieldMetadata';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||||
|
|
||||||
|
|
@ -13,7 +12,7 @@ const meta: Meta<typeof FormPhoneFieldInput> = {
|
||||||
component: FormPhoneFieldInput,
|
component: FormPhoneFieldInput,
|
||||||
args: {},
|
args: {},
|
||||||
argTypes: {},
|
argTypes: {},
|
||||||
decorators: [WorkflowStepDecorator, I18nFrontDecorator],
|
decorators: [WorkflowStepDecorator],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ import { FormRawJsonFieldInput } from '@/object-record/record-field/ui/form-type
|
||||||
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { expect, fn, userEvent, waitFor, within } from 'storybook/test';
|
import { expect, fn, userEvent, waitFor, within } from 'storybook/test';
|
||||||
import { getUserDevice } from 'twenty-ui/utilities';
|
import { getUserDevice } from 'twenty-ui/utilities';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||||
|
|
||||||
|
|
@ -11,7 +10,7 @@ const meta: Meta<typeof FormRawJsonFieldInput> = {
|
||||||
component: FormRawJsonFieldInput,
|
component: FormRawJsonFieldInput,
|
||||||
args: {},
|
args: {},
|
||||||
argTypes: {},
|
argTypes: {},
|
||||||
decorators: [WorkflowStepDecorator, I18nFrontDecorator],
|
decorators: [WorkflowStepDecorator],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import {
|
||||||
within,
|
within,
|
||||||
} from 'storybook/test';
|
} from 'storybook/test';
|
||||||
import { getUserDevice } from 'twenty-ui/utilities';
|
import { getUserDevice } from 'twenty-ui/utilities';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||||
|
|
||||||
|
|
@ -18,7 +17,7 @@ const meta: Meta<typeof FormRichTextV2FieldInput> = {
|
||||||
component: FormRichTextV2FieldInput,
|
component: FormRichTextV2FieldInput,
|
||||||
args: {},
|
args: {},
|
||||||
argTypes: {},
|
argTypes: {},
|
||||||
decorators: [WorkflowStepDecorator, I18nFrontDecorator],
|
decorators: [WorkflowStepDecorator],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
import { FormSelectFieldInput } from '@/object-record/record-field/ui/form-types/components/FormSelectFieldInput';
|
import { FormSelectFieldInput } from '@/object-record/record-field/ui/form-types/components/FormSelectFieldInput';
|
||||||
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { expect, fn, userEvent, within } from 'storybook/test';
|
import { expect, fn, userEvent, within } from 'storybook/test';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||||
|
|
||||||
|
|
@ -10,7 +9,7 @@ const meta: Meta<typeof FormSelectFieldInput> = {
|
||||||
component: FormSelectFieldInput,
|
component: FormSelectFieldInput,
|
||||||
args: {},
|
args: {},
|
||||||
argTypes: {},
|
argTypes: {},
|
||||||
decorators: [WorkflowStepDecorator, I18nFrontDecorator],
|
decorators: [WorkflowStepDecorator],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { expect, fn, userEvent, within } from 'storybook/test';
|
import { expect, fn, userEvent, within } from 'storybook/test';
|
||||||
import { isDefined } from 'twenty-shared/utils';
|
import { isDefined } from 'twenty-shared/utils';
|
||||||
import { ComponentDecorator, RouterDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator, RouterDecorator } from 'twenty-ui/testing';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
|
|
@ -20,7 +19,6 @@ const meta: Meta<typeof FormSingleRecordPicker> = {
|
||||||
args: {},
|
args: {},
|
||||||
argTypes: {},
|
argTypes: {},
|
||||||
decorators: [
|
decorators: [
|
||||||
I18nFrontDecorator,
|
|
||||||
ObjectMetadataItemsDecorator,
|
ObjectMetadataItemsDecorator,
|
||||||
ComponentDecorator,
|
ComponentDecorator,
|
||||||
WorkspaceDecorator,
|
WorkspaceDecorator,
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import {
|
||||||
within,
|
within,
|
||||||
} from 'storybook/test';
|
} from 'storybook/test';
|
||||||
import { getUserDevice } from 'twenty-ui/utilities';
|
import { getUserDevice } from 'twenty-ui/utilities';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||||
|
|
||||||
|
|
@ -18,7 +17,7 @@ const meta: Meta<typeof FormTextFieldInput> = {
|
||||||
component: FormTextFieldInput,
|
component: FormTextFieldInput,
|
||||||
args: {},
|
args: {},
|
||||||
argTypes: {},
|
argTypes: {},
|
||||||
decorators: [WorkflowStepDecorator, I18nFrontDecorator],
|
decorators: [WorkflowStepDecorator],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
import { FormUuidFieldInput } from '@/object-record/record-field/ui/form-types/components/FormUuidFieldInput';
|
import { FormUuidFieldInput } from '@/object-record/record-field/ui/form-types/components/FormUuidFieldInput';
|
||||||
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { expect, fn, userEvent, waitFor, within } from 'storybook/test';
|
import { expect, fn, userEvent, waitFor, within } from 'storybook/test';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||||
|
|
||||||
|
|
@ -10,7 +9,7 @@ const meta: Meta<typeof FormUuidFieldInput> = {
|
||||||
component: FormUuidFieldInput,
|
component: FormUuidFieldInput,
|
||||||
args: {},
|
args: {},
|
||||||
argTypes: {},
|
argTypes: {},
|
||||||
decorators: [WorkflowStepDecorator, I18nFrontDecorator],
|
decorators: [WorkflowStepDecorator],
|
||||||
};
|
};
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,13 @@
|
||||||
import { VariableChip } from '@/object-record/record-field/ui/form-types/components/VariableChip';
|
import { VariableChip } from '@/object-record/record-field/ui/form-types/components/VariableChip';
|
||||||
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
import { expect, within } from 'storybook/test';
|
import { expect, within } from 'storybook/test';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator';
|
||||||
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
import { MOCKED_STEP_ID } from '~/testing/mock-data/workflow';
|
||||||
|
|
||||||
const meta: Meta<typeof VariableChip> = {
|
const meta: Meta<typeof VariableChip> = {
|
||||||
title: 'UI/Data/Field/Form/Input/VariableChip',
|
title: 'UI/Data/Field/Form/Input/VariableChip',
|
||||||
component: VariableChip,
|
component: VariableChip,
|
||||||
decorators: [WorkflowStepDecorator, I18nFrontDecorator],
|
decorators: [WorkflowStepDecorator],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
|
|
||||||
import { EmailsFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/EmailsFieldDisplay';
|
import { EmailsFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/EmailsFieldDisplay';
|
||||||
import { ComponentDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator } from 'twenty-ui/testing';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { MemoryRouterDecorator } from '~/testing/decorators/MemoryRouterDecorator';
|
import { MemoryRouterDecorator } from '~/testing/decorators/MemoryRouterDecorator';
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
import { getFieldDecorator } from '~/testing/decorators/getFieldDecorator';
|
import { getFieldDecorator } from '~/testing/decorators/getFieldDecorator';
|
||||||
|
|
@ -11,7 +10,6 @@ import { getProfilingStory } from '~/testing/profiling/utils/getProfilingStory';
|
||||||
const meta: Meta = {
|
const meta: Meta = {
|
||||||
title: 'UI/Data/Field/Display/EmailsFieldDisplay',
|
title: 'UI/Data/Field/Display/EmailsFieldDisplay',
|
||||||
decorators: [
|
decorators: [
|
||||||
I18nFrontDecorator,
|
|
||||||
MemoryRouterDecorator,
|
MemoryRouterDecorator,
|
||||||
getFieldDecorator('person', 'emails', {
|
getFieldDecorator('person', 'emails', {
|
||||||
primaryEmail: 'test@test.com',
|
primaryEmail: 'test@test.com',
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import { FieldFocusContext } from '@/object-record/record-field/ui/contexts/Fiel
|
||||||
import { FieldFocusContextProvider } from '@/object-record/record-field/ui/contexts/FieldFocusContextProvider';
|
import { FieldFocusContextProvider } from '@/object-record/record-field/ui/contexts/FieldFocusContextProvider';
|
||||||
import { LinksFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/LinksFieldDisplay';
|
import { LinksFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/LinksFieldDisplay';
|
||||||
import { ComponentDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator } from 'twenty-ui/testing';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { MemoryRouterDecorator } from '~/testing/decorators/MemoryRouterDecorator';
|
import { MemoryRouterDecorator } from '~/testing/decorators/MemoryRouterDecorator';
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
import { getFieldDecorator } from '~/testing/decorators/getFieldDecorator';
|
import { getFieldDecorator } from '~/testing/decorators/getFieldDecorator';
|
||||||
|
|
@ -24,7 +23,6 @@ const FieldFocusEffect = () => {
|
||||||
const meta: Meta = {
|
const meta: Meta = {
|
||||||
title: 'UI/Data/Field/Display/LinksFieldDisplay',
|
title: 'UI/Data/Field/Display/LinksFieldDisplay',
|
||||||
decorators: [
|
decorators: [
|
||||||
I18nFrontDecorator,
|
|
||||||
MemoryRouterDecorator,
|
MemoryRouterDecorator,
|
||||||
getFieldDecorator('company', 'domainName', {
|
getFieldDecorator('company', 'domainName', {
|
||||||
primaryLinkUrl: 'https://www.google.com',
|
primaryLinkUrl: 'https://www.google.com',
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||||
|
|
||||||
import { PhonesFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/PhonesFieldDisplay';
|
import { PhonesFieldDisplay } from '@/object-record/record-field/ui/meta-types/display/components/PhonesFieldDisplay';
|
||||||
import { ComponentDecorator } from 'twenty-ui/testing';
|
import { ComponentDecorator } from 'twenty-ui/testing';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { MemoryRouterDecorator } from '~/testing/decorators/MemoryRouterDecorator';
|
import { MemoryRouterDecorator } from '~/testing/decorators/MemoryRouterDecorator';
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
import { getFieldDecorator } from '~/testing/decorators/getFieldDecorator';
|
import { getFieldDecorator } from '~/testing/decorators/getFieldDecorator';
|
||||||
|
|
@ -14,7 +13,6 @@ const meta: Meta = {
|
||||||
MemoryRouterDecorator,
|
MemoryRouterDecorator,
|
||||||
getFieldDecorator('person', 'phones'),
|
getFieldDecorator('person', 'phones'),
|
||||||
ComponentDecorator,
|
ComponentDecorator,
|
||||||
I18nFrontDecorator,
|
|
||||||
SnackBarDecorator,
|
SnackBarDecorator,
|
||||||
],
|
],
|
||||||
component: PhonesFieldDisplay,
|
component: PhonesFieldDisplay,
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentTyp
|
||||||
|
|
||||||
import { ArrayFieldInput } from '@/object-record/record-field/ui/meta-types/input/components/ArrayFieldInput';
|
import { ArrayFieldInput } from '@/object-record/record-field/ui/meta-types/input/components/ArrayFieldInput';
|
||||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
|
|
||||||
const { FieldInputEventContextProviderWithJestMocks } =
|
const { FieldInputEventContextProviderWithJestMocks } =
|
||||||
getFieldInputEventContextProviderWithJestMocks();
|
getFieldInputEventContextProviderWithJestMocks();
|
||||||
|
|
@ -102,7 +101,7 @@ const ArrayInputWithContext = ({
|
||||||
const meta: Meta<typeof ArrayInputWithContext> = {
|
const meta: Meta<typeof ArrayInputWithContext> = {
|
||||||
title: 'UI/Input/ArrayFieldInput',
|
title: 'UI/Input/ArrayFieldInput',
|
||||||
component: ArrayInputWithContext,
|
component: ArrayInputWithContext,
|
||||||
decorators: [I18nFrontDecorator],
|
decorators: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@ import { BooleanFieldInput } from '@/object-record/record-field/ui/meta-types/in
|
||||||
import { RecordFieldComponentInstanceContext } from '@/object-record/record-field/ui/states/contexts/RecordFieldComponentInstanceContext';
|
import { RecordFieldComponentInstanceContext } from '@/object-record/record-field/ui/states/contexts/RecordFieldComponentInstanceContext';
|
||||||
import { RECORD_TABLE_CELL_INPUT_ID_PREFIX } from '@/object-record/record-table/constants/RecordTableCellInputIdPrefix';
|
import { RECORD_TABLE_CELL_INPUT_ID_PREFIX } from '@/object-record/record-table/constants/RecordTableCellInputIdPrefix';
|
||||||
import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId';
|
import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
|
|
||||||
const { FieldInputEventContextProviderWithJestMocks, handleSubmitMocked } =
|
const { FieldInputEventContextProviderWithJestMocks, handleSubmitMocked } =
|
||||||
getFieldInputEventContextProviderWithJestMocks();
|
getFieldInputEventContextProviderWithJestMocks();
|
||||||
|
|
@ -85,7 +84,7 @@ const BooleanFieldInputWithContext = ({
|
||||||
const meta: Meta = {
|
const meta: Meta = {
|
||||||
title: 'UI/Data/Field/Input/BooleanFieldInput',
|
title: 'UI/Data/Field/Input/BooleanFieldInput',
|
||||||
component: BooleanFieldInputWithContext,
|
component: BooleanFieldInputWithContext,
|
||||||
decorators: [I18nFrontDecorator],
|
decorators: [],
|
||||||
args: {
|
args: {
|
||||||
value: true,
|
value: true,
|
||||||
recordId: 'id-1',
|
recordId: 'id-1',
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFi
|
||||||
import { usePushFocusItemToFocusStack } from '@/ui/utilities/focus/hooks/usePushFocusItemToFocusStack';
|
import { usePushFocusItemToFocusStack } from '@/ui/utilities/focus/hooks/usePushFocusItemToFocusStack';
|
||||||
import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType';
|
import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType';
|
||||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
|
||||||
|
|
||||||
const updateRecord = fn();
|
const updateRecord = fn();
|
||||||
|
|
@ -102,7 +101,7 @@ const EmailInputWithContext = ({
|
||||||
const meta: Meta<typeof EmailInputWithContext> = {
|
const meta: Meta<typeof EmailInputWithContext> = {
|
||||||
title: 'UI/Input/EmailsFieldInput',
|
title: 'UI/Input/EmailsFieldInput',
|
||||||
component: EmailInputWithContext,
|
component: EmailInputWithContext,
|
||||||
decorators: [SnackBarDecorator, I18nFrontDecorator],
|
decorators: [SnackBarDecorator],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ import { usePushFocusItemToFocusStack } from '@/ui/utilities/focus/hooks/usePush
|
||||||
import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType';
|
import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType';
|
||||||
import { getCanvasElementForDropdownTesting } from 'twenty-ui/testing';
|
import { getCanvasElementForDropdownTesting } from 'twenty-ui/testing';
|
||||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
|
|
||||||
const updateRecord = fn();
|
const updateRecord = fn();
|
||||||
|
|
||||||
|
|
@ -122,7 +121,7 @@ const getPrimaryLinkBookmarkIcon = (canvasElement: HTMLElement) =>
|
||||||
const meta: Meta = {
|
const meta: Meta = {
|
||||||
title: 'UI/Data/Field/Input/LinksFieldInput',
|
title: 'UI/Data/Field/Input/LinksFieldInput',
|
||||||
component: LinksInputWithContext,
|
component: LinksInputWithContext,
|
||||||
decorators: [I18nFrontDecorator],
|
decorators: [],
|
||||||
args: {
|
args: {
|
||||||
value: {
|
value: {
|
||||||
primaryLinkUrl: null,
|
primaryLinkUrl: null,
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@ import { RECORD_TABLE_CELL_INPUT_ID_PREFIX } from '@/object-record/record-table/
|
||||||
import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId';
|
import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId';
|
||||||
import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType';
|
import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType';
|
||||||
import { StorybookFieldInputDropdownFocusIdSetterEffect } from '~/testing/components/StorybookFieldInputDropdownFocusIdSetterEffect';
|
import { StorybookFieldInputDropdownFocusIdSetterEffect } from '~/testing/components/StorybookFieldInputDropdownFocusIdSetterEffect';
|
||||||
import { I18nFrontDecorator } from '~/testing/decorators/I18nFrontDecorator';
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
FieldInputEventContextProviderWithJestMocks,
|
FieldInputEventContextProviderWithJestMocks,
|
||||||
|
|
@ -147,7 +146,7 @@ const meta: Meta = {
|
||||||
onTab: { control: false },
|
onTab: { control: false },
|
||||||
onShiftTab: { control: false },
|
onShiftTab: { control: false },
|
||||||
},
|
},
|
||||||
decorators: [clearMocksDecorator, SnackBarDecorator, I18nFrontDecorator],
|
decorators: [clearMocksDecorator, SnackBarDecorator],
|
||||||
parameters: {
|
parameters: {
|
||||||
clearMocks: true,
|
clearMocks: true,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue