User attribute component#494
Conversation
There was a problem hiding this comment.
Pull request overview
Adds a new Mint Stencil component (<sqm-user-attribute>) intended to display a logged-in user’s custom field value by querying viewer.customFields, and exposes it in Stencilbook for demo/testing.
Changes:
- Introduces
sqm-user-attributecomponent, hook, and view for rendering a selected user custom field. - Adds a Stencilbook story and wires it into
sqm-stencilbook. - Updates generated docs/types (
components.d.ts, component readme) and bumps@saasquatch/mint-componentsversion.
Reviewed changes
Copilot reviewed 9 out of 10 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/mint-components/src/components/sqm-user-attribute/useUserAttribute.ts | Adds GraphQL hook to fetch viewer.customFields and derive the displayed attribute value. |
| packages/mint-components/src/components/sqm-user-attribute/sqm-user-attribute.tsx | Adds the new Stencil component wrapper and demo-mode hook wiring. |
| packages/mint-components/src/components/sqm-user-attribute/sqm-user-attribute-view.tsx | Adds the presentational view for rendering loading text or the attribute value. |
| packages/mint-components/src/components/sqm-user-attribute/UserAttribute.stories.tsx | Adds a basic Stencilbook story for the new component. |
| packages/mint-components/src/components/sqm-user-attribute/user-attribute.feature | Adds a (currently placeholder) cucumber/gherkin spec file. |
| packages/mint-components/src/components/sqm-user-attribute/readme.md | Adds autogenerated component docs for the new component. |
| packages/mint-components/src/components/sqm-stencilbook/sqm-stencilbook.tsx | Registers the new story module in the Stencilbook story list. |
| packages/mint-components/src/components/sqm-stencilbook/readme.md | Updates Stencilbook docs graph to include the new component dependency. |
| packages/mint-components/src/components.d.ts | Updates generated component typings to include sqm-user-attribute. |
| packages/mint-components/package.json | Bumps the package version. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| const value = customFields?.[props.value]; | ||
|
|
| console.log("customFields", customFields, "value", value); | ||
|
|
| return ( | ||
| props.value && ( | ||
| <Host> | ||
| <p part="sqm-base">{props.loading ? props.loadingText : props.value}</p> | ||
| </Host> | ||
| ) |
| /** | ||
| * @uiName User Attribute | ||
| * @exampleGroup Advanced Components | ||
| * @example User Attribute - <sqm-user-attribute value="firstName" loading-text="..."></sqm-user-attribute> | ||
| */ |
| function useCustomFieldsDemo(props: UserAttribute): UserAttributeViewProps { | ||
| return deepmerge( | ||
| { | ||
| loading: false, | ||
| value: "Custom Field Value", | ||
| }, | ||
| props.demoData || {}, | ||
| { arrayMerge: (_, a) => a }, | ||
| ); |
| @@ -0,0 +1 @@ | |||
| #todo No newline at end of file | |||
| @@ -0,0 +1,32 @@ | |||
| # sqm-sidebar-item | |||
| return ( | ||
| <sqm-user-attribute | ||
| demoData={{ | ||
| loading: false, |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 9 out of 10 changed files in this pull request and generated 6 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| return ( | ||
| props.value && ( | ||
| <Host> | ||
| <style>{getStyle(props)}</style> | ||
| <p part="sqm-base">{props.loading ? loadingSkeleton : props.value}</p> | ||
| </Host> | ||
| ) |
| function getStyle(props: UserAttributeViewProps) { | ||
| return ` | ||
| p { | ||
| margin: 0; | ||
| padding: 0; | ||
| ${props.fontsize && `font-size: ${props.fontsize};`} | ||
| ${props.fontweight && `font-weight: ${props.fontweight};`} | ||
| color: ${props.color ? props.color : "var(--sqm-text)"}; | ||
| }`; |
| /** | ||
| * @uiName User Attribute | ||
| * @exampleGroup Advanced Components | ||
| * @example User Attribute - <sqm-user-attribute value="firstName" loading-text="..."></sqm-user-attribute> |
| /** | ||
| * Font size in pixels. | ||
| * @uiName Font size | ||
| * @uiGroup Style | ||
| */ | ||
| @Prop() fontsize?: string; |
| # sqm-sidebar-item | ||
|
|
||
|
|
||
|
|
||
| <!-- Auto Generated Below --> | ||
|
|
||
|
|
||
| ## Properties | ||
|
|
||
| | Property | Attribute | Description | Type | Default | | ||
| | ------------- | -------------- | ------------------------------------------------------- | -------------------------------------------------------------- | ----------- | | ||
| | `demoData` | -- | | `{ loading?: boolean; value?: string; loadingText?: string; }` | `undefined` | | ||
| | `loadingText` | `loading-text` | Text displayed while the participant’s name is loading. | `string` | `"..."` | | ||
| | `value` | `value` | The custom field key to display. | `string` | `undefined` | | ||
|
|
| import { h } from "@stencil/core"; | ||
|
|
||
| export default { | ||
| title: "Components/User Attribute", |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 10 out of 11 changed files in this pull request and generated 8 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| return ( | ||
| props.value && ( | ||
| <Host> | ||
| <style>{styleString}</style> | ||
| <p part="sqm-base">{props.loading ? loadingSkeleton : props.value}</p> | ||
| </Host> | ||
| ) | ||
| ); |
| export function UserAttributeView(props: UserAttributeViewProps) { | ||
| const style = { | ||
| P: { | ||
| margin: "0", | ||
| padding: "0", | ||
| fontSize: props.fontsize || "inherit", | ||
| fontWeight: props.fontweight || "inherit", | ||
| color: props.color || "var(--sqm-text)", | ||
| }, | ||
| }; | ||
| const sheet = createStyleSheet(style); | ||
| const styleString = sheet.toString(); |
| /** | ||
| * @uiName User Attribute | ||
| * @exampleGroup Advanced | ||
| * @example User Attribute - <sqm-user-attribute value="firstName" loading-text="..."></sqm-user-attribute> |
| /** | ||
| * Font size in pixels. | ||
| * @uiName Font size | ||
| * @uiGroup Style | ||
| */ | ||
| @Prop() fontsize?: string; | ||
| /** | ||
| * @uiName Color | ||
| * @uiWidget color | ||
| * @format color | ||
| * @uiGroup Style | ||
| */ | ||
| @Prop() color?: string; | ||
| /** | ||
| * @uiName Font weight | ||
| * @uiGroup Style | ||
| */ | ||
| @Prop() fontweight?: string; |
| @@ -0,0 +1,39 @@ | |||
| # sqm-sidebar-item | |||
| export function useUserAttribute(props: UserAttribute): UserAttributeViewProps { | ||
| const user = useUserIdentity(); | ||
| const res = useQuery(GET_CUSTOM_FIELDS, {}, !user?.jwt); | ||
| const loading = res.loading; | ||
| const customFields = res.data?.viewer?.customFields; | ||
| const value = customFields?.[props.value]; | ||
|
|
| /** | ||
| * Font size in pixels. | ||
| * @uiName Font size | ||
| * @uiGroup Style | ||
| */ | ||
| @Prop() fontsize?: string; | ||
| /** |
| export interface UserAttributeViewProps { | ||
| loading: boolean; | ||
| value: string; | ||
| fontsize?: string; | ||
| color?: string; | ||
| fontweight?: string; | ||
| } |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 10 out of 11 changed files in this pull request and generated 4 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| return ( | ||
| props.value && ( | ||
| <Host> | ||
| <style>{styleString}</style> | ||
| <p class={sheet.classes.P} part="sqm-base"> | ||
| {props.loading ? loadingSkeleton : props.value} | ||
| </p> | ||
| </Host> | ||
| ) |
| export interface UserAttributeViewProps { | ||
| loading: boolean; | ||
| value: string; | ||
| fontSize?: number; | ||
| color?: string; | ||
| fontWeight?: number; | ||
| } |
| /** | ||
| * @uiName User Attribute | ||
| * @exampleGroup Advanced | ||
| * @example User Attribute - <sqm-user-attribute value="firstName" loading-text="..."></sqm-user-attribute> |
| @@ -0,0 +1,39 @@ | |||
| # sqm-sidebar-item | |||
Description of the change
Type of change
Links
Checklists
Development
Paperwork
Code review