From 34fa55dedc471e5f630c3072bb5207a9fd427547 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Wed, 10 Aug 2022 13:04:46 -0700 Subject: [PATCH 01/46] migrate-converged: move stories to root --- .../generators/migrate-converged-pkg/index.ts | 33 +++++-------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index fb32829753dfa..e44405445a0a6 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -12,8 +12,6 @@ import { writeJson, updateProjectConfiguration, serializeJson, - offsetFromRoot, - names, } from '@nrwl/devkit'; import * as path from 'path'; import * as os from 'os'; @@ -303,7 +301,7 @@ const templates = { module.exports = /** @type {Omit} */ ({ ...rootMain, - stories: [...rootMain.stories, '../src/**/*.stories.mdx', '../src/**/index.stories.@(ts|tsx)'], + stories: [...rootMain.stories, '../stories/**/*.stories.mdx', '../stories/**/index.stories.@(ts|tsx)'], addons: [...rootMain.addons], webpackFinal: (config, options) => { const localConfig = { ...rootMain.webpackFinal(config, options) }; @@ -643,7 +641,7 @@ function setupStorybook(tree: Tree, options: NormalizedSchema) { return json; }); - moveStories(tree, options); + moveStoriesToPackageRoot(tree, options); } if (sbAction === 'remove') { @@ -714,11 +712,10 @@ function setupStorybook(tree: Tree, options: NormalizedSchema) { return tree; } -function moveStories(tree: Tree, options: NormalizedSchema) { - const componentName = names(options.normalizedPkgName).className.replace('React', ''); +function moveStoriesToPackageRoot(tree: Tree, options: NormalizedSchema) { const sourceRoot = options.projectConfig.sourceRoot ?? ''; const oldStoriesPath = joinPathFragments(sourceRoot, 'stories'); - const newStoriesPath = joinPathFragments(oldStoriesPath, componentName); + const newStoriesPath = joinPathFragments(options.projectConfig.root, 'stories'); const storiesExistInNewPath = tree.exists(newStoriesPath); if (storiesExistInNewPath) { @@ -727,30 +724,16 @@ function moveStories(tree: Tree, options: NormalizedSchema) { visitNotIgnoredFiles(tree, oldStoriesPath, treePath => { if (treePath.includes('.stories.') || treePath.includes('.md')) { - const storyFileName = path.basename(treePath); - const shouldBeMigratedToIndexFile = storyFileName.toLowerCase() === `${componentName.toLowerCase()}.stories.tsx`; - - const newStoryPath = joinPathFragments( - newStoriesPath, - shouldBeMigratedToIndexFile ? 'index.stories.tsx' : storyFileName, - ); + const newStoryPath = treePath + .split('/') + .filter(str => str !== 'src') + .join('/'); tree.rename(treePath, newStoryPath); - updateStoryFileImports(tree, options, newStoryPath); } }); } -function updateStoryFileImports(tree: Tree, options: NormalizedSchema, storyPath: string) { - if (!tree.exists(storyPath)) { - return; - } - - const storyFile = tree.read(storyPath, 'utf8') as string; - const updatedStoryFile = storyFile.replace('../index', options.name); - tree.write(storyPath, updatedStoryFile); -} - function shouldSetupStorybook(tree: Tree, options: NormalizedSchema) { let hasStories = false; From d861740be99108ef2f7d6372842950e816b6691b Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Wed, 10 Aug 2022 13:12:41 -0700 Subject: [PATCH 02/46] migrate-converged: update tests --- tools/generators/migrate-converged-pkg/index.spec.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tools/generators/migrate-converged-pkg/index.spec.ts b/tools/generators/migrate-converged-pkg/index.spec.ts index 398e75f99a7b5..cfcb2f04cccf3 100644 --- a/tools/generators/migrate-converged-pkg/index.spec.ts +++ b/tools/generators/migrate-converged-pkg/index.spec.ts @@ -578,7 +578,7 @@ describe('migrate-converged-pkg generator', () => { module.exports = /** @type {Omit} */ ({ ...rootMain, - stories: [...rootMain.stories, '../src/**/*.stories.mdx', '../src/**/index.stories.@(ts|tsx)'], + stories: [...rootMain.stories, '../stories/**/*.stories.mdx', '../stories/**/index.stories.@(ts|tsx)'], addons: [...rootMain.addons], webpackFinal: (config, options) => { const localConfig = { ...rootMain.webpackFinal(config, options) }; @@ -674,11 +674,10 @@ describe('migrate-converged-pkg generator', () => { expect(tree.read(paths.storyOne)?.toString('utf-8')).toMatchSnapshot(); }); - it(`should move existing stories to the src/stories/ComponentName folder`, async () => { - const { projectConfig, normalizedProjectName } = setup({ createDummyStories: true }); - const componentName = names(normalizedProjectName).className.replace('React', ''); + it(`should move existing stories to the root stories subfolder`, async () => { + const { projectConfig } = setup({ createDummyStories: true }); const oldStoriesPath = `${projectConfig.root}/src/stories`; - const newStoriesPath = `${oldStoriesPath}/${componentName}`; + const newStoriesPath = `${projectConfig.root}/stories`; const storyFiles: string[] = []; visitNotIgnoredFiles(tree, oldStoriesPath, treePath => { From c0c0ca057f7ffcc500eaffd6c2099bf3fce24c40 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Wed, 10 Aug 2022 13:19:55 -0700 Subject: [PATCH 03/46] migrate-converged:npmignore docs & stories folders --- tools/generators/migrate-converged-pkg/index.spec.ts | 3 ++- tools/generators/migrate-converged-pkg/index.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/generators/migrate-converged-pkg/index.spec.ts b/tools/generators/migrate-converged-pkg/index.spec.ts index cfcb2f04cccf3..c404c031f05b0 100644 --- a/tools/generators/migrate-converged-pkg/index.spec.ts +++ b/tools/generators/migrate-converged-pkg/index.spec.ts @@ -934,10 +934,12 @@ describe('migrate-converged-pkg generator', () => { bundle-size/ config/ coverage/ + docs/ e2e/ etc/ node_modules/ src/ + stories/ dist/types/ temp/ __fixtures__ @@ -947,7 +949,6 @@ describe('migrate-converged-pkg generator', () => { *.api.json *.log *.spec.* - *.stories.* *.test.* *.yml diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index e44405445a0a6..d6296038f3ae0 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -349,10 +349,12 @@ const templates = { bundle-size/ config/ coverage/ + docs/ e2e/ etc/ node_modules/ src/ + stories/ dist/types/ temp/ __fixtures__ @@ -362,7 +364,6 @@ const templates = { *.api.json *.log *.spec.* - *.stories.* *.test.* *.yml From e8126598de84ed75c07fe2d46e1b5734937f36c2 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Wed, 10 Aug 2022 13:34:24 -0700 Subject: [PATCH 04/46] migrate-converged: move docs to docs subfolder --- tools/generators/migrate-converged-pkg/index.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index d6296038f3ae0..4efdf6552b0b5 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -138,6 +138,7 @@ function runMigrationOnProject(tree: Tree, schema: AssertedSchema, _userLog: Use setupBabel(tree, options); updateNxWorkspace(tree, options); + moveDocsToSubfolder(tree, options); } // ==== helpers ==== @@ -735,6 +736,19 @@ function moveStoriesToPackageRoot(tree: Tree, options: NormalizedSchema) { }); } +function moveDocsToSubfolder(tree: Tree, options: NormalizedSchema) { + const root = options.projectConfig.root; + visitNotIgnoredFiles(tree, root, treePath => { + const currPath = treePath.toLowerCase(); + if (currPath.includes('spec') || currPath.includes('migration')) { + const fileName = path.basename(treePath); + const newPath = joinPathFragments(root, 'docs', fileName); + + tree.rename(treePath, newPath); + } + }); +} + function shouldSetupStorybook(tree: Tree, options: NormalizedSchema) { let hasStories = false; From b80675f78b871fc4626ada95c6babb2d251ed00c Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Mon, 22 Aug 2022 14:18:30 -0700 Subject: [PATCH 05/46] fix missing import --- tools/generators/migrate-converged-pkg/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index bb51945cfddcb..beb09661bd639 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -12,6 +12,7 @@ import { writeJson, updateProjectConfiguration, serializeJson, + offsetFromRoot, } from '@nrwl/devkit'; import * as path from 'path'; import * as os from 'os'; From 503956f99329c1744f131ddf7f8c23b582f58a9f Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Mon, 22 Aug 2022 14:34:00 -0700 Subject: [PATCH 06/46] fix: ensure doc file is .md --- tools/generators/migrate-converged-pkg/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index beb09661bd639..3a446732cc41b 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -738,7 +738,7 @@ function moveDocsToSubfolder(tree: Tree, options: NormalizedSchema) { const root = options.projectConfig.root; visitNotIgnoredFiles(tree, root, treePath => { const currPath = treePath.toLowerCase(); - if (currPath.includes('spec') || currPath.includes('migration')) { + if ((currPath.includes('.md') && currPath.includes('spec')) || currPath.includes('migration')) { const fileName = path.basename(treePath); const newPath = joinPathFragments(root, 'docs', fileName); From 3c50e6f904a063012ca91e0ca357259291168259 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Mon, 22 Aug 2022 14:45:59 -0700 Subject: [PATCH 07/46] Remove unintentional format change --- .../SpinButton/SpinButtonAccessibility.md | 60 ++++++++++--------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/packages/react-components/react-spinbutton/src/stories/SpinButton/SpinButtonAccessibility.md b/packages/react-components/react-spinbutton/src/stories/SpinButton/SpinButtonAccessibility.md index 00570c5231e29..25177440d9bc0 100644 --- a/packages/react-components/react-spinbutton/src/stories/SpinButton/SpinButtonAccessibility.md +++ b/packages/react-components/react-spinbutton/src/stories/SpinButton/SpinButtonAccessibility.md @@ -5,37 +5,34 @@ This section documents accessibility-related behavoirs of spin buttons. ### Keyboarding #### Tab Order - 1. Value field #### States - 1. Rest (Focused) 2. Editing (Focused and editing) #### Keyboard State Diagram -| Starting state | Transition | Resulting state | -| ------------------------------------------- | --------------------------------------- | ------------------------------------------- | -| Content before spin button | Tab | Rest | -| Rest | Tab | Content after spin button | -| Editing | Tab | Content after spin button (Value committed) | -| Editing | Enter | Rest (Value committed) | -| Rest | Any Edit Key (that results in a change) | Editing | -| Editing | Any Edit Key | Editing | -| Content after spin button (Value committed) | Shift + Tab | Rest | +| Starting state | Transition | Resulting state | +| ---------- | ------------ | ------- | +| Content before spin button | Tab | Rest | +| Rest | Tab | Content after spin button | +| Editing | Tab | Content after spin button (Value committed) | +| Editing | Enter | Rest (Value committed)| +| Rest | Any Edit Key (that results in a change) | Editing | +| Editing | Any Edit Key | Editing | +| Content after spin button (Value committed) | Shift + Tab | Rest | ##### Edit keys - -| Edit Key | Result | -| ------------------ | --------------------------------------------------------------------- | -| Home | First item in defined range | -| End | Last item in defined range | -| Up arrow | Increments value higher, based on the step prop (defaulting to 1) | -| Down arrow | Increments value lower, based on the step prop (defaulting to 1) | -| Page up | Increments value higher, based on the stepPage prop (defaulting to 1) | -| Page down | Increments value lower, based on the stepPage prop (defaulting to 1) | -| Typing valid value | Valid value | +| Edit Key | Result | +| ---------- | ------------ | +| Home | First item in defined range | +| End | Last item in defined range | +| Up arrow | Increments value higher, based on the step prop (defaulting to 1) | +| Down arrow | Increments value lower, based on the step prop (defaulting to 1) | +| Page up | Increments value higher, based on the stepPage prop (defaulting to 1) | +| Page down | Increments value lower, based on the stepPage prop (defaulting to 1) | +| Typing valid value | Valid value | ### High contrast mode @@ -59,15 +56,15 @@ Mouse press quick changes to value are not announced to screen readers. [Narrator defaults to reading min/max as 0 when they're (intentionally) undefined](https://microsoft.visualstudio.com/Edge/_workitems/edit/39070743) ### Narrator + Edge - When no min or max values are set Narrator announces "minimum 0" and "maximum 0". This is misleading because when these values are not set SpinButton does not enforce a min or max value. ### NVDA + Edge/Chrome - When focused on the SpinButton input field pressing up/down arrows announces "blank". NVDA + Firefox announces the correct value. ## Usage + + ### When to choose Spin button SpinButtons allow someone to incrementally adjust a value in small steps. @@ -79,7 +76,6 @@ SpinButtons are a better choice than Slider when there are many valid values and ### Required props Authors must provide a label for SpinButton. The recommended pattern for Fluent inputs is to use the Label component like this: - ``` @@ -97,6 +93,8 @@ How this is read also depends on the screen reader used but a screen reader shou ### Styling + + ### Advanced usage Placeholder: Cover potential use cases not included in our storybook examples here (or even included storybook examples, if they're complex require a notable amout of work or nuanced understanding from authors) @@ -104,13 +102,17 @@ Placeholder: Cover potential use cases not included in our storybook examples he #### Child content restrictions The component has the following structure: +* Input field +* Up button + * Increment icon +* Down button + * Decrement icon -- Input field -- Up button - - Increment icon -- Down button - - Decrement icon #### Component-specific usage warnings + + ## Extending [component name] + + From 240795ddee005326a39cf1f7285924417bb4dab1 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Tue, 23 Aug 2022 08:15:46 -0700 Subject: [PATCH 08/46] fix: update sb TS config to point to new stories folder for compilation --- tools/generators/migrate-converged-pkg/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index 3a446732cc41b..7e955899de8da 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -327,7 +327,7 @@ const templates = { allowJs: true, checkJs: true, }, - include: ['../src/**/*.stories.ts', '../src/**/*.stories.tsx', '*.js'], + include: ['../stories/**/*.stories.ts', '../stories/**/*.stories.tsx', '*.js'], }, }, e2e: { From 2611f71ebd471c3173608c9ee5e22dae85fedd7f Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Tue, 23 Aug 2022 09:53:59 -0700 Subject: [PATCH 09/46] update test --- tools/generators/migrate-converged-pkg/index.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/generators/migrate-converged-pkg/index.spec.ts b/tools/generators/migrate-converged-pkg/index.spec.ts index a4d7d73510433..154e9a87a7f9c 100644 --- a/tools/generators/migrate-converged-pkg/index.spec.ts +++ b/tools/generators/migrate-converged-pkg/index.spec.ts @@ -560,7 +560,7 @@ describe('migrate-converged-pkg generator', () => { outDir: '', types: ['static-assets', 'environment', 'storybook__addons'], }, - include: ['../src/**/*.stories.ts', '../src/**/*.stories.tsx', '*.js'], + include: ['../stories/**/*.stories.ts', '../stories/**/*.stories.tsx', '*.js'], }); expect(readJson(tree, paths.tsconfig.lib).exclude).toEqual( expect.arrayContaining(['**/*.stories.ts', '**/*.stories.tsx']), From d31acbbf6c0063020189557812553ad6a8f7b76e Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Fri, 26 Aug 2022 09:56:49 -0700 Subject: [PATCH 10/46] fix: linting now re-enabled for stories that live in new stories/ folder --- scripts/tasks/eslint.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/scripts/tasks/eslint.ts b/scripts/tasks/eslint.ts index f796eb8520150..ef7c1cb96fb4e 100644 --- a/scripts/tasks/eslint.ts +++ b/scripts/tasks/eslint.ts @@ -1,10 +1,18 @@ import { eslintTask } from 'just-scripts'; import * as path from 'path'; import * as constants from './eslint-constants'; +import * as fs from 'fs'; + +const files = [path.join(process.cwd(), constants.directory)]; +const storiesPath = path.join(process.cwd(), 'stories'); + +if (fs.existsSync(storiesPath)) { + files.push(storiesPath); +} export const eslint = eslintTask({ // TODO: also lint config files? - files: [path.join(process.cwd(), constants.directory)], + files: files, extensions: constants.extensions, cache: true, // only lint files changed since last lint fix: process.argv.includes('--fix'), From 4df11acdd10f2e465274747a18e8b2c2fd9721df Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Fri, 26 Aug 2022 13:07:54 -0700 Subject: [PATCH 11/46] feedback: add stories to paths and utilize it --- tools/generators/migrate-converged-pkg/index.ts | 3 +-- tools/utils.ts | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index 7e955899de8da..b655126e682dc 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -715,8 +715,7 @@ function setupStorybook(tree: Tree, options: NormalizedSchema) { function moveStoriesToPackageRoot(tree: Tree, options: NormalizedSchema) { const sourceRoot = options.projectConfig.sourceRoot ?? ''; const oldStoriesPath = joinPathFragments(sourceRoot, 'stories'); - const newStoriesPath = joinPathFragments(options.projectConfig.root, 'stories'); - const storiesExistInNewPath = tree.exists(newStoriesPath); + const storiesExistInNewPath = tree.exists(options.paths.stories); if (storiesExistInNewPath) { return; diff --git a/tools/utils.ts b/tools/utils.ts index e2cedbdfa9019..83cdc62948215 100644 --- a/tools/utils.ts +++ b/tools/utils.ts @@ -103,6 +103,7 @@ export function getProjectConfig(tree: Tree, options: { packageName: string }) { rootJestPreset: '/jest.preset.js', rootJestConfig: '/jest.config.js', npmConfig: joinPathFragments(projectConfig.root, '.npmignore'), + stories: joinPathFragments(projectConfig.root, 'stories'), storybook: { rootFolder: joinPathFragments(projectConfig.root, '.storybook'), tsconfig: joinPathFragments(projectConfig.root, '.storybook/tsconfig.json'), From 41a5a6091cee9d17720d30c265d8310059362e9a Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Wed, 28 Sep 2022 13:55:40 -0700 Subject: [PATCH 12/46] migrateE2eSetupToCypress function added, renames instances of e2e functions to cypress, updates tests --- .../migrate-converged-pkg/index.spec.ts | 39 ++++++------ .../generators/migrate-converged-pkg/index.ts | 62 ++++++++++++++----- tools/utils.ts | 6 +- 3 files changed, 66 insertions(+), 41 deletions(-) diff --git a/tools/generators/migrate-converged-pkg/index.spec.ts b/tools/generators/migrate-converged-pkg/index.spec.ts index 154e9a87a7f9c..a88c9ed1cf8c5 100644 --- a/tools/generators/migrate-converged-pkg/index.spec.ts +++ b/tools/generators/migrate-converged-pkg/index.spec.ts @@ -706,29 +706,28 @@ describe('migrate-converged-pkg generator', () => { }); }); - describe(`e2e config`, () => { + describe(`cypress config`, () => { function setup(config: { projectName: string }) { const projectConfig = readProjectConfiguration(tree, config.projectName); const paths = { - e2eRoot: `${projectConfig.root}/e2e`, packageJson: `${projectConfig.root}/package.json`, tsconfig: { main: `${projectConfig.root}/tsconfig.json`, lib: `${projectConfig.root}/tsconfig.lib.json`, test: `${projectConfig.root}/tsconfig.spec.json`, - e2e: `${projectConfig.root}/e2e/tsconfig.json`, + cypress: `${projectConfig.root}/tsconfig.cy.json`, }, }; - function createE2eSetup() { - writeJson(tree, paths.tsconfig.e2e, { + function createCypressSetup() { + writeJson(tree, paths.tsconfig.cypress, { extends: '../../tsconfig.base.json', compilerOptions: {}, }); tree.write( - `${paths.e2eRoot}/index.e2e.ts`, + `${projectConfig.sourceRoot}/components/index.cy.ts`, stripIndents` - describe('E2E test', () => { + describe('Cypress test', () => { before(() => { cy.visitStorybook(); }); @@ -739,39 +738,39 @@ describe('migrate-converged-pkg generator', () => { return tree; } - return { projectConfig, paths, createE2eSetup }; + return { projectConfig, paths, createCypressSetup }; } - it(`should do nothing if e2e setup is missing`, async () => { + it(`should do nothing if cypress setup is missing`, async () => { const { paths } = setup({ projectName: options.name }); await generator(tree, { name: options.name }); - expect(tree.exists(paths.tsconfig.e2e)).toBeFalsy(); + expect(tree.exists(paths.tsconfig.cypress)).toBeFalsy(); }); - it(`should setup e2e if present`, async () => { - const { paths, createE2eSetup } = setup({ projectName: options.name }); + it(`should setup cypress if present`, async () => { + const { paths, createCypressSetup } = setup({ projectName: options.name }); - createE2eSetup(); + createCypressSetup(); - expect(tree.exists(paths.tsconfig.e2e)).toBeTruthy(); + expect(tree.exists(paths.tsconfig.cypress)).toBeTruthy(); await generator(tree, { name: options.name }); // // TS Updates - const e2eTsConfig: TsConfig = readJson(tree, paths.tsconfig.e2e); + const cypressTsConfig: TsConfig = readJson(tree, paths.tsconfig.cypress); const mainTsConfig: TsConfig = readJson(tree, paths.tsconfig.main); - expect(e2eTsConfig).toEqual({ - extends: '../tsconfig.json', + expect(cypressTsConfig).toEqual({ + extends: './tsconfig.json', compilerOptions: { isolatedModules: false, lib: ['ES2019', 'dom'], types: ['node', 'cypress', 'cypress-storybook/cypress', 'cypress-real-events'], }, - include: ['**/*.ts', '**/*.tsx'], + include: ['**/*.cy.ts', '**/*.cy.tsx'], }); - expect(mainTsConfig.references).toEqual(expect.arrayContaining([{ path: './e2e/tsconfig.json' }])); + expect(mainTsConfig.references).toEqual(expect.arrayContaining([{ path: './tsconfig.cy.json' }])); // package.json updates const packageJson: PackageJson = readJson(tree, paths.packageJson); @@ -956,7 +955,6 @@ describe('migrate-converged-pkg generator', () => { config/ coverage/ docs/ - e2e/ etc/ node_modules/ src/ @@ -970,6 +968,7 @@ describe('migrate-converged-pkg generator', () => { *.api.json *.log *.spec.* + *.cy.* *.test.* *.yml diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index b655126e682dc..3c235e4bfd04d 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -133,7 +133,8 @@ function runMigrationOnProject(tree: Tree, schema: AssertedSchema, _userLog: Use // setup storybook setupStorybook(tree, options); - setupE2E(tree, options); + migrateE2ESetupToCypress(tree, options); + setupCypress(tree, options); setupNpmIgnoreConfig(tree, options); setupBabel(tree, options); @@ -330,15 +331,15 @@ const templates = { include: ['../stories/**/*.stories.ts', '../stories/**/*.stories.tsx', '*.js'], }, }, - e2e: { + cypress: { tsconfig: { - extends: '../tsconfig.json', + extends: './tsconfig.json', compilerOptions: { isolatedModules: false, types: ['node', 'cypress', 'cypress-storybook/cypress', 'cypress-real-events'], lib: ['ES2019', 'dom'], }, - include: ['**/*.ts', '**/*.tsx'], + include: ['**/*.cy.ts', '**/*.cy.tsx'], }, }, npmIgnoreConfig: @@ -349,7 +350,6 @@ const templates = { config/ coverage/ docs/ - e2e/ etc/ node_modules/ src/ @@ -363,6 +363,7 @@ const templates = { *.api.json *.log *.spec.* + *.cy.* *.test.* *.yml @@ -712,6 +713,40 @@ function setupStorybook(tree: Tree, options: NormalizedSchema) { return tree; } +function migrateE2ESetupToCypress(tree: Tree, options: NormalizedSchema) { + const e2ePath = joinPathFragments(options.projectConfig.root, 'e2e'); + const e2eFolderExists = tree.exists(e2ePath); + + if (!e2eFolderExists) { + return; + } + + visitNotIgnoredFiles(tree, e2ePath, treePath => { + if (treePath.includes('.e2e.')) { + const content = tree.read(treePath)?.toString('utf-8'); + const fileName = path.basename(treePath).replace('e2e', 'cy'); + const componentName = fileName.split('.')[0]; + const newCypressTestPath = joinPathFragments(options.paths.sourceRoot, 'components', componentName, fileName); + + tree.rename(treePath, newCypressTestPath); + + //Update file imports of cypress component test files + if (content && content.includes('./selectors')) { + const newContent = content.replace('./selectors', '../../testing/selectors'); + tree.write(newCypressTestPath, newContent); + } + } else if (treePath.includes('tsconfig.json')) { + const newCypressTSConfigPath = joinPathFragments(options.projectConfig.root, 'tsconfig.cy.json'); + + tree.rename(treePath, newCypressTSConfigPath); + } else if (treePath.includes('selectors.ts')) { + const newFilePath = joinPathFragments(options.paths.sourceRoot, 'testing', path.basename(treePath)); + + tree.rename(treePath, newFilePath); + } + }); +} + function moveStoriesToPackageRoot(tree: Tree, options: NormalizedSchema) { const sourceRoot = options.projectConfig.sourceRoot ?? ''; const oldStoriesPath = joinPathFragments(sourceRoot, 'stories'); @@ -768,18 +803,16 @@ function shouldSetupStorybook(tree: Tree, options: NormalizedSchema) { } } -function setupE2E(tree: Tree, options: NormalizedSchema) { - if (!shouldSetupE2E(tree, options)) { +function setupCypress(tree: Tree, options: NormalizedSchema) { + if (!shouldSetupCypress(tree, options)) { return tree; } - tree.rename(joinPathFragments(options.paths.e2e.rootFolder, 'tsconfig.json'), options.paths.e2e.tsconfig); - - writeJson(tree, options.paths.e2e.tsconfig, templates.e2e.tsconfig); + writeJson(tree, options.paths.tsconfig.cypress, templates.cypress.tsconfig); updateJson(tree, options.paths.tsconfig.main, (json: TsConfig) => { json.references?.push({ - path: `./${path.basename(options.paths.e2e.rootFolder)}/${path.basename(options.paths.e2e.tsconfig)}`, + path: `./${path.basename(options.paths.tsconfig.cypress)}`, }); return json; @@ -796,11 +829,8 @@ function setupE2E(tree: Tree, options: NormalizedSchema) { return tree; } -function shouldSetupE2E(tree: Tree, options: NormalizedSchema) { - return ( - tree.exists(joinPathFragments(options.paths.e2e.rootFolder, 'tsconfig.json')) || - tree.exists(options.paths.e2e.tsconfig) - ); +function shouldSetupCypress(tree: Tree, options: NormalizedSchema) { + return tree.exists(options.paths.tsconfig.cypress); } function updateLocalJestConfig(tree: Tree, options: NormalizedSchema) { diff --git a/tools/utils.ts b/tools/utils.ts index 83cdc62948215..51d29b001c248 100644 --- a/tools/utils.ts +++ b/tools/utils.ts @@ -92,6 +92,7 @@ export function getProjectConfig(tree: Tree, options: { packageName: string }) { main: joinPathFragments(projectConfig.root, 'tsconfig.json'), lib: joinPathFragments(projectConfig.root, 'tsconfig.lib.json'), test: joinPathFragments(projectConfig.root, 'tsconfig.spec.json'), + cypress: joinPathFragments(projectConfig.root, 'tsconfig.cy.json'), }, sourceRoot: joinPathFragments(projectConfig.root, 'src'), conformanceSetup: joinPathFragments(projectConfig.root, 'src', 'common', 'isConformant.ts'), @@ -110,11 +111,6 @@ export function getProjectConfig(tree: Tree, options: { packageName: string }) { main: joinPathFragments(projectConfig.root, '.storybook/main.js'), preview: joinPathFragments(projectConfig.root, '.storybook/preview.js'), }, - e2e: { - rootFolder: joinPathFragments(projectConfig.root, 'e2e'), - support: joinPathFragments(projectConfig.root, 'e2e', 'support.js'), - tsconfig: joinPathFragments(projectConfig.root, 'e2e', 'tsconfig.json'), - }, }; return { From 4da5509990000c68ace143fb56a65f9b7ab968f6 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Wed, 28 Sep 2022 15:10:59 -0700 Subject: [PATCH 13/46] Add migrateCommonFolderToTesting function, add clarifying comments, add reminder comments --- .../generators/migrate-converged-pkg/index.ts | 78 ++++++++++++++----- 1 file changed, 57 insertions(+), 21 deletions(-) diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index 3c235e4bfd04d..4d786092f3819 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -141,6 +141,7 @@ function runMigrationOnProject(tree: Tree, schema: AssertedSchema, _userLog: Use updateNxWorkspace(tree, options); moveDocsToSubfolder(tree, options); + migrateCommonFolderToTesting(tree, options); } // ==== helpers ==== @@ -712,7 +713,9 @@ function setupStorybook(tree: Tree, options: NormalizedSchema) { return tree; } - +/** + * Remove function after migration is complete. + */ function migrateE2ESetupToCypress(tree: Tree, options: NormalizedSchema) { const e2ePath = joinPathFragments(options.projectConfig.root, 'e2e'); const e2eFolderExists = tree.exists(e2ePath); @@ -722,48 +725,58 @@ function migrateE2ESetupToCypress(tree: Tree, options: NormalizedSchema) { } visitNotIgnoredFiles(tree, e2ePath, treePath => { - if (treePath.includes('.e2e.')) { + if (treePath.includes('selectors.ts')) { + const newFilePath = joinPathFragments(options.paths.sourceRoot, 'testing', path.basename(treePath)); + + // Move testing helper file to src/testing. + tree.rename(treePath, newFilePath); + } else if (treePath.includes('.e2e.')) { const content = tree.read(treePath)?.toString('utf-8'); const fileName = path.basename(treePath).replace('e2e', 'cy'); const componentName = fileName.split('.')[0]; const newCypressTestPath = joinPathFragments(options.paths.sourceRoot, 'components', componentName, fileName); - + // Move cypress component test file to appropriate src/components/{ComponentName} location. tree.rename(treePath, newCypressTestPath); - //Update file imports of cypress component test files + //Update file imports of cypress component test file. if (content && content.includes('./selectors')) { const newContent = content.replace('./selectors', '../../testing/selectors'); tree.write(newCypressTestPath, newContent); } } else if (treePath.includes('tsconfig.json')) { const newCypressTSConfigPath = joinPathFragments(options.projectConfig.root, 'tsconfig.cy.json'); - + // Move e2e folder tsconfig.json to root tree.rename(treePath, newCypressTSConfigPath); - } else if (treePath.includes('selectors.ts')) { - const newFilePath = joinPathFragments(options.paths.sourceRoot, 'testing', path.basename(treePath)); - - tree.rename(treePath, newFilePath); } }); } -function moveStoriesToPackageRoot(tree: Tree, options: NormalizedSchema) { - const sourceRoot = options.projectConfig.sourceRoot ?? ''; - const oldStoriesPath = joinPathFragments(sourceRoot, 'stories'); - const storiesExistInNewPath = tree.exists(options.paths.stories); +/** + * Remove function after migration is complete. + */ +function migrateCommonFolderToTesting(tree: Tree, options: NormalizedSchema) { + const sourceRoot = options.paths.sourceRoot; + const commonFolderPath = joinPathFragments(sourceRoot, 'common'); + const commonFolderExists = tree.exists(commonFolderPath); - if (storiesExistInNewPath) { + if (!commonFolderExists) { return; } - visitNotIgnoredFiles(tree, oldStoriesPath, treePath => { - if (treePath.includes('.stories.') || treePath.includes('.md')) { - const newStoryPath = treePath - .split('/') - .filter(str => str !== 'src') - .join('/'); + // Move any files in src/common/ to src/testing/ + visitNotIgnoredFiles(tree, commonFolderPath, treePath => { + const fileName = path.basename(treePath); + const newPath = joinPathFragments(sourceRoot, 'testing', fileName); + tree.rename(treePath, newPath); + }); - tree.rename(treePath, newStoryPath); + // Update any imports to reflect file location change from common/ to testing/ + visitNotIgnoredFiles(tree, joinPathFragments(sourceRoot, 'components'), treePath => { + const fileContent = tree.read(treePath)?.toString('utf-8'); + + if (fileContent && fileContent.includes('common/')) { + const newContent = fileContent.replace('common/', 'testing/'); + tree.write(treePath, newContent); } }); } @@ -781,6 +794,29 @@ function moveDocsToSubfolder(tree: Tree, options: NormalizedSchema) { }); } +/** + * Remove function after migration is complete. + */ +function moveStoriesToPackageRoot(tree: Tree, options: NormalizedSchema) { + const oldStoriesPath = joinPathFragments(options.paths.sourceRoot, 'stories'); + const storiesExistInNewPath = tree.exists(options.paths.stories); + + if (storiesExistInNewPath) { + return; + } + + visitNotIgnoredFiles(tree, oldStoriesPath, treePath => { + if (treePath.includes('.stories.') || treePath.includes('.md')) { + const newStoryPath = treePath + .split('/') + .filter(str => str !== 'src') + .join('/'); + + tree.rename(treePath, newStoryPath); + } + }); +} + function shouldSetupStorybook(tree: Tree, options: NormalizedSchema) { let hasStories = false; From 0ce56a8a55f3f9d926ae1713b78dd7bab8e71313 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Wed, 28 Sep 2022 15:13:29 -0700 Subject: [PATCH 14/46] update removeTsIgnorePragmas func to reflect new stories location --- tools/generators/migrate-converged-pkg/index.spec.ts | 4 ++-- tools/generators/migrate-converged-pkg/index.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/generators/migrate-converged-pkg/index.spec.ts b/tools/generators/migrate-converged-pkg/index.spec.ts index a88c9ed1cf8c5..195c6b12d6412 100644 --- a/tools/generators/migrate-converged-pkg/index.spec.ts +++ b/tools/generators/migrate-converged-pkg/index.spec.ts @@ -498,8 +498,8 @@ describe('migrate-converged-pkg generator', () => { const normalizedProjectNameNamesVariants = names(normalizedProjectName); const paths = { - storyOne: `${projectConfig.root}/src/stories/${normalizedProjectNameNamesVariants.className}.stories.tsx`, - storyTwo: `${projectConfig.root}/src/stories/${normalizedProjectNameNamesVariants.className}Other.stories.tsx`, + storyOne: `${projectConfig.root}/stories/${normalizedProjectNameNamesVariants.className}.stories.tsx`, + storyTwo: `${projectConfig.root}/stories/${normalizedProjectNameNamesVariants.className}Other.stories.tsx`, tsconfig: { storybook: `${projectStorybookConfigPath}/tsconfig.json`, main: `${projectConfig.root}/tsconfig.json`, diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index 4d786092f3819..d60e2ea292c4e 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -682,7 +682,7 @@ function setupStorybook(tree: Tree, options: NormalizedSchema) { function removeTsIgnorePragmas() { const stories: string[] = []; - visitNotIgnoredFiles(tree, options.paths.sourceRoot, treePath => { + visitNotIgnoredFiles(tree, options.projectConfig.root, treePath => { if (treePath.includes('.stories.')) { stories.push(treePath); } From 30f392629d525eafba10736ee84cac575abee604 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Wed, 28 Sep 2022 16:46:19 -0700 Subject: [PATCH 15/46] Remove unintended prettier changes after merge --- .../_docs/integrations/webpack.stories.mdx | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/packages/web-components/src/_docs/integrations/webpack.stories.mdx b/packages/web-components/src/_docs/integrations/webpack.stories.mdx index c538e6abf589c..d9e02006bbf87 100644 --- a/packages/web-components/src/_docs/integrations/webpack.stories.mdx +++ b/packages/web-components/src/_docs/integrations/webpack.stories.mdx @@ -75,24 +75,24 @@ You can learn more about `tsconfig.json` options in [the official TypeScript doc Next, create a `webpack.config.js` file in the root of your project folder with the following source: ```js -const { CleanWebpackPlugin } = require('clean-webpack-plugin'); +const { CleanWebpackPlugin } = require("clean-webpack-plugin"); const path = require('path'); -module.exports = function (env, { mode }) { +module.exports = function(env, { mode }) { const production = mode === 'production'; return { mode: production ? 'production' : 'development', devtool: production ? 'source-map' : 'inline-source-map', entry: { - app: ['./src/main.ts'], + app: ['./src/main.ts'] }, output: { filename: 'bundle.js', - publicPath: '/', + publicPath:'/' }, resolve: { extensions: ['.ts', '.js'], - modules: ['src', 'node_modules'], + modules: ['src', 'node_modules'] }, devServer: { port: 9000, @@ -102,25 +102,27 @@ module.exports = function (env, { mode }) { writeToDisk: true, }, static: { - directory: path.join(__dirname, './'), - }, + directory: path.join(__dirname, './') + } }, - plugins: [new CleanWebpackPlugin()], + plugins: [ + new CleanWebpackPlugin() + ], module: { rules: [ { test: /\.ts$/i, use: [ { - loader: 'ts-loader', - }, + loader: 'ts-loader' + } ], - exclude: /node_modules/, - }, - ], - }, - }; -}; + exclude: /node_modules/ + } + ] + } + } +} ``` This setup uses `ts-loader` to process TypeScript. It will also enable both a production mode and a development mode that watches your source, recompiling and refreshing your browser as things change. You can read more about Webpack configuration in [the official Webpack documentation](https://webpack.js.org/). From 18d094ac376e338f6c31c412950cc29995c9677f Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Wed, 28 Sep 2022 16:48:13 -0700 Subject: [PATCH 16/46] Remove unintended prettier changes --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ba793c90ed16b..9dcba5f483803 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,8 @@ The following table will help you navigate the 3 projects and understand their d [Fluent UI Insights](https://docs.microsoft.com/en-us/shows/fluent-ui-insights?utm_source=github) is a series that describes the design and decisions behind the Fluent UI design system. -| EP01: Positioning | EP02: Styling | EP03: Griffel | -| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| EP01: Positioning | EP02: Styling | EP03: Griffel | +| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Watch EP01: Positioning | Watch EP02: Styling | Watch EP03: Griffel | ## Licenses From 2b42693f155ca7bf7f5ecdc49d6765e7eced5661 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 08:32:15 -0700 Subject: [PATCH 17/46] add tests --- .../migrate-converged-pkg/index.spec.ts | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tools/generators/migrate-converged-pkg/index.spec.ts b/tools/generators/migrate-converged-pkg/index.spec.ts index 195c6b12d6412..046b0961d3498 100644 --- a/tools/generators/migrate-converged-pkg/index.spec.ts +++ b/tools/generators/migrate-converged-pkg/index.spec.ts @@ -18,6 +18,7 @@ import { visitNotIgnoredFiles, writeJson, WorkspaceConfiguration, + joinPathFragments, } from '@nrwl/devkit'; import { PackageJson, TsConfig } from '../../types'; @@ -778,6 +779,54 @@ describe('migrate-converged-pkg generator', () => { expect.objectContaining({ e2e: 'cypress run --component', 'e2e:local': 'cypress open --component' }), ); }); + + it(`should migrate existing files in e2e folder to new setup`, async () => { + const { paths, projectConfig } = setup({ projectName: options.name }); + const sourceRoot = joinPathFragments(projectConfig.root, 'src'); + const e2eFolderPath = joinPathFragments(projectConfig.root, 'e2e'); + + function createOldE2eSetup() { + writeJson(tree, joinPathFragments(e2eFolderPath, 'tsconfig.json'), { + extends: '../../tsconfig.base.json', + compilerOptions: {}, + }); + tree.write( + `${e2eFolderPath}/Dummy.e2e.ts`, + stripIndents` + describe('Cypress test', () => { + before(() => { + cy.visitStorybook(); + }); + }); + `, + ); + + tree.write( + `${e2eFolderPath}/selectors.ts`, + stripIndents` + export const dummySelector = '[role="dummy"]'; + `, + ); + + return tree; + } + + createOldE2eSetup(); + + expect(tree.exists(joinPathFragments(e2eFolderPath, 'tsconfig.json'))).toBeTruthy(); + expect(tree.exists(joinPathFragments(e2eFolderPath, 'selectors.ts'))).toBeTruthy(); + expect(tree.exists(joinPathFragments(e2eFolderPath, 'Dummy.e2e.ts'))).toBeTruthy(); + + await generator(tree, { name: options.name }); + + expect(tree.exists(joinPathFragments(e2eFolderPath, 'tsconfig.json'))).toBeFalsy(); + expect(tree.exists(joinPathFragments(e2eFolderPath, 'selectors.ts'))).toBeFalsy(); + expect(tree.exists(joinPathFragments(e2eFolderPath, 'Dummy.e2e.ts'))).toBeFalsy(); + + expect(tree.exists(paths.tsconfig.cypress)).toBeTruthy(); + expect(tree.exists(joinPathFragments(sourceRoot, 'components', 'Dummy', 'Dummy.cy.ts'))).toBeTruthy(); + expect(tree.exists(joinPathFragments(sourceRoot, 'testing', 'selectors.ts'))).toBeTruthy(); + }); }); describe(`api-extractor.json updates`, () => { From a07041d79a45875fe8452d6793709669d296cbef Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 08:41:30 -0700 Subject: [PATCH 18/46] Make 'stories' a constant --- scripts/tasks/eslint-constants.js | 3 +++ scripts/tasks/eslint.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/tasks/eslint-constants.js b/scripts/tasks/eslint-constants.js index 6e132278f87ee..34fc40fe410ab 100644 --- a/scripts/tasks/eslint-constants.js +++ b/scripts/tasks/eslint-constants.js @@ -5,4 +5,7 @@ module.exports = { /** Subdirectory to lint within package (relative path) */ directory: 'src', + + /** Subdirectory to lint stories within a v9 package */ + stories: 'stories', }; diff --git a/scripts/tasks/eslint.ts b/scripts/tasks/eslint.ts index ef7c1cb96fb4e..fb82e56850b6f 100644 --- a/scripts/tasks/eslint.ts +++ b/scripts/tasks/eslint.ts @@ -4,7 +4,7 @@ import * as constants from './eslint-constants'; import * as fs from 'fs'; const files = [path.join(process.cwd(), constants.directory)]; -const storiesPath = path.join(process.cwd(), 'stories'); +const storiesPath = path.join(process.cwd(), constants.stories); if (fs.existsSync(storiesPath)) { files.push(storiesPath); From 30e2c77e72fc659c562da476dcf1363164d8228e Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 08:46:29 -0700 Subject: [PATCH 19/46] add *.cy.tsx in cypress config spec pattern --- scripts/cypress/cypress.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cypress/cypress.config.ts b/scripts/cypress/cypress.config.ts index 6244a55955939..8571305a55dc2 100644 --- a/scripts/cypress/cypress.config.ts +++ b/scripts/cypress/cypress.config.ts @@ -65,7 +65,7 @@ const cypressWebpackConfig = (): Configuration => { export default defineConfig({ video: false, component: { - specPattern: path.join(process.cwd(), '**/*.e2e.tsx'), + specPattern: [path.join(process.cwd(), '**/*.e2e.tsx'), path.join(process.cwd(), '**/*.cy.tsx')], devServer: { framework: 'react', bundler: 'webpack', From a24291e2358e3bbb7a90b36a4a40d32e1cdd5359 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 09:29:14 -0700 Subject: [PATCH 20/46] fix: turn off no-extraneous-dependencies lint rule for cypress test files --- packages/eslint-plugin/src/configs/react.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/eslint-plugin/src/configs/react.js b/packages/eslint-plugin/src/configs/react.js index 3e302383d984f..636e87681449d 100644 --- a/packages/eslint-plugin/src/configs/react.js +++ b/packages/eslint-plugin/src/configs/react.js @@ -44,5 +44,11 @@ module.exports = { ], }, }, + { + files: '**.cy.{ts,tsx,js}', + rules: { + 'import/no-extraneous-dependencies': 'off', + }, + }, ], }; From ec892f06f29ae6adffd4568608695c25a0abb431 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 09:32:49 -0700 Subject: [PATCH 21/46] Change file --- ...eslint-plugin-a8ff06ca-d0bd-4d68-96b5-54549bb1a758.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 change/@fluentui-eslint-plugin-a8ff06ca-d0bd-4d68-96b5-54549bb1a758.json diff --git a/change/@fluentui-eslint-plugin-a8ff06ca-d0bd-4d68-96b5-54549bb1a758.json b/change/@fluentui-eslint-plugin-a8ff06ca-d0bd-4d68-96b5-54549bb1a758.json new file mode 100644 index 0000000000000..6759580956e71 --- /dev/null +++ b/change/@fluentui-eslint-plugin-a8ff06ca-d0bd-4d68-96b5-54549bb1a758.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Turn off import/no-extraneous-dependencies rule for cypress component test files.", + "packageName": "@fluentui/eslint-plugin", + "email": "tristan.watanabe@gmail.com", + "dependentChangeType": "none" +} From 67b03ddb2db6352a79c9caa8b67867b6b6122168 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 09:33:43 -0700 Subject: [PATCH 22/46] fix glob pattern --- packages/eslint-plugin/src/configs/react.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin/src/configs/react.js b/packages/eslint-plugin/src/configs/react.js index 636e87681449d..9b0a5ebe02dfc 100644 --- a/packages/eslint-plugin/src/configs/react.js +++ b/packages/eslint-plugin/src/configs/react.js @@ -45,7 +45,7 @@ module.exports = { }, }, { - files: '**.cy.{ts,tsx,js}', + files: '**/*.cy.{ts,tsx,js}', rules: { 'import/no-extraneous-dependencies': 'off', }, From a31151f304ef538f15746b19362871f22c492c08 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 09:57:28 -0700 Subject: [PATCH 23/46] fix: use correct condition for moveDocsToSubfolder --- tools/generators/migrate-converged-pkg/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index d60e2ea292c4e..bbdd5d7cb150d 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -785,7 +785,7 @@ function moveDocsToSubfolder(tree: Tree, options: NormalizedSchema) { const root = options.projectConfig.root; visitNotIgnoredFiles(tree, root, treePath => { const currPath = treePath.toLowerCase(); - if ((currPath.includes('.md') && currPath.includes('spec')) || currPath.includes('migration')) { + if (currPath.includes('.md') && (currPath.includes('spec') || currPath.includes('migration'))) { const fileName = path.basename(treePath); const newPath = joinPathFragments(root, 'docs', fileName); From bb27ff91ff30408f4af716f8209385a50a62ac33 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 10:33:59 -0700 Subject: [PATCH 24/46] Update instances of the common folder to testing --- packages/eslint-plugin/src/configs/react.js | 2 +- tools/generators/migrate-converged-pkg/index.ts | 2 +- tools/utils.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/eslint-plugin/src/configs/react.js b/packages/eslint-plugin/src/configs/react.js index 9b0a5ebe02dfc..4b8d2936aed14 100644 --- a/packages/eslint-plugin/src/configs/react.js +++ b/packages/eslint-plugin/src/configs/react.js @@ -45,7 +45,7 @@ module.exports = { }, }, { - files: '**/*.cy.{ts,tsx,js}', + files: ['**/*.cy.{ts,tsx,js}', 'isConformant.{ts,tsx,js}'], rules: { 'import/no-extraneous-dependencies': 'off', }, diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index bbdd5d7cb150d..4710230af37d3 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -226,7 +226,7 @@ const templates = { tsConfig.compilerOptions.lib?.push('dom'); } if (options.hasConformance) { - tsConfig.exclude.unshift('./src/common/**'); + tsConfig.exclude.unshift('./src/testing/**'); } if (options.js) { tsConfig.include = globsToJs(tsConfig.include); diff --git a/tools/utils.ts b/tools/utils.ts index 51d29b001c248..d0da4b132cb8f 100644 --- a/tools/utils.ts +++ b/tools/utils.ts @@ -95,7 +95,7 @@ export function getProjectConfig(tree: Tree, options: { packageName: string }) { cypress: joinPathFragments(projectConfig.root, 'tsconfig.cy.json'), }, sourceRoot: joinPathFragments(projectConfig.root, 'src'), - conformanceSetup: joinPathFragments(projectConfig.root, 'src', 'common', 'isConformant.ts'), + conformanceSetup: joinPathFragments(projectConfig.root, 'src', 'testing', 'isConformant.ts'), babelConfig: joinPathFragments(projectConfig.root, '.babelrc.json'), jestConfig: joinPathFragments(projectConfig.root, 'jest.config.js'), jestSetupFile: joinPathFragments(projectConfig.root, 'config', 'tests.js'), From 2ba123cd3318d27f6586b126bbc0b0b6ff402faf Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 10:37:28 -0700 Subject: [PATCH 25/46] fix bug in moveDocsSubfolder --- tools/generators/migrate-converged-pkg/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index 4710230af37d3..1da51e00aa380 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -783,13 +783,14 @@ function migrateCommonFolderToTesting(tree: Tree, options: NormalizedSchema) { function moveDocsToSubfolder(tree: Tree, options: NormalizedSchema) { const root = options.projectConfig.root; + visitNotIgnoredFiles(tree, root, treePath => { const currPath = treePath.toLowerCase(); if (currPath.includes('.md') && (currPath.includes('spec') || currPath.includes('migration'))) { const fileName = path.basename(treePath); const newPath = joinPathFragments(root, 'docs', fileName); - tree.rename(treePath, newPath); + !tree.exists(newPath) && tree.rename(treePath, newPath); } }); } From 3c016a1f9f0bdd083bcfda16c143f71b1f163e8d Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 10:57:34 -0700 Subject: [PATCH 26/46] fix tests to replace instances of common/ with testing/ --- tools/generators/migrate-converged-pkg/index.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/generators/migrate-converged-pkg/index.spec.ts b/tools/generators/migrate-converged-pkg/index.spec.ts index 046b0961d3498..74611b4f45694 100644 --- a/tools/generators/migrate-converged-pkg/index.spec.ts +++ b/tools/generators/migrate-converged-pkg/index.spec.ts @@ -277,7 +277,7 @@ describe('migrate-converged-pkg generator', () => { lib: ['ES2019', 'dom'], types: ['static-assets', 'environment'], }, - exclude: ['./src/common/**', '**/*.spec.ts', '**/*.spec.tsx', '**/*.test.ts', '**/*.test.tsx'], + exclude: ['./src/testing/**', '**/*.spec.ts', '**/*.spec.tsx', '**/*.test.ts', '**/*.test.tsx'], include: ['./src/**/*.ts', './src/**/*.tsx'], }); expect(tsConfigTest).toEqual({ @@ -633,7 +633,7 @@ describe('migrate-converged-pkg generator', () => { // artificially add stories globs to exclude writeJson(tree, paths.tsconfig.lib, { compilerOptions: {}, - exclude: ['../src/common/**', '**/*.test.ts', '**/*.test.tsx', '**/*.stories.ts', '**/*.stories.tsx'], + exclude: ['../src/testing/**', '**/*.test.ts', '**/*.test.tsx', '**/*.stories.ts', '**/*.stories.tsx'], }); // artificially create spec ts config writeJson(tree, paths.tsconfig.test, { @@ -1400,7 +1400,7 @@ function setupDummyPackage( function addConformanceSetup(tree: Tree, projectConfig: ReadProjectConfiguration) { // this is needed to stop TS parsing static imports and evaluating them in nx dep graph tree as true dependency - https://github.com/nrwl/nx/issues/8938 const template = fs.readFileSync(path.join(__dirname, '__fixtures__', 'conformance-setup.ts__tmpl__'), 'utf-8'); - tree.write(`${projectConfig.root}/src/common/isConformant.ts`, stripIndents`${template}`); + tree.write(`${projectConfig.root}/src/testing/isConformant.ts`, stripIndents`${template}`); } function addUnstableSetup(tree: Tree, projectConfig: ReadProjectConfiguration) { From 73e09d06455e5dcf2e539438d4c2d9c9ed8ea0f7 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 11:19:59 -0700 Subject: [PATCH 27/46] Include new testing/ in tsconfig.spec.json & exclude cypress test files from tsconfig.lib.json --- tools/generators/migrate-converged-pkg/index.spec.ts | 12 +++++++++++- tools/generators/migrate-converged-pkg/index.ts | 12 ++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/tools/generators/migrate-converged-pkg/index.spec.ts b/tools/generators/migrate-converged-pkg/index.spec.ts index 74611b4f45694..e90b6078961c2 100644 --- a/tools/generators/migrate-converged-pkg/index.spec.ts +++ b/tools/generators/migrate-converged-pkg/index.spec.ts @@ -287,7 +287,15 @@ describe('migrate-converged-pkg generator', () => { outDir: 'dist', types: ['jest', 'node'], }, - include: ['**/*.spec.ts', '**/*.spec.tsx', '**/*.test.ts', '**/*.test.tsx', '**/*.d.ts'], + include: [ + '**/*.spec.ts', + '**/*.spec.tsx', + '**/*.test.ts', + '**/*.test.tsx', + '**/*.d.ts', + './src/testing/**/*.ts', + './src/testing/**/*.tsx', + ], }); }); @@ -323,6 +331,8 @@ describe('migrate-converged-pkg generator', () => { '**/*.test.js', '**/*.test.jsx', '**/*.d.ts', + './src/testing/**/*.js', + './src/testing/**/*.jsx', ]); }); diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index 1da51e00aa380..d46e2e385d732 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -243,7 +243,15 @@ const templates = { outDir: 'dist', types: ['jest', 'node'], } as TsConfig['compilerOptions'], - include: ['**/*.spec.ts', '**/*.spec.tsx', '**/*.test.ts', '**/*.test.tsx', '**/*.d.ts'], + include: [ + '**/*.spec.ts', + '**/*.spec.tsx', + '**/*.test.ts', + '**/*.test.tsx', + '**/*.d.ts', + './src/testing/**/*.ts', + './src/testing/**/*.tsx', + ], }; if (options.js) { @@ -588,7 +596,7 @@ function setupStorybook(tree: Tree, options: NormalizedSchema) { const template = { projectReferences: { path: './.storybook/tsconfig.json' }, - exclude: ['**/*.stories.ts', '**/*.stories.tsx'], + exclude: ['**/*.stories.ts', '**/*.stories.tsx', '**/*.cy.ts', '**/*.cy.tsx'], }; const js = isJs(tree, options); From 297d34b23713fd54f51d7ad8cdb288ce87357e1a Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 12:35:55 -0700 Subject: [PATCH 28/46] ensure that after each file in common/ is moved, files that import that file have their relative import paths updated --- tools/generators/migrate-converged-pkg/index.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index d46e2e385d732..6251d8aa9ded3 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -776,16 +776,15 @@ function migrateCommonFolderToTesting(tree: Tree, options: NormalizedSchema) { const fileName = path.basename(treePath); const newPath = joinPathFragments(sourceRoot, 'testing', fileName); tree.rename(treePath, newPath); - }); - - // Update any imports to reflect file location change from common/ to testing/ - visitNotIgnoredFiles(tree, joinPathFragments(sourceRoot, 'components'), treePath => { - const fileContent = tree.read(treePath)?.toString('utf-8'); - if (fileContent && fileContent.includes('common/')) { - const newContent = fileContent.replace('common/', 'testing/'); - tree.write(treePath, newContent); - } + // Update files that import moved file to reflect file location change from common/ to testing/ + visitNotIgnoredFiles(tree, joinPathFragments(sourceRoot, 'components'), () => { + const fileContent = tree.read(treePath)?.toString('utf-8'); + if (fileContent && fileContent.includes('common/')) { + const newContent = fileContent.replace('common/', 'testing/'); + tree.write(treePath, newContent); + } + }); }); } From ed373602f80cc5743d5234650ebfcc15c7720e47 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 12:49:00 -0700 Subject: [PATCH 29/46] perform common folder migration before running tsconfig updates --- tools/generators/migrate-converged-pkg/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index 6251d8aa9ded3..58801c4e946d6 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -116,6 +116,8 @@ function runMigrationOnProject(tree: Tree, schema: AssertedSchema, _userLog: Use ); return; } + // Perform common folder migration first then update TsConfig files accordingly afterwards. + migrateCommonFolderToTesting(tree, options); // 1. update TsConfigs const { configs } = updatedLocalTsConfig(tree, options); @@ -141,7 +143,6 @@ function runMigrationOnProject(tree: Tree, schema: AssertedSchema, _userLog: Use updateNxWorkspace(tree, options); moveDocsToSubfolder(tree, options); - migrateCommonFolderToTesting(tree, options); } // ==== helpers ==== From 7133bc381f6db028108223783f425c9685b39f9d Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 12:57:30 -0700 Subject: [PATCH 30/46] fix: migrateCommonFolderToTesting now uses correct treepath when updating file imports --- tools/generators/migrate-converged-pkg/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index 58801c4e946d6..cff28a5d059d5 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -779,11 +779,11 @@ function migrateCommonFolderToTesting(tree: Tree, options: NormalizedSchema) { tree.rename(treePath, newPath); // Update files that import moved file to reflect file location change from common/ to testing/ - visitNotIgnoredFiles(tree, joinPathFragments(sourceRoot, 'components'), () => { - const fileContent = tree.read(treePath)?.toString('utf-8'); + visitNotIgnoredFiles(tree, joinPathFragments(sourceRoot, 'components'), nestedTreePath => { + const fileContent = tree.read(nestedTreePath)?.toString('utf-8'); if (fileContent && fileContent.includes('common/')) { const newContent = fileContent.replace('common/', 'testing/'); - tree.write(treePath, newContent); + tree.write(nestedTreePath, newContent); } }); }); From c047234058cecd1065da1263221e45c39a13c223 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 13:02:15 -0700 Subject: [PATCH 31/46] migrate menu --- packages/react-components/react-menu/.npmignore | 5 +++-- .../react-components/react-menu/.storybook/main.js | 2 +- .../react-menu/.storybook/tsconfig.json | 2 +- .../react-components/react-menu/{ => docs}/Spec.md | 0 .../Menu.e2e.tsx => src/components/Menu/Menu.cy.tsx} | 2 +- .../react-menu/src/components/Menu/Menu.test.tsx | 2 +- .../src/components/MenuDivider/MenuDivider.test.tsx | 2 +- .../src/components/MenuGroup/MenuGroup.test.tsx | 2 +- .../MenuGroupHeader/MenuGroupHeader.test.tsx | 2 +- .../src/components/MenuItem/MenuItem.test.tsx | 4 ++-- .../MenuItemCheckbox/MenuItemCheckbox.test.tsx | 4 ++-- .../components/MenuItemRadio/MenuItemRadio.test.tsx | 2 +- .../components/MenuList/MenuList.cy.tsx} | 2 +- .../src/components/MenuList/MenuList.test.tsx | 2 +- .../src/components/MenuPopover/MenuPopover.test.tsx | 2 +- .../components/MenuSplitGroup/MenuSplitGroup.test.tsx | 2 +- .../src/components/MenuTrigger/MenuTrigger.test.tsx | 4 ++-- .../react-menu/src/{common => testing}/isConformant.ts | 0 .../src/{common => testing}/mockUseMenuContext.ts | 0 .../react-menu/{e2e => src/testing}/selectors.ts | 0 .../stories/Menu/MenuAligningWithIcons.stories.tsx | 0 .../Menu/MenuAligningWithSelectableItems.stories.tsx | 0 .../stories/Menu/MenuAnchorToTarget.stories.tsx | 0 .../{src => }/stories/Menu/MenuBestPractices.md | 0 .../stories/Menu/MenuCheckboxItems.stories.tsx | 0 .../Menu/MenuControlledCheckboxItems.stories.tsx | 0 .../stories/Menu/MenuControlledRadioItems.stories.tsx | 0 .../Menu/MenuControllingOpenAndClose.stories.tsx | 0 .../stories/Menu/MenuCustomTrigger.stories.tsx | 0 .../{src => }/stories/Menu/MenuDefault.stories.tsx | 0 .../{src => }/stories/Menu/MenuDescription.md | 0 .../stories/Menu/MenuGroupingItems.stories.tsx | 0 .../{src => }/stories/Menu/MenuInteraction.stories.tsx | 0 .../stories/Menu/MenuMemoizedMenuItems.stories.tsx | 0 .../stories/Menu/MenuMenuItemsWithIcons.stories.tsx | 0 .../stories/Menu/MenuNestedSubmenus.stories.tsx | 0 .../Menu/MenuNestedSubmenusControlled.stories.tsx | 0 .../{src => }/stories/Menu/MenuRadioItems.stories.tsx | 0 .../stories/Menu/MenuRenderFunctionTrigger.stories.tsx | 0 .../Menu/MenuSecondaryContentForMenuItems.stories.tsx | 0 .../stories/Menu/MenuSelectionGroup.stories.tsx | 0 .../stories/Menu/MenuSplitMenuItem.stories.tsx | 0 .../stories/Menu/MenuTriggerWithTooltip.stories.tsx | 0 .../stories/Menu/MenuVisualDividerOnly.stories.tsx | 0 .../{src => }/stories/Menu/index.stories.tsx | 0 .../stories/MenuList/MenuListDefault.stories.tsx | 0 .../{src => }/stories/MenuList/MenuListDescription.md | 0 .../MenuList/MenuListNestedSubmenus.stories.tsx | 0 .../{src => }/stories/MenuList/index.stories.tsx | 0 .../react-menu/{e2e/tsconfig.json => tsconfig.cy.json} | 4 ++-- packages/react-components/react-menu/tsconfig.json | 2 +- packages/react-components/react-menu/tsconfig.lib.json | 6 ++++-- .../react-components/react-menu/tsconfig.spec.json | 10 +++++++++- 53 files changed, 37 insertions(+), 26 deletions(-) rename packages/react-components/react-menu/{ => docs}/Spec.md (100%) rename packages/react-components/react-menu/{e2e/Menu.e2e.tsx => src/components/Menu/Menu.cy.tsx} (99%) rename packages/react-components/react-menu/{e2e/MenuList.e2e.tsx => src/components/MenuList/MenuList.cy.tsx} (98%) rename packages/react-components/react-menu/src/{common => testing}/isConformant.ts (100%) rename packages/react-components/react-menu/src/{common => testing}/mockUseMenuContext.ts (100%) rename packages/react-components/react-menu/{e2e => src/testing}/selectors.ts (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuAligningWithIcons.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuAligningWithSelectableItems.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuAnchorToTarget.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuBestPractices.md (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuCheckboxItems.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuControlledCheckboxItems.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuControlledRadioItems.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuControllingOpenAndClose.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuCustomTrigger.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuDefault.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuDescription.md (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuGroupingItems.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuInteraction.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuMemoizedMenuItems.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuMenuItemsWithIcons.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuNestedSubmenus.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuNestedSubmenusControlled.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuRadioItems.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuRenderFunctionTrigger.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuSecondaryContentForMenuItems.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuSelectionGroup.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuSplitMenuItem.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuTriggerWithTooltip.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/MenuVisualDividerOnly.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/Menu/index.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/MenuList/MenuListDefault.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/MenuList/MenuListDescription.md (100%) rename packages/react-components/react-menu/{src => }/stories/MenuList/MenuListNestedSubmenus.stories.tsx (100%) rename packages/react-components/react-menu/{src => }/stories/MenuList/index.stories.tsx (100%) rename packages/react-components/react-menu/{e2e/tsconfig.json => tsconfig.cy.json} (70%) diff --git a/packages/react-components/react-menu/.npmignore b/packages/react-components/react-menu/.npmignore index 52d2a7273a151..f7ce568a6dbf7 100644 --- a/packages/react-components/react-menu/.npmignore +++ b/packages/react-components/react-menu/.npmignore @@ -3,10 +3,11 @@ bundle-size/ config/ coverage/ -e2e/ +docs/ etc/ node_modules/ src/ +stories/ dist/types/ temp/ __fixtures__ @@ -16,7 +17,7 @@ __tests__ *.api.json *.log *.spec.* -*.stories.* +*.cy.* *.test.* *.yml diff --git a/packages/react-components/react-menu/.storybook/main.js b/packages/react-components/react-menu/.storybook/main.js index f57cfd09509e7..26536b61b387f 100644 --- a/packages/react-components/react-menu/.storybook/main.js +++ b/packages/react-components/react-menu/.storybook/main.js @@ -2,7 +2,7 @@ const rootMain = require('../../../../.storybook/main'); module.exports = /** @type {Omit} */ ({ ...rootMain, - stories: [...rootMain.stories, '../src/**/*.stories.mdx', '../src/**/index.stories.@(ts|tsx)'], + stories: [...rootMain.stories, '../stories/**/*.stories.mdx', '../stories/**/index.stories.@(ts|tsx)'], addons: [...rootMain.addons], webpackFinal: (config, options) => { const localConfig = { ...rootMain.webpackFinal(config, options) }; diff --git a/packages/react-components/react-menu/.storybook/tsconfig.json b/packages/react-components/react-menu/.storybook/tsconfig.json index f9f60e1234ed4..ea89218a3d916 100644 --- a/packages/react-components/react-menu/.storybook/tsconfig.json +++ b/packages/react-components/react-menu/.storybook/tsconfig.json @@ -6,5 +6,5 @@ "checkJs": true, "types": ["static-assets", "environment", "storybook__addons"] }, - "include": ["../src/**/*.stories.ts", "../src/**/*.stories.tsx", "*.js"] + "include": ["../stories/**/*.stories.ts", "../stories/**/*.stories.tsx", "*.js"] } diff --git a/packages/react-components/react-menu/Spec.md b/packages/react-components/react-menu/docs/Spec.md similarity index 100% rename from packages/react-components/react-menu/Spec.md rename to packages/react-components/react-menu/docs/Spec.md diff --git a/packages/react-components/react-menu/e2e/Menu.e2e.tsx b/packages/react-components/react-menu/src/components/Menu/Menu.cy.tsx similarity index 99% rename from packages/react-components/react-menu/e2e/Menu.e2e.tsx rename to packages/react-components/react-menu/src/components/Menu/Menu.cy.tsx index f8ead57d4a120..482b54ac95b2c 100644 --- a/packages/react-components/react-menu/e2e/Menu.e2e.tsx +++ b/packages/react-components/react-menu/src/components/Menu/Menu.cy.tsx @@ -10,7 +10,7 @@ import { menuTriggerSelector, menuItemSelector, menuSelector, -} from './selectors'; +} from '../../testing/selectors'; import { Menu, diff --git a/packages/react-components/react-menu/src/components/Menu/Menu.test.tsx b/packages/react-components/react-menu/src/components/Menu/Menu.test.tsx index d8ab685555567..69b2051a2e1cf 100644 --- a/packages/react-components/react-menu/src/components/Menu/Menu.test.tsx +++ b/packages/react-components/react-menu/src/components/Menu/Menu.test.tsx @@ -2,7 +2,7 @@ import { resetIdsForTests } from '@fluentui/react-utilities'; import * as React from 'react'; import { Menu } from './Menu'; import { render, fireEvent } from '@testing-library/react'; -import { isConformant } from '../../common/isConformant'; +import { isConformant } from '../../testing/isConformant'; import { MenuTrigger } from '../MenuTrigger/index'; import { MenuList } from '../MenuList/index'; import { MenuItem } from '../MenuItem/index'; diff --git a/packages/react-components/react-menu/src/components/MenuDivider/MenuDivider.test.tsx b/packages/react-components/react-menu/src/components/MenuDivider/MenuDivider.test.tsx index e40b7d1b66130..6e4453e317f77 100644 --- a/packages/react-components/react-menu/src/components/MenuDivider/MenuDivider.test.tsx +++ b/packages/react-components/react-menu/src/components/MenuDivider/MenuDivider.test.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { MenuDivider } from './MenuDivider'; import * as renderer from 'react-test-renderer'; -import { isConformant } from '../../common/isConformant'; +import { isConformant } from '../../testing/isConformant'; describe('MenuDivider', () => { isConformant({ diff --git a/packages/react-components/react-menu/src/components/MenuGroup/MenuGroup.test.tsx b/packages/react-components/react-menu/src/components/MenuGroup/MenuGroup.test.tsx index bdba2f975b5bf..85bdb562393f9 100644 --- a/packages/react-components/react-menu/src/components/MenuGroup/MenuGroup.test.tsx +++ b/packages/react-components/react-menu/src/components/MenuGroup/MenuGroup.test.tsx @@ -3,7 +3,7 @@ import * as React from 'react'; import { MenuGroup } from './MenuGroup'; import * as renderer from 'react-test-renderer'; import { render } from '@testing-library/react'; -import { isConformant } from '../../common/isConformant'; +import { isConformant } from '../../testing/isConformant'; describe('MenuGroup', () => { isConformant({ diff --git a/packages/react-components/react-menu/src/components/MenuGroupHeader/MenuGroupHeader.test.tsx b/packages/react-components/react-menu/src/components/MenuGroupHeader/MenuGroupHeader.test.tsx index 71d3562f1fc1f..0e35a4f1f9d45 100644 --- a/packages/react-components/react-menu/src/components/MenuGroupHeader/MenuGroupHeader.test.tsx +++ b/packages/react-components/react-menu/src/components/MenuGroupHeader/MenuGroupHeader.test.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { MenuGroupHeader } from './MenuGroupHeader'; import * as renderer from 'react-test-renderer'; import { render } from '@testing-library/react'; -import { isConformant } from '../../common/isConformant'; +import { isConformant } from '../../testing/isConformant'; import { MenuGroupContextProvider } from '../../contexts/menuGroupContext'; describe('MenuGroupHeader', () => { diff --git a/packages/react-components/react-menu/src/components/MenuItem/MenuItem.test.tsx b/packages/react-components/react-menu/src/components/MenuItem/MenuItem.test.tsx index a2ab4a3978949..ef83b9809f677 100644 --- a/packages/react-components/react-menu/src/components/MenuItem/MenuItem.test.tsx +++ b/packages/react-components/react-menu/src/components/MenuItem/MenuItem.test.tsx @@ -3,10 +3,10 @@ import { render, fireEvent, createEvent } from '@testing-library/react'; import { Enter, Space } from '@fluentui/keyboard-keys'; import { MenuItem } from './MenuItem'; import * as renderer from 'react-test-renderer'; -import { isConformant } from '../../common/isConformant'; +import { isConformant } from '../../testing/isConformant'; import { MenuTriggerContextProvider } from '../../contexts/menuTriggerContext'; import { MenuListProvider } from '../../contexts/menuListContext'; -import { mockUseMenuContext } from '../../common/mockUseMenuContext'; +import { mockUseMenuContext } from '../../testing/mockUseMenuContext'; import type { MenuItemProps } from './MenuItem.types'; jest.mock('../../contexts/menuContext'); diff --git a/packages/react-components/react-menu/src/components/MenuItemCheckbox/MenuItemCheckbox.test.tsx b/packages/react-components/react-menu/src/components/MenuItemCheckbox/MenuItemCheckbox.test.tsx index 9d74e3676875a..e8f8dd8be52ed 100644 --- a/packages/react-components/react-menu/src/components/MenuItemCheckbox/MenuItemCheckbox.test.tsx +++ b/packages/react-components/react-menu/src/components/MenuItemCheckbox/MenuItemCheckbox.test.tsx @@ -2,10 +2,10 @@ import * as React from 'react'; import * as renderer from 'react-test-renderer'; import { Enter, Space } from '@fluentui/keyboard-keys'; import { render, fireEvent } from '@testing-library/react'; -import { isConformant } from '../../common/isConformant'; +import { isConformant } from '../../testing/isConformant'; import { MenuItemCheckbox } from './MenuItemCheckbox'; import { MenuListProvider } from '../../contexts/menuListContext'; -import { mockUseMenuContext } from '../../common/mockUseMenuContext'; +import { mockUseMenuContext } from '../../testing/mockUseMenuContext'; import type { MenuListContextValue } from '../../contexts/menuListContext'; import type { MenuItemCheckboxProps } from './MenuItemCheckbox.types'; diff --git a/packages/react-components/react-menu/src/components/MenuItemRadio/MenuItemRadio.test.tsx b/packages/react-components/react-menu/src/components/MenuItemRadio/MenuItemRadio.test.tsx index 99c06620852fc..6f506aa5e487b 100644 --- a/packages/react-components/react-menu/src/components/MenuItemRadio/MenuItemRadio.test.tsx +++ b/packages/react-components/react-menu/src/components/MenuItemRadio/MenuItemRadio.test.tsx @@ -3,7 +3,7 @@ import * as renderer from 'react-test-renderer'; import { Enter, Space } from '@fluentui/keyboard-keys'; import { render, fireEvent } from '@testing-library/react'; import { MenuItemRadio } from './MenuItemRadio'; -import { isConformant } from '../../common/isConformant'; +import { isConformant } from '../../testing/isConformant'; import { MenuListProvider } from '../../contexts/menuListContext'; import type { MenuListContextValue } from '../../contexts/menuListContext'; import type { MenuItemRadioProps } from './MenuItemRadio.types'; diff --git a/packages/react-components/react-menu/e2e/MenuList.e2e.tsx b/packages/react-components/react-menu/src/components/MenuList/MenuList.cy.tsx similarity index 98% rename from packages/react-components/react-menu/e2e/MenuList.e2e.tsx rename to packages/react-components/react-menu/src/components/MenuList/MenuList.cy.tsx index bbd4bb22ea846..901dff93e101f 100644 --- a/packages/react-components/react-menu/e2e/MenuList.e2e.tsx +++ b/packages/react-components/react-menu/src/components/MenuList/MenuList.cy.tsx @@ -4,7 +4,7 @@ import { mount as mountBase } from '@cypress/react'; import { FluentProvider } from '@fluentui/react-provider'; import { teamsLightTheme } from '@fluentui/react-theme'; -import { menuTriggerSelector, menuItemSelector, menuSelector } from './selectors'; +import { menuTriggerSelector, menuItemSelector, menuSelector } from '../../testing/selectors'; import { MenuList, MenuItem, Menu, MenuTrigger, MenuPopover } from '@fluentui/react-menu'; const mount = (element: JSX.Element) => { diff --git a/packages/react-components/react-menu/src/components/MenuList/MenuList.test.tsx b/packages/react-components/react-menu/src/components/MenuList/MenuList.test.tsx index ae15108fc7eef..f0042809ed799 100644 --- a/packages/react-components/react-menu/src/components/MenuList/MenuList.test.tsx +++ b/packages/react-components/react-menu/src/components/MenuList/MenuList.test.tsx @@ -3,7 +3,7 @@ import { MenuList } from './MenuList'; import * as renderer from 'react-test-renderer'; import { render } from '@testing-library/react'; import { useHasParentContext } from '@fluentui/react-context-selector'; -import { isConformant } from '../../common/isConformant'; +import { isConformant } from '../../testing/isConformant'; import { MenuListContext } from '../../contexts/menuListContext'; describe('MenuList', () => { diff --git a/packages/react-components/react-menu/src/components/MenuPopover/MenuPopover.test.tsx b/packages/react-components/react-menu/src/components/MenuPopover/MenuPopover.test.tsx index e0b6725bd8d1a..e05988bb9f436 100644 --- a/packages/react-components/react-menu/src/components/MenuPopover/MenuPopover.test.tsx +++ b/packages/react-components/react-menu/src/components/MenuPopover/MenuPopover.test.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { fireEvent, render } from '@testing-library/react'; import { MenuPopover } from './MenuPopover'; -import { isConformant } from '../../common/isConformant'; +import { isConformant } from '../../testing/isConformant'; import { MenuPopoverProps } from './MenuPopover.types'; describe('MenuPopover', () => { diff --git a/packages/react-components/react-menu/src/components/MenuSplitGroup/MenuSplitGroup.test.tsx b/packages/react-components/react-menu/src/components/MenuSplitGroup/MenuSplitGroup.test.tsx index 9693beab12855..d7613d2037cf2 100644 --- a/packages/react-components/react-menu/src/components/MenuSplitGroup/MenuSplitGroup.test.tsx +++ b/packages/react-components/react-menu/src/components/MenuSplitGroup/MenuSplitGroup.test.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { render } from '@testing-library/react'; import { MenuSplitGroup } from './MenuSplitGroup'; -import { isConformant } from '../../common/isConformant'; +import { isConformant } from '../../testing/isConformant'; describe('MenuSplitGroup', () => { isConformant({ diff --git a/packages/react-components/react-menu/src/components/MenuTrigger/MenuTrigger.test.tsx b/packages/react-components/react-menu/src/components/MenuTrigger/MenuTrigger.test.tsx index efcef32cefea6..b042964a5e92a 100644 --- a/packages/react-components/react-menu/src/components/MenuTrigger/MenuTrigger.test.tsx +++ b/packages/react-components/react-menu/src/components/MenuTrigger/MenuTrigger.test.tsx @@ -2,8 +2,8 @@ import * as React from 'react'; import { MenuTrigger } from './MenuTrigger'; import * as renderer from 'react-test-renderer'; import { createEvent, fireEvent, render } from '@testing-library/react'; -import { isConformant } from '../../common/isConformant'; -import { mockUseMenuContext } from '../../common/mockUseMenuContext'; +import { isConformant } from '../../testing/isConformant'; +import { mockUseMenuContext } from '../../testing/mockUseMenuContext'; import { useMenuTriggerContext_unstable } from '../../contexts/menuTriggerContext'; import { Enter } from '@fluentui/keyboard-keys'; diff --git a/packages/react-components/react-menu/src/common/isConformant.ts b/packages/react-components/react-menu/src/testing/isConformant.ts similarity index 100% rename from packages/react-components/react-menu/src/common/isConformant.ts rename to packages/react-components/react-menu/src/testing/isConformant.ts diff --git a/packages/react-components/react-menu/src/common/mockUseMenuContext.ts b/packages/react-components/react-menu/src/testing/mockUseMenuContext.ts similarity index 100% rename from packages/react-components/react-menu/src/common/mockUseMenuContext.ts rename to packages/react-components/react-menu/src/testing/mockUseMenuContext.ts diff --git a/packages/react-components/react-menu/e2e/selectors.ts b/packages/react-components/react-menu/src/testing/selectors.ts similarity index 100% rename from packages/react-components/react-menu/e2e/selectors.ts rename to packages/react-components/react-menu/src/testing/selectors.ts diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuAligningWithIcons.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuAligningWithIcons.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuAligningWithIcons.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuAligningWithIcons.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuAligningWithSelectableItems.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuAligningWithSelectableItems.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuAligningWithSelectableItems.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuAligningWithSelectableItems.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuAnchorToTarget.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuAnchorToTarget.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuAnchorToTarget.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuAnchorToTarget.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuBestPractices.md b/packages/react-components/react-menu/stories/Menu/MenuBestPractices.md similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuBestPractices.md rename to packages/react-components/react-menu/stories/Menu/MenuBestPractices.md diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuCheckboxItems.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuCheckboxItems.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuCheckboxItems.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuCheckboxItems.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuControlledCheckboxItems.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuControlledCheckboxItems.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuControlledCheckboxItems.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuControlledCheckboxItems.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuControlledRadioItems.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuControlledRadioItems.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuControlledRadioItems.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuControlledRadioItems.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuControllingOpenAndClose.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuControllingOpenAndClose.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuControllingOpenAndClose.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuControllingOpenAndClose.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuCustomTrigger.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuCustomTrigger.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuCustomTrigger.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuCustomTrigger.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuDefault.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuDefault.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuDefault.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuDefault.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuDescription.md b/packages/react-components/react-menu/stories/Menu/MenuDescription.md similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuDescription.md rename to packages/react-components/react-menu/stories/Menu/MenuDescription.md diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuGroupingItems.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuGroupingItems.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuGroupingItems.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuGroupingItems.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuInteraction.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuInteraction.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuInteraction.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuInteraction.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuMemoizedMenuItems.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuMemoizedMenuItems.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuMemoizedMenuItems.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuMemoizedMenuItems.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuMenuItemsWithIcons.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuMenuItemsWithIcons.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuMenuItemsWithIcons.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuMenuItemsWithIcons.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuNestedSubmenus.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuNestedSubmenus.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuNestedSubmenus.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuNestedSubmenus.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuNestedSubmenusControlled.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuNestedSubmenusControlled.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuNestedSubmenusControlled.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuNestedSubmenusControlled.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuRadioItems.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuRadioItems.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuRadioItems.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuRadioItems.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuRenderFunctionTrigger.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuRenderFunctionTrigger.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuRenderFunctionTrigger.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuRenderFunctionTrigger.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuSecondaryContentForMenuItems.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuSecondaryContentForMenuItems.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuSecondaryContentForMenuItems.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuSecondaryContentForMenuItems.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuSelectionGroup.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuSelectionGroup.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuSelectionGroup.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuSelectionGroup.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuSplitMenuItem.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuSplitMenuItem.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuSplitMenuItem.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuSplitMenuItem.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuTriggerWithTooltip.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuTriggerWithTooltip.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuTriggerWithTooltip.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuTriggerWithTooltip.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/MenuVisualDividerOnly.stories.tsx b/packages/react-components/react-menu/stories/Menu/MenuVisualDividerOnly.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/MenuVisualDividerOnly.stories.tsx rename to packages/react-components/react-menu/stories/Menu/MenuVisualDividerOnly.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/Menu/index.stories.tsx b/packages/react-components/react-menu/stories/Menu/index.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/Menu/index.stories.tsx rename to packages/react-components/react-menu/stories/Menu/index.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/MenuList/MenuListDefault.stories.tsx b/packages/react-components/react-menu/stories/MenuList/MenuListDefault.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/MenuList/MenuListDefault.stories.tsx rename to packages/react-components/react-menu/stories/MenuList/MenuListDefault.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/MenuList/MenuListDescription.md b/packages/react-components/react-menu/stories/MenuList/MenuListDescription.md similarity index 100% rename from packages/react-components/react-menu/src/stories/MenuList/MenuListDescription.md rename to packages/react-components/react-menu/stories/MenuList/MenuListDescription.md diff --git a/packages/react-components/react-menu/src/stories/MenuList/MenuListNestedSubmenus.stories.tsx b/packages/react-components/react-menu/stories/MenuList/MenuListNestedSubmenus.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/MenuList/MenuListNestedSubmenus.stories.tsx rename to packages/react-components/react-menu/stories/MenuList/MenuListNestedSubmenus.stories.tsx diff --git a/packages/react-components/react-menu/src/stories/MenuList/index.stories.tsx b/packages/react-components/react-menu/stories/MenuList/index.stories.tsx similarity index 100% rename from packages/react-components/react-menu/src/stories/MenuList/index.stories.tsx rename to packages/react-components/react-menu/stories/MenuList/index.stories.tsx diff --git a/packages/react-components/react-menu/e2e/tsconfig.json b/packages/react-components/react-menu/tsconfig.cy.json similarity index 70% rename from packages/react-components/react-menu/e2e/tsconfig.json rename to packages/react-components/react-menu/tsconfig.cy.json index f6b23b30d510b..93a140885851d 100644 --- a/packages/react-components/react-menu/e2e/tsconfig.json +++ b/packages/react-components/react-menu/tsconfig.cy.json @@ -1,9 +1,9 @@ { - "extends": "../tsconfig.json", + "extends": "./tsconfig.json", "compilerOptions": { "isolatedModules": false, "types": ["node", "cypress", "cypress-storybook/cypress", "cypress-real-events"], "lib": ["ES2019", "dom"] }, - "include": ["**/*.ts", "**/*.tsx"] + "include": ["**/*.cy.ts", "**/*.cy.tsx"] } diff --git a/packages/react-components/react-menu/tsconfig.json b/packages/react-components/react-menu/tsconfig.json index 9087bac77cc8d..1317f81620ca5 100644 --- a/packages/react-components/react-menu/tsconfig.json +++ b/packages/react-components/react-menu/tsconfig.json @@ -22,7 +22,7 @@ "path": "./.storybook/tsconfig.json" }, { - "path": "./e2e/tsconfig.json" + "path": "./tsconfig.cy.json" } ] } diff --git a/packages/react-components/react-menu/tsconfig.lib.json b/packages/react-components/react-menu/tsconfig.lib.json index 7f94e04299ed8..e17f808c03933 100644 --- a/packages/react-components/react-menu/tsconfig.lib.json +++ b/packages/react-components/react-menu/tsconfig.lib.json @@ -10,13 +10,15 @@ "types": ["static-assets", "environment"] }, "exclude": [ - "./src/common/**", + "./src/testing/**", "**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.stories.ts", - "**/*.stories.tsx" + "**/*.stories.tsx", + "**/*.cy.ts", + "**/*.cy.tsx" ], "include": ["./src/**/*.ts", "./src/**/*.tsx"] } diff --git a/packages/react-components/react-menu/tsconfig.spec.json b/packages/react-components/react-menu/tsconfig.spec.json index 11f8254e711f4..0e881941843de 100644 --- a/packages/react-components/react-menu/tsconfig.spec.json +++ b/packages/react-components/react-menu/tsconfig.spec.json @@ -5,5 +5,13 @@ "outDir": "dist", "types": ["jest", "node", "@testing-library/jest-dom"] }, - "include": ["**/*.spec.ts", "**/*.spec.tsx", "**/*.test.ts", "**/*.test.tsx", "**/*.d.ts"] + "include": [ + "**/*.spec.ts", + "**/*.spec.tsx", + "**/*.test.ts", + "**/*.test.tsx", + "**/*.d.ts", + "./src/testing/**/*.ts", + "./src/testing/**/*.tsx" + ] } From 5181c0f112cbef4db54b1fadd745585e877c2e53 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 13:06:38 -0700 Subject: [PATCH 32/46] Change file --- ...ui-react-menu-a2019e67-ddb5-4084-ab5c-661c427cdc9c.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 change/@fluentui-react-menu-a2019e67-ddb5-4084-ab5c-661c427cdc9c.json diff --git a/change/@fluentui-react-menu-a2019e67-ddb5-4084-ab5c-661c427cdc9c.json b/change/@fluentui-react-menu-a2019e67-ddb5-4084-ab5c-661c427cdc9c.json new file mode 100644 index 0000000000000..18a518d316632 --- /dev/null +++ b/change/@fluentui-react-menu-a2019e67-ddb5-4084-ab5c-661c427cdc9c.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Migrate menu to new pkg structure", + "packageName": "@fluentui/react-menu", + "email": "tristan.watanabe@gmail.com", + "dependentChangeType": "patch" +} From 71889cf0ffaad4d27dff903f3d8b5194e2d30052 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 14:01:25 -0700 Subject: [PATCH 33/46] disable eslint violations --- .../react-menu/src/components/Menu/Menu.cy.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/react-components/react-menu/src/components/Menu/Menu.cy.tsx b/packages/react-components/react-menu/src/components/Menu/Menu.cy.tsx index 482b54ac95b2c..132a35d837652 100644 --- a/packages/react-components/react-menu/src/components/Menu/Menu.cy.tsx +++ b/packages/react-components/react-menu/src/components/Menu/Menu.cy.tsx @@ -133,6 +133,7 @@ describe('Custom Trigger', () => { }; return ( + // eslint-disable-next-line react/jsx-no-bind @@ -669,6 +670,7 @@ describe(`Nested Menus`, () => { }; return ( + // eslint-disable-next-line react/jsx-no-bind Editor Layout @@ -692,6 +694,7 @@ describe(`Nested Menus`, () => { }; return ( + // eslint-disable-next-line react/jsx-no-bind Appearance @@ -716,6 +719,7 @@ describe(`Nested Menus`, () => { }; return ( + // eslint-disable-next-line react/jsx-no-bind Preferences From 7a5a1dd9a8802619eef1751f497f148ef2e41c3b Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Thu, 29 Sep 2022 15:01:58 -0700 Subject: [PATCH 34/46] add tests for migrateCommonFolderToTesting function --- .../migrate-converged-pkg/index.spec.ts | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/tools/generators/migrate-converged-pkg/index.spec.ts b/tools/generators/migrate-converged-pkg/index.spec.ts index e90b6078961c2..e7419b9f144af 100644 --- a/tools/generators/migrate-converged-pkg/index.spec.ts +++ b/tools/generators/migrate-converged-pkg/index.spec.ts @@ -1260,6 +1260,76 @@ describe('migrate-converged-pkg generator', () => { expect(content).toContain(`packages/react-dummy @org/team-awesome`); }); }); + + describe(`migrateCommonFolderToTesting`, () => { + function setup(config: { projectName: string }) { + const projectConfig = readProjectConfiguration(tree, config.projectName); + const sourceRoot = projectConfig.sourceRoot ?? joinPathFragments(projectConfig.root, 'src'); + const paths = { + packageJson: `${projectConfig.root}/package.json`, + commonFolder: joinPathFragments(sourceRoot, 'common'), + testingFolder: joinPathFragments(sourceRoot, 'testing'), + components: joinPathFragments(sourceRoot, 'components'), + }; + + function createCommonFolderTestSetup() { + tree.write( + `${paths.commonFolder}/isConformant.ts`, + stripIndents` + export const isConformant(){} + `, + ); + tree.write( + `${paths.commonFolder}/mockDummy.ts`, + stripIndents` + export const mockDummy(){} + `, + ); + tree.write( + `${paths.components}/Dummy/Dummy.test.tsx`, + stripIndents` + import { isConformant } from "../../common/isConformant" + import { mockDummy } from "../../common/mockDummy" + `, + ); + + return tree; + } + + return { projectConfig, paths, createCommonFolderTestSetup }; + } + + it(`should move all files from src/common to src/testing`, async () => { + const { paths, createCommonFolderTestSetup } = setup({ projectName: options.name }); + + createCommonFolderTestSetup(); + + expect(tree.exists(joinPathFragments(paths.commonFolder, 'isConformant.ts'))).toBeTruthy(); + expect(tree.exists(joinPathFragments(paths.commonFolder, 'mockDummy.ts'))).toBeTruthy(); + + await generator(tree, options); + + expect(tree.exists(joinPathFragments(paths.commonFolder, 'isConformant.ts'))).toBeFalsy(); + expect(tree.exists(joinPathFragments(paths.commonFolder, 'mockDummy.ts'))).toBeFalsy(); + + expect(tree.exists(joinPathFragments(paths.testingFolder, 'isConformant.ts'))).toBeTruthy(); + expect(tree.exists(joinPathFragments(paths.testingFolder, 'mockDummy.ts'))).toBeTruthy(); + }); + + it(`should update imports of files from common/ to testing/ correctly `, async () => { + const { paths, createCommonFolderTestSetup } = setup({ projectName: options.name }); + + createCommonFolderTestSetup(); + const testFilePath = joinPathFragments(paths.components, 'Dummy', 'Dummy.test.tsx'); + + await generator(tree, options); + + expect(tree.read(testFilePath)?.toString('utf-8')).toMatchInlineSnapshot(` + "import { isConformant } from \\"../../testing/isConformant\\" + import { mockDummy } from \\"../../testing/mockDummy\\"" + `); + }); + }); }); // ==== helpers ==== From eae0266abfb7fb271d1e683eb96cf3ece6409083 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Sat, 1 Oct 2022 02:08:48 -0700 Subject: [PATCH 35/46] nit: dont have stories as constant --- scripts/tasks/eslint-constants.js | 3 --- scripts/tasks/eslint.ts | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/scripts/tasks/eslint-constants.js b/scripts/tasks/eslint-constants.js index 34fc40fe410ab..6e132278f87ee 100644 --- a/scripts/tasks/eslint-constants.js +++ b/scripts/tasks/eslint-constants.js @@ -5,7 +5,4 @@ module.exports = { /** Subdirectory to lint within package (relative path) */ directory: 'src', - - /** Subdirectory to lint stories within a v9 package */ - stories: 'stories', }; diff --git a/scripts/tasks/eslint.ts b/scripts/tasks/eslint.ts index fb82e56850b6f..ef7c1cb96fb4e 100644 --- a/scripts/tasks/eslint.ts +++ b/scripts/tasks/eslint.ts @@ -4,7 +4,7 @@ import * as constants from './eslint-constants'; import * as fs from 'fs'; const files = [path.join(process.cwd(), constants.directory)]; -const storiesPath = path.join(process.cwd(), constants.stories); +const storiesPath = path.join(process.cwd(), 'stories'); if (fs.existsSync(storiesPath)) { files.push(storiesPath); From 21ba09778dcb1ac097d1752f443781ed08beec78 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Sat, 1 Oct 2022 02:25:20 -0700 Subject: [PATCH 36/46] Move cypress file exclusion to setup Cypress and add test --- .../migrate-converged-pkg/index.spec.ts | 2 ++ tools/generators/migrate-converged-pkg/index.ts | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/tools/generators/migrate-converged-pkg/index.spec.ts b/tools/generators/migrate-converged-pkg/index.spec.ts index e7419b9f144af..a5e08a7680ae0 100644 --- a/tools/generators/migrate-converged-pkg/index.spec.ts +++ b/tools/generators/migrate-converged-pkg/index.spec.ts @@ -771,6 +771,7 @@ describe('migrate-converged-pkg generator', () => { // // TS Updates const cypressTsConfig: TsConfig = readJson(tree, paths.tsconfig.cypress); const mainTsConfig: TsConfig = readJson(tree, paths.tsconfig.main); + const libTsConfig: TsConfig = readJson(tree, paths.tsconfig.lib); expect(cypressTsConfig).toEqual({ extends: './tsconfig.json', @@ -782,6 +783,7 @@ describe('migrate-converged-pkg generator', () => { include: ['**/*.cy.ts', '**/*.cy.tsx'], }); expect(mainTsConfig.references).toEqual(expect.arrayContaining([{ path: './tsconfig.cy.json' }])); + expect(libTsConfig.exclude).toEqual(expect.arrayContaining(['**/*.cy.ts', '**/*.cy.tsx'])); // package.json updates const packageJson: PackageJson = readJson(tree, paths.packageJson); diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index cff28a5d059d5..097483885d32c 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -597,7 +597,7 @@ function setupStorybook(tree: Tree, options: NormalizedSchema) { const template = { projectReferences: { path: './.storybook/tsconfig.json' }, - exclude: ['**/*.stories.ts', '**/*.stories.tsx', '**/*.cy.ts', '**/*.cy.tsx'], + exclude: ['**/*.stories.ts', '**/*.stories.tsx'], }; const js = isJs(tree, options); @@ -849,6 +849,10 @@ function shouldSetupStorybook(tree: Tree, options: NormalizedSchema) { } function setupCypress(tree: Tree, options: NormalizedSchema) { + const template = { + exclude: ['**/*.cy.ts', '**/*.cy.tsx'], + }; + if (!shouldSetupCypress(tree, options)) { return tree; } @@ -863,6 +867,15 @@ function setupCypress(tree: Tree, options: NormalizedSchema) { return json; }); + // update lib ts with new exclude globs + updateJson(tree, options.paths.tsconfig.lib, (json: TsConfig) => { + json.exclude = json.exclude || []; + json.exclude.push(...template.exclude); + json.exclude = uniqueArray(json.exclude); + + return json; + }); + updateJson(tree, options.paths.packageJson, (json: PackageJson) => { json.scripts = json.scripts ?? {}; json.scripts.e2e = 'cypress run --component'; From 0c3d328c31f8f858347e76eafa7cb344423ec800 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Sat, 1 Oct 2022 02:28:03 -0700 Subject: [PATCH 37/46] nit: use new tree.read API --- tools/generators/migrate-converged-pkg/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index 097483885d32c..5bbe8c98ae50c 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -698,7 +698,7 @@ function setupStorybook(tree: Tree, options: NormalizedSchema) { }); stories.forEach(storyPath => { - const content = tree.read(storyPath)?.toString('utf-8'); + const content = tree.read(storyPath, 'utf8'); if (!content) { throw new Error('story file has no code'); @@ -740,7 +740,7 @@ function migrateE2ESetupToCypress(tree: Tree, options: NormalizedSchema) { // Move testing helper file to src/testing. tree.rename(treePath, newFilePath); } else if (treePath.includes('.e2e.')) { - const content = tree.read(treePath)?.toString('utf-8'); + const content = tree.read(treePath, 'utf8'); const fileName = path.basename(treePath).replace('e2e', 'cy'); const componentName = fileName.split('.')[0]; const newCypressTestPath = joinPathFragments(options.paths.sourceRoot, 'components', componentName, fileName); @@ -780,7 +780,7 @@ function migrateCommonFolderToTesting(tree: Tree, options: NormalizedSchema) { // Update files that import moved file to reflect file location change from common/ to testing/ visitNotIgnoredFiles(tree, joinPathFragments(sourceRoot, 'components'), nestedTreePath => { - const fileContent = tree.read(nestedTreePath)?.toString('utf-8'); + const fileContent = tree.read(nestedTreePath, 'utf8'); if (fileContent && fileContent.includes('common/')) { const newContent = fileContent.replace('common/', 'testing/'); tree.write(nestedTreePath, newContent); @@ -950,7 +950,7 @@ function updateTsGlobalTypes(tree: Tree, options: NormalizedSchema) { // update test TS config updateJson(tree, options.paths.tsconfig.test, (json: TsConfig) => { if (tree.exists(options.paths.jestSetupFile)) { - const jestSetupFile = tree.read(options.paths.jestSetupFile)?.toString('utf-8')!; + const jestSetupFile = tree.read(options.paths.jestSetupFile, 'utf8')!; if (jestSetupFile.includes(`require('@testing-library/jest-dom')`)) { json.compilerOptions.types = json.compilerOptions.types ?? []; From 63d49b8f2d557ce8a13e4d7e312e44d5712efe7a Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Sat, 1 Oct 2022 02:29:29 -0700 Subject: [PATCH 38/46] nit: rename test suite --- tools/generators/migrate-converged-pkg/index.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/generators/migrate-converged-pkg/index.spec.ts b/tools/generators/migrate-converged-pkg/index.spec.ts index a5e08a7680ae0..cb9601fc6ac6a 100644 --- a/tools/generators/migrate-converged-pkg/index.spec.ts +++ b/tools/generators/migrate-converged-pkg/index.spec.ts @@ -1263,7 +1263,7 @@ describe('migrate-converged-pkg generator', () => { }); }); - describe(`migrateCommonFolderToTesting`, () => { + describe(`common folder migration`, () => { function setup(config: { projectName: string }) { const projectConfig = readProjectConfiguration(tree, config.projectName); const sourceRoot = projectConfig.sourceRoot ?? joinPathFragments(projectConfig.root, 'src'); From a290a8f17425cd9d6767a61b10d30f042d9eb340 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Sat, 1 Oct 2022 02:30:23 -0700 Subject: [PATCH 39/46] nit: add TODOs --- tools/generators/migrate-converged-pkg/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index 5bbe8c98ae50c..950320359c60f 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -723,7 +723,7 @@ function setupStorybook(tree: Tree, options: NormalizedSchema) { return tree; } /** - * Remove function after migration is complete. + * TODO: Remove function after migration is complete. */ function migrateE2ESetupToCypress(tree: Tree, options: NormalizedSchema) { const e2ePath = joinPathFragments(options.projectConfig.root, 'e2e'); @@ -761,7 +761,7 @@ function migrateE2ESetupToCypress(tree: Tree, options: NormalizedSchema) { } /** - * Remove function after migration is complete. + * TODO: Remove function after migration is complete. */ function migrateCommonFolderToTesting(tree: Tree, options: NormalizedSchema) { const sourceRoot = options.paths.sourceRoot; @@ -804,7 +804,7 @@ function moveDocsToSubfolder(tree: Tree, options: NormalizedSchema) { } /** - * Remove function after migration is complete. + * TODO: Remove function after migration is complete. */ function moveStoriesToPackageRoot(tree: Tree, options: NormalizedSchema) { const oldStoriesPath = joinPathFragments(options.paths.sourceRoot, 'stories'); From 468a1fc711f386f52572c0a507c927cedeac3d23 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Sat, 1 Oct 2022 02:34:41 -0700 Subject: [PATCH 40/46] nit: remove if/else in favor of early returns --- tools/generators/migrate-converged-pkg/index.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tools/generators/migrate-converged-pkg/index.ts b/tools/generators/migrate-converged-pkg/index.ts index 950320359c60f..eba8062bef676 100644 --- a/tools/generators/migrate-converged-pkg/index.ts +++ b/tools/generators/migrate-converged-pkg/index.ts @@ -739,7 +739,10 @@ function migrateE2ESetupToCypress(tree: Tree, options: NormalizedSchema) { // Move testing helper file to src/testing. tree.rename(treePath, newFilePath); - } else if (treePath.includes('.e2e.')) { + return; + } + + if (treePath.includes('.e2e.')) { const content = tree.read(treePath, 'utf8'); const fileName = path.basename(treePath).replace('e2e', 'cy'); const componentName = fileName.split('.')[0]; @@ -752,10 +755,14 @@ function migrateE2ESetupToCypress(tree: Tree, options: NormalizedSchema) { const newContent = content.replace('./selectors', '../../testing/selectors'); tree.write(newCypressTestPath, newContent); } - } else if (treePath.includes('tsconfig.json')) { + return; + } + + if (treePath.includes('tsconfig.json')) { const newCypressTSConfigPath = joinPathFragments(options.projectConfig.root, 'tsconfig.cy.json'); // Move e2e folder tsconfig.json to root tree.rename(treePath, newCypressTSConfigPath); + return; } }); } From 7ea67c855b9f52ebb6fbb1e94606f88ea7f54ba0 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Mon, 3 Oct 2022 11:14:32 -0700 Subject: [PATCH 41/46] remove unintended prettier change --- packages/react-components/react-persona/MIGRATION.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/react-components/react-persona/MIGRATION.md b/packages/react-components/react-persona/MIGRATION.md index 697c575bbd736..9be6d7586b2ec 100644 --- a/packages/react-components/react-persona/MIGRATION.md +++ b/packages/react-components/react-persona/MIGRATION.md @@ -11,8 +11,6 @@ Here's how the API of v8's `Persona` compares to the one from v9's `Persona` com - `componentRef` => NOT SUPPORTED - use `ref` instead - `hidePersonaDetails` => Use the `Avatar` component for this case - ``` - - ``` - `imageShouldFadeIn` => NOT SUPPORTED - `isOutOfOffice` => Use the `outOfOffice` prop of the `presence` slot. E.g.: `presence={{ outOfOffice: true }}` - `presence` => Use the `status` prop of the `presence` slot. E.g.: `presence={{ status: 'away' }}` From 5d001f0dd3d5fadf337880f0f7dc7ccc8d6711da Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Sat, 1 Oct 2022 07:58:59 -0700 Subject: [PATCH 42/46] nit: use shorthand for files --- scripts/tasks/eslint.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/tasks/eslint.ts b/scripts/tasks/eslint.ts index ef7c1cb96fb4e..58f9691068040 100644 --- a/scripts/tasks/eslint.ts +++ b/scripts/tasks/eslint.ts @@ -12,7 +12,7 @@ if (fs.existsSync(storiesPath)) { export const eslint = eslintTask({ // TODO: also lint config files? - files: files, + files, extensions: constants.extensions, cache: true, // only lint files changed since last lint fix: process.argv.includes('--fix'), From a6eb2973d50d79ca47a9d200a2041bcfd2afb657 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Sat, 1 Oct 2022 08:06:37 -0700 Subject: [PATCH 43/46] update pkg json --- packages/react-components/react-menu/package.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/react-components/react-menu/package.json b/packages/react-components/react-menu/package.json index 129067e4709c6..1bc7b085a5f87 100644 --- a/packages/react-components/react-menu/package.json +++ b/packages/react-components/react-menu/package.json @@ -4,7 +4,7 @@ "description": "Fluent UI menu component", "main": "lib-commonjs/index.js", "module": "lib/index.js", - "typings": "dist/index.d.ts", + "typings": "./dist/index.d.ts", "sideEffects": false, "repository": { "type": "git", @@ -61,9 +61,10 @@ }, "exports": { ".": { - "types": "./lib/index.d.ts", + "types": "./dist/index.d.ts", "import": "./lib/index.js", "require": "./lib-commonjs/index.js" - } + }, + "./package.json": "./package.json" } } From d90505c2991f2d01f2383871645f68394eefedd9 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Tue, 4 Oct 2022 11:09:45 -0700 Subject: [PATCH 44/46] Remove unintended prettier changes caused by ... master merge --- packages/react-components/react-persona/MIGRATION.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/react-components/react-persona/MIGRATION.md b/packages/react-components/react-persona/MIGRATION.md index 697c575bbd736..9be6d7586b2ec 100644 --- a/packages/react-components/react-persona/MIGRATION.md +++ b/packages/react-components/react-persona/MIGRATION.md @@ -11,8 +11,6 @@ Here's how the API of v8's `Persona` compares to the one from v9's `Persona` com - `componentRef` => NOT SUPPORTED - use `ref` instead - `hidePersonaDetails` => Use the `Avatar` component for this case - ``` - - ``` - `imageShouldFadeIn` => NOT SUPPORTED - `isOutOfOffice` => Use the `outOfOffice` prop of the `presence` slot. E.g.: `presence={{ outOfOffice: true }}` - `presence` => Use the `status` prop of the `presence` slot. E.g.: `presence={{ status: 'away' }}` From c873ba37e263b892cf162c29173404c9772ef430 Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Wed, 5 Oct 2022 08:28:18 -0700 Subject: [PATCH 45/46] Remove unintended prettier change --- .../src/components/Progress/Progress.types.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/react-components/react-progress/src/components/Progress/Progress.types.ts b/packages/react-components/react-progress/src/components/Progress/Progress.types.ts index 0c976d03ec16e..c35c7e2d109f9 100644 --- a/packages/react-components/react-progress/src/components/Progress/Progress.types.ts +++ b/packages/react-components/react-progress/src/components/Progress/Progress.types.ts @@ -17,7 +17,7 @@ export type ProgressSlots = { export type ProgressProps = Omit, 'size'> & { /** * A decimal number between `0` and `1` (or between `0` and `max` if given), - * which specifies how much of the task has been completed. + * which specifies how much of the task has been completed. * * If `undefined` (default), the Progress will display an **indeterminate** state. */ @@ -38,6 +38,4 @@ export type ProgressProps = Omit, 'size'> & { /** * State used in rendering Progress */ -export type ProgressState = ComponentState & - Required> & - Pick; +export type ProgressState = ComponentState & Required> & Pick; From 53b591eb4f10ce08651bce1cc648125b54a6b2bb Mon Sep 17 00:00:00 2001 From: Tristan Watanabe Date: Wed, 12 Oct 2022 13:34:46 -0700 Subject: [PATCH 46/46] Change file --- ...luentui-react-menu-a2019e67-ddb5-4084-ab5c-661c427cdc9c.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/change/@fluentui-react-menu-a2019e67-ddb5-4084-ab5c-661c427cdc9c.json b/change/@fluentui-react-menu-a2019e67-ddb5-4084-ab5c-661c427cdc9c.json index 18a518d316632..dc60b1279766f 100644 --- a/change/@fluentui-react-menu-a2019e67-ddb5-4084-ab5c-661c427cdc9c.json +++ b/change/@fluentui-react-menu-a2019e67-ddb5-4084-ab5c-661c427cdc9c.json @@ -1,6 +1,6 @@ { "type": "patch", - "comment": "Migrate menu to new pkg structure", + "comment": "chore: Migrate to new package structure", "packageName": "@fluentui/react-menu", "email": "tristan.watanabe@gmail.com", "dependentChangeType": "patch"