@@ -14,29 +14,38 @@ import {
1414
1515import { type AsElementLink } from '#util/types/LinkTypes.js' ;
1616
17- export interface ButtonProps extends AsElementLink < HTMLButtonElement > {
17+ export interface ButtonProps extends ButtonBaseProps , AsElementLink < HTMLButtonElement > {
1818 href ?: never ;
19- secondary ?: boolean ;
20- reverse ?: boolean ;
21- warning ?: boolean ;
22- login ?: boolean ;
23- small ?: boolean ;
2419 as ?: 'button' ;
25- preventDoubleClick ?: boolean ;
2620}
2721
28- export interface ButtonLinkProps extends AsElementLink < HTMLAnchorElement > {
22+ export interface ButtonLinkProps extends ButtonBaseProps , AsElementLink < HTMLAnchorElement > {
2923 href : string ;
3024 type ?: never ;
25+ as ?: 'a' ;
26+ }
27+
28+ interface ButtonBaseProps {
3129 secondary ?: boolean ;
3230 reverse ?: boolean ;
3331 warning ?: boolean ;
3432 login ?: boolean ;
3533 small ?: boolean ;
36- as ?: 'a' ;
3734 preventDoubleClick ?: boolean ;
3835}
3936
37+ function getButtonClassNames ( props : ButtonProps | ButtonLinkProps ) {
38+ return classNames (
39+ 'nhsuk-button' ,
40+ { 'nhsuk-button--secondary' : props . secondary } ,
41+ { 'nhsuk-button--reverse' : props . reverse } ,
42+ { 'nhsuk-button--warning' : props . warning } ,
43+ { 'nhsuk-button--login' : props . login } ,
44+ { 'nhsuk-button--small' : props . small } ,
45+ props . className ,
46+ ) ;
47+ }
48+
4049const ButtonComponent = forwardRef < HTMLButtonElement , ButtonProps > ( ( props , forwardedRef ) => {
4150 const {
4251 className,
@@ -76,15 +85,7 @@ const ButtonComponent = forwardRef<HTMLButtonElement, ButtonProps>((props, forwa
7685
7786 return (
7887 < Element
79- className = { classNames (
80- 'nhsuk-button' ,
81- { 'nhsuk-button--secondary' : secondary } ,
82- { 'nhsuk-button--reverse' : reverse } ,
83- { 'nhsuk-button--warning' : warning } ,
84- { 'nhsuk-button--login' : login } ,
85- { 'nhsuk-button--small' : small } ,
86- className ,
87- ) }
88+ className = { getButtonClassNames ( props ) }
8889 data-module = "nhsuk-button"
8990 data-prevent-double-click = { preventDoubleClick === true ? 'true' : undefined }
9091 disabled = { disabled }
@@ -142,15 +143,7 @@ const ButtonLinkComponent = forwardRef<HTMLAnchorElement, ButtonLinkProps>(
142143
143144 return (
144145 < Element
145- className = { classNames (
146- 'nhsuk-button' ,
147- { 'nhsuk-button--secondary' : secondary } ,
148- { 'nhsuk-button--reverse' : reverse } ,
149- { 'nhsuk-button--warning' : warning } ,
150- { 'nhsuk-button--login' : login } ,
151- { 'nhsuk-button--small' : small } ,
152- className ,
153- ) }
146+ className = { getButtonClassNames ( props ) }
154147 data-module = "nhsuk-button"
155148 data-prevent-double-click = { preventDoubleClick === true ? 'true' : undefined }
156149 role = "button"
0 commit comments