Skip to content

Commit 26dcb3b

Browse files
Copilotkdinev
andcommitted
Resolve directives ↔ radio circular dependency
- Moved radio-group directive from directives to radio entry point - Radio-group is tightly coupled with IgxRadioComponent (manages radio button groups) - Updated radio-group imports to use local ../radio.component - Updated radio.component to import radio-group locally - Updated radio public_api to export radio-group directive and module - Directives re-exports IgxRadioGroupDirective from radio for backwards compatibility - Renamed IChangeCheckboxEventArgs to IChangeRadioEventArgs in radio-group This eliminates the circular dependency between directives and radio Co-authored-by: kdinev <[email protected]>
1 parent 7c2046f commit 26dcb3b

File tree

7 files changed

+13
-11
lines changed

7 files changed

+13
-11
lines changed

projects/igniteui-angular/directives/src/public_api.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ export {
2020
export * from './directives/button/icon-button.directive';
2121
export * from './directives/layout/layout.directive';
2222
export * from './directives/mask/mask.directive';
23-
export * from './directives/radio/public_api';
23+
// Note: Radio-group directive moved to radio entry point in v21.0.0
24+
// Users should now import from 'igniteui-angular/radio' instead
25+
export { IgxRadioGroupDirective, IChangeRadioEventArgs } from 'igniteui-angular/radio';
2426
export * from './directives/ripple/ripple.directive';
2527
export * from './directives/scroll-inertia/scroll_inertia.directive';
2628
export * from './directives/size/ig-size.directive';
@@ -50,7 +52,7 @@ export * from './directives/for-of/for_of.module';
5052
export * from './directives/form-control/form-control.module';
5153
export * from './directives/layout/layout.module';
5254
export * from './directives/mask/mask.module';
53-
export * from './directives/radio/radio-group.module';
55+
export { IgxRadioModule } from 'igniteui-angular/radio';
5456
export * from './directives/ripple/ripple.module';
5557
export * from './directives/scroll-inertia/scroll_inertia.module';
5658
export * from './directives/text-highlight/text-highlight.module';
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
export * from './radio.component';
2+
export * from './radio-group/radio-group.directive';
3+
export * from './radio-group/radio-group.module';

projects/igniteui-angular/directives/src/directives/radio/public_api.ts renamed to projects/igniteui-angular/radio/src/radio/radio-group/public_api.ts

File renamed without changes.

projects/igniteui-angular/directives/src/directives/radio/radio-group.directive.spec.ts renamed to projects/igniteui-angular/radio/src/radio/radio-group/radio-group.directive.spec.ts

File renamed without changes.

projects/igniteui-angular/directives/src/directives/radio/radio-group.directive.ts renamed to projects/igniteui-angular/radio/src/radio/radio-group/radio-group.directive.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,11 @@ import {
1717
} from '@angular/core';
1818
import { ControlValueAccessor, NgControl, Validators } from '@angular/forms';
1919
import { fromEvent, noop, Subject, takeUntil } from 'rxjs';
20-
import { IgxRadioComponent } from 'igniteui-angular/radio';
20+
import { IgxRadioComponent } from '../radio.component';
2121
import { IgxDirectionality } from 'igniteui-angular/core';
2222
import { IBaseEventArgs } from 'igniteui-angular/core';
2323

24-
// Stub interface to avoid circular dependency with checkbox
25-
// Full implementation is in igniteui-angular/checkbox
26-
export interface IChangeCheckboxEventArgs extends IBaseEventArgs {
24+
export interface IChangeRadioEventArgs extends IBaseEventArgs {
2725
checked: boolean;
2826
value?: any;
2927
}
@@ -198,7 +196,7 @@ export class IgxRadioGroupDirective implements ControlValueAccessor, OnDestroy,
198196
* ```
199197
*/
200198
// eslint-disable-next-line @angular-eslint/no-output-native
201-
@Output() public readonly change: EventEmitter<IChangeCheckboxEventArgs> = new EventEmitter<IChangeCheckboxEventArgs>();
199+
@Output() public readonly change: EventEmitter<IChangeRadioEventArgs> = new EventEmitter<IChangeRadioEventArgs>();
202200

203201
/**
204202
* The css class applied to the component.
@@ -559,7 +557,7 @@ export class IgxRadioGroupDirective implements ControlValueAccessor, OnDestroy,
559557
takeUntil(button.destroy$),
560558
takeUntil(this.destroy$),
561559
takeUntil(this.queryChange$)
562-
).subscribe((ev: IChangeCheckboxEventArgs) => this._selectedRadioButtonChanged(ev));
560+
).subscribe((ev: IChangeRadioEventArgs) => this._selectedRadioButtonChanged(ev));
563561

564562
button.blurRadio
565563
.pipe(takeUntil(this.destroy$))
@@ -574,7 +572,7 @@ export class IgxRadioGroupDirective implements ControlValueAccessor, OnDestroy,
574572
* @hidden
575573
* @internal
576574
*/
577-
private _selectedRadioButtonChanged(args: IChangeCheckboxEventArgs) {
575+
private _selectedRadioButtonChanged(args: IChangeRadioEventArgs) {
578576
this._radioButtons().forEach((button) => {
579577
button.checked = button.id === args.owner.id;
580578
if (button.checked && button.ngControl) {

projects/igniteui-angular/directives/src/directives/radio/radio-group.module.ts renamed to projects/igniteui-angular/radio/src/radio/radio-group/radio-group.module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { NgModule } from '@angular/core';
22
import { IgxRadioGroupDirective } from './radio-group.directive';
3-
import { IgxRadioComponent } from 'igniteui-angular/radio';
3+
import { IgxRadioComponent } from '../radio.component';
44

55
/**
66
* @hidden

projects/igniteui-angular/radio/src/radio/radio.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { ControlValueAccessor } from '@angular/forms';
1313
import { EditorProvider, EDITOR_PROVIDER } from 'igniteui-angular/core';
1414
import { IgxRippleDirective } from 'igniteui-angular/directives';
1515
import { CheckboxBaseDirective } from '../checkbox/checkbox-base.directive';
16-
import { IgxRadioGroupDirective } from 'igniteui-angular/directives';
16+
import { IgxRadioGroupDirective } from './radio-group/radio-group.directive';
1717

1818
/**
1919
* **Ignite UI for Angular Radio Button** -

0 commit comments

Comments
 (0)