Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: The mdx-to-csf codemod doesn't remove extracted components from the mdx file #26141

Open
Tracked by #25432
valentinpalkovic opened this issue Feb 22, 2024 · 2 comments

Comments

@valentinpalkovic
Copy link
Contributor

valentinpalkovic commented Feb 22, 2024

The mdx-to-csf codemod doesn't remove extracted components from mdx files.

Example:

// accordion.stories.mdx
import { extractArgTypes } from '@astrouxds/storybook-addon-docs-stencil'
import { Meta, Story, Canvas, ArgsTable } from '@storybook/addon-docs'
import { html, render } from 'lit-html'

<Meta
    title="Components/Accordion"
    component="rux-accordion"
    subcomponents={{ RuxAccordionItem: 'rux-accordion-item' }}
    argTypes={extractArgTypes('rux-accordion')}
    parameters={{
      actions: {
          handles: [
              'ruxexpanded rux-accordion-item',
              'ruxcollapsed rux-accordion-item',
          ],
      },
    }}
/>

# Accordion
## Guidelines

-   [Astro UXDS: Accordion](https://www.astrouxds.com/components/accordion/)

export const Default = (args) => {
    return html`
<div style="padding: 5%;">
    <rux-accordion
        ?disabled="${args.disabled}"
        ?disallow-multiple="${args.disallowMultiple}"
    >
        <rux-accordion-item><div slot="label">Title 1</div><p>Content 1</p></rux-accordion-item>
        <rux-accordion-item><div slot="label">Title 2</div><p>Content 2</p></rux-accordion-item>
        <rux-accordion-item><div slot="label">Title 3</div><p>Content 3</p></rux-accordion-item>
    </rux-accordion>
</div>
    `
}

<Canvas>
    <Story
        name="Default"
        args={{
            disabled: false,
            disallowMultiple: false,
        }}
    >
        {Default.bind()}
    </Story>
</Canvas>

Is transformed into:

// accordion.stories.js
import { extractArgTypes } from '@astrouxds/storybook-addon-docs-stencil'
import { html, render } from 'lit-html'

const Default = (args) => {
    return html`
        <div style="padding: 5%;">
            <rux-accordion
                ?disabled="${args.disabled}"
                ?disallow-multiple="${args.disallowMultiple}"
            >
                <rux-accordion-item
                    ><div slot="label">Title 1</div>
                    <p>Content 1</p></rux-accordion-item
                >
                <rux-accordion-item
                    ><div slot="label">Title 2</div>
                    <p>Content 2</p></rux-accordion-item
                >
                <rux-accordion-item
                    ><div slot="label">Title 3</div>
                    <p>Content 3</p></rux-accordion-item
                >
            </rux-accordion>
        </div>
    `
}

export default {
    title: 'Components/Accordion',
    component: 'rux-accordion',

    subcomponents: {
        RuxAccordionItem: 'rux-accordion-item',
    },

    argTypes: extractArgTypes('rux-accordion'),

    parameters: {
        actions: {
            handles: [
                'ruxexpanded rux-accordion-item',
                'ruxcollapsed rux-accordion-item',
            ],
        },
    },
}

export const Default_ = {
    render: Default.bind(),
    name: 'Default',

    args: {
        disabled: false,
        disallowMultiple: false,
    },
}

And:

// accordion.mdx
import { extractArgTypes } from '@astrouxds/storybook-addon-docs-stencil'
import { Meta, Story, Canvas, ArgsTable } from '@storybook/blocks'
import { html, render } from 'lit-html'
import * as AccordionStories from './accordion.stories';

<Meta of={AccordionStories} />

# Accordion

An Accordion is a device which presents a set of summary items which can expose details based on each summary. An item can be expanded to reveal details, and collapsed to hide details.

## Guidelines

* [Astro UXDS: Accordion](https://www.astrouxds.com/components/accordion/)

export const Default = (args) => {
    return html`
<div style="padding: 5%;">
    <rux-accordion
        ?disabled="${args.disabled}"
        ?disallow-multiple="${args.disallowMultiple}"
    >
        <rux-accordion-item><div slot="label">Title 1</div><p>Content 1</p></rux-accordion-item>
        <rux-accordion-item><div slot="label">Title 2</div><p>Content 2</p></rux-accordion-item>
        <rux-accordion-item><div slot="label">Title 3</div><p>Content 3</p></rux-accordion-item>
    </rux-accordion>
</div>
    `
}

<Canvas>
  <Story of={AccordionStories.Default_} />
</Canvas>
@ndelangen
Copy link
Member

I'm confused about these code examples, could you help me understand what exactly it is that's wrong in them?

@valentinpalkovic
Copy link
Contributor Author

valentinpalkovic commented Feb 27, 2024

@ndelangen This part is obsolete in the mdx file:

export const Default = (args) => {
    return html`
<div style="padding: 5%;">
    <rux-accordion
        ?disabled="${args.disabled}"
        ?disallow-multiple="${args.disallowMultiple}"
    >
        <rux-accordion-item><div slot="label">Title 1</div><p>Content 1</p></rux-accordion-item>
        <rux-accordion-item><div slot="label">Title 2</div><p>Content 2</p></rux-accordion-item>
        <rux-accordion-item><div slot="label">Title 3</div><p>Content 3</p></rux-accordion-item>
    </rux-accordion>
</div>
    `
}

I have discussed that with @kasperpeulen and the reason why the components were not removed was a general anxiety of breaking existing references inside the mdx file. So removing the components from the MDX files might be potentially disruptive.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants