Skip to content
This repository was archived by the owner on Jan 5, 2023. It is now read-only.
This repository was archived by the owner on Jan 5, 2023. It is now read-only.

Does not support select knobs on TypeScript string unions  #72

Open

Description

@dantman

I'm using smart-knobs with TypeScript components using react-docgen-typescript-loader.

However I do not get any knobs on a component that just uses string union props like these. String props are fine so this is specific to the type handling.

export interface StatusIndicatorProps {
  status: 'completed' | 'incomplete' | 'overdue';
}

const StatusIndicator: FC<StatusIndicatorProps> = props => {
  // ...
}

The resulting __docgenInfo output by react-docgen-typescript-loader contains the following props:

props: {
  status: {
    defaultValue: null,
    description: "",
    name: "status",
    required: true,
    type: {name: '"completed" | "incomplete" | "overdue"'}
  }
}

It would be nice if smart-props could support the string union types for at least simple unions that can properly be represented as a select or radio (e.g. a union of primitives like numbers, strings, undefined/null, and/or booleans).

Activity

  1. dantman commented on Feb 9, 2020

    @dantman
    Author

    As a related topic. I can appreciate that sometimes types will be too complex for smart-knobs to do automatically.

    It would be really appreciated if there was an escape hatch for that type of scenario. i.e. Some way to give smart-knobs a function that will return a knob for the prop on a component that is too complex for it to handle automatically. This will at least allow stories to be written without including the knobs into the story itself (which will result in the knob being included in doc page examples).

  2. ndelangen commented on Feb 11, 2020

    @ndelangen
    Contributor

    @dantman I'd take a PR adding this escape hatch for sure!

  3. dantman commented on Feb 13, 2020

    @dantman
    Author

    Ok, apparently react-docgen-typescript-loader has a shouldExtractLiteralValuesFromEnum option built-in to support smart-knobs.

    strothj/react-docgen-typescript-loader#87 (comment)

    Perhaps smart-knobs should mention that option where it recommends use of react-docgen-typescript-loader.

  4. Benwick91 commented on Apr 9, 2020

    @Benwick91

    I have the same problem. I use the shouldExtractLiteralValuesFromEnum and it worked, but not on every component. Some components works fine with select and all other props. Some props show only one prop and there are missing select knobs and other knobs. I don't get what I do wrong

  5. dehypnosis commented on Jul 17, 2020

    @dehypnosis

    I found that optional props seems to not be recognized.. eg. { theme?: "dark"|"light" } or { theme: "dark"|"light"|undefined }

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions