diff --git a/modules/core/src/lib/tooltip-widget.ts b/modules/core/src/lib/tooltip-widget.ts index 0e1fc63634e..d0ebbb5fc2b 100644 --- a/modules/core/src/lib/tooltip-widget.ts +++ b/modules/core/src/lib/tooltip-widget.ts @@ -45,7 +45,7 @@ export class TooltipWidget extends Widget { lastViewport?: Viewport; constructor(props: TooltipWidgetProps = {}) { - super(props); + super(props, TooltipWidget.defaultProps); this.setProps(props); } diff --git a/modules/core/src/lib/widget.ts b/modules/core/src/lib/widget.ts index a466b36c1a3..542319d2b53 100644 --- a/modules/core/src/lib/widget.ts +++ b/modules/core/src/lib/widget.ts @@ -50,12 +50,8 @@ export abstract class Widget< deck?: Deck; rootElement?: HTMLDivElement | null; - constructor(props: PropsT) { - this.props = { - // @ts-expect-error `defaultProps` may not exist on constructor - ...(this.constructor.defaultProps as Required), - ...props - }; + constructor(props: PropsT, defaultProps: Required) { + this.props = {...defaultProps, ...props}; // @ts-expect-error TODO(ib) - why is id considered optional even though we use Required<> this.id = this.props.id; } diff --git a/modules/widgets/src/compass-widget.tsx b/modules/widgets/src/compass-widget.tsx index 620b7f7adf9..db85fead978 100644 --- a/modules/widgets/src/compass-widget.tsx +++ b/modules/widgets/src/compass-widget.tsx @@ -32,7 +32,7 @@ export class CompassWidget extends Widget { viewports: {[id: string]: Viewport} = {}; constructor(props: CompassWidgetProps = {}) { - super(props); + super(props, CompassWidget.defaultProps); this.setProps(this.props); } diff --git a/modules/widgets/src/context-menu-widget.tsx b/modules/widgets/src/context-menu-widget.tsx index 701d42e204a..5a4b8b9679e 100644 --- a/modules/widgets/src/context-menu-widget.tsx +++ b/modules/widgets/src/context-menu-widget.tsx @@ -52,7 +52,7 @@ export class ContextMenuWidget extends Widget { pickInfo: PickingInfo | null = null; constructor(props: ContextMenuWidgetProps) { - super(props); + super(props, ContextMenuWidget.defaultProps); this.pickInfo = null; this.setProps(this.props); } diff --git a/modules/widgets/src/fps-widget.tsx b/modules/widgets/src/fps-widget.tsx index 9bfc8ec3c4b..cf93545639e 100644 --- a/modules/widgets/src/fps-widget.tsx +++ b/modules/widgets/src/fps-widget.tsx @@ -32,7 +32,7 @@ export class FpsWidget extends Widget { private _lastFps: number = -1; constructor(props: FpsWidgetProps = {}) { - super(props); + super(props, FpsWidget.defaultProps); this.setProps(this.props); } diff --git a/modules/widgets/src/fullscreen-widget.tsx b/modules/widgets/src/fullscreen-widget.tsx index f562ee97806..d324d481b46 100644 --- a/modules/widgets/src/fullscreen-widget.tsx +++ b/modules/widgets/src/fullscreen-widget.tsx @@ -42,7 +42,7 @@ export class FullscreenWidget extends Widget { fullscreen: boolean = false; constructor(props: FullscreenWidgetProps = {}) { - super(props); + super(props, FullscreenWidget.defaultProps); this.setProps(this.props); } diff --git a/modules/widgets/src/geocoder-widget.tsx b/modules/widgets/src/geocoder-widget.tsx index 4bc7ab4c88b..9eeb26504a2 100644 --- a/modules/widgets/src/geocoder-widget.tsx +++ b/modules/widgets/src/geocoder-widget.tsx @@ -68,7 +68,7 @@ export class GeocoderWidget extends Widget { geocoder: Geocoder = CoordinatesGeocoder; constructor(props: GeocoderWidgetProps = {}) { - super(props); + super(props, GeocoderWidget.defaultProps); this.setProps(this.props); } diff --git a/modules/widgets/src/gimbal-widget.tsx b/modules/widgets/src/gimbal-widget.tsx index ee7012dc0db..141706cc2ad 100644 --- a/modules/widgets/src/gimbal-widget.tsx +++ b/modules/widgets/src/gimbal-widget.tsx @@ -34,7 +34,7 @@ export class GimbalWidget extends Widget { viewports: {[id: string]: Viewport} = {}; constructor(props: GimbalWidgetProps = {}) { - super(props); + super(props, GimbalWidget.defaultProps); this.setProps(this.props); } diff --git a/modules/widgets/src/info-widget.tsx b/modules/widgets/src/info-widget.tsx index 454bb81b7c2..1dda4a6e536 100644 --- a/modules/widgets/src/info-widget.tsx +++ b/modules/widgets/src/info-widget.tsx @@ -44,7 +44,7 @@ export class InfoWidget extends Widget { viewport?: Viewport; constructor(props: InfoWidgetProps) { - super(props); + super(props, InfoWidget.defaultProps); this.setProps(this.props); } diff --git a/modules/widgets/src/loading-widget.tsx b/modules/widgets/src/loading-widget.tsx index 8f29deca94e..ef5ec819004 100644 --- a/modules/widgets/src/loading-widget.tsx +++ b/modules/widgets/src/loading-widget.tsx @@ -34,7 +34,7 @@ export class LoadingWidget extends Widget { loading = true; constructor(props: LoadingWidgetProps = {}) { - super(props); + super(props, LoadingWidget.defaultProps); this.setProps(this.props); } diff --git a/modules/widgets/src/reset-view-widget.tsx b/modules/widgets/src/reset-view-widget.tsx index be01e61b5ea..403821738b6 100644 --- a/modules/widgets/src/reset-view-widget.tsx +++ b/modules/widgets/src/reset-view-widget.tsx @@ -40,7 +40,7 @@ export class ResetViewWidget extends Widget< placement: WidgetPlacement = 'top-left'; constructor(props: ResetViewWidgetProps = {}) { - super(props); + super(props, ResetViewWidget.defaultProps as Required>); this.setProps(this.props); } diff --git a/modules/widgets/src/scale-widget.tsx b/modules/widgets/src/scale-widget.tsx index 71feb287490..7b5bead32b7 100644 --- a/modules/widgets/src/scale-widget.tsx +++ b/modules/widgets/src/scale-widget.tsx @@ -42,7 +42,7 @@ export class ScaleWidget extends Widget { scaleText: string = ''; constructor(props: ScaleWidgetProps = {}) { - super(props); + super(props, ScaleWidget.defaultProps); this.setProps(this.props); } diff --git a/modules/widgets/src/screenshot-widget.tsx b/modules/widgets/src/screenshot-widget.tsx index 3161fb93670..aaef16a45c9 100644 --- a/modules/widgets/src/screenshot-widget.tsx +++ b/modules/widgets/src/screenshot-widget.tsx @@ -44,7 +44,7 @@ export class ScreenshotWidget extends Widget { placement: WidgetPlacement = 'top-left'; constructor(props: ScreenshotWidgetProps = {}) { - super(props); + super(props, ScreenshotWidget.defaultProps); this.setProps(this.props); } diff --git a/modules/widgets/src/splitter-widget.tsx b/modules/widgets/src/splitter-widget.tsx index f83a6e168d1..165ac5a1bff 100644 --- a/modules/widgets/src/splitter-widget.tsx +++ b/modules/widgets/src/splitter-widget.tsx @@ -46,7 +46,7 @@ export class SplitterWidget extends Widget { placement = 'fill' as const; constructor(props: SplitterWidgetProps) { - super(props); + super(props, SplitterWidget.defaultProps); } setProps(props: Partial) { diff --git a/modules/widgets/src/stats-widget.tsx b/modules/widgets/src/stats-widget.tsx index 8993b505b86..f3d8abdf8e1 100644 --- a/modules/widgets/src/stats-widget.tsx +++ b/modules/widgets/src/stats-widget.tsx @@ -73,7 +73,7 @@ export class StatsWidget extends Widget { _stats: Stats; constructor(props: StatsWidgetProps = {}) { - super(props); + super(props, StatsWidget.defaultProps); this._formatters = {...DEFAULT_FORMATTERS}; this._resetOnUpdate = {...this.props.resetOnUpdate}; this._stats = this.props.stats; diff --git a/modules/widgets/src/theme-widget.tsx b/modules/widgets/src/theme-widget.tsx index adc3241454f..338bab99b65 100644 --- a/modules/widgets/src/theme-widget.tsx +++ b/modules/widgets/src/theme-widget.tsx @@ -45,7 +45,7 @@ export class ThemeWidget extends Widget { themeMode: 'light' | 'dark' = 'dark'; constructor(props: ThemeWidgetProps = {}) { - super(props); + super(props, ThemeWidget.defaultProps); this.themeMode = this._getInitialThemeMode(); this.setProps(this.props); } diff --git a/modules/widgets/src/timeline-widget.tsx b/modules/widgets/src/timeline-widget.tsx index 27d62adbd63..f32cf0b68a2 100644 --- a/modules/widgets/src/timeline-widget.tsx +++ b/modules/widgets/src/timeline-widget.tsx @@ -45,7 +45,7 @@ export class TimelineWidget extends Widget { }; constructor(props: TimelineWidgetProps = {}) { - super(props); + super(props, TimelineWidget.defaultProps); this.currentTime = this.props.initialTime ?? this.props.timeRange[0]; this.setProps(this.props); } diff --git a/modules/widgets/src/view-selector-widget.tsx b/modules/widgets/src/view-selector-widget.tsx index 67568cea1a8..690968b0f73 100644 --- a/modules/widgets/src/view-selector-widget.tsx +++ b/modules/widgets/src/view-selector-widget.tsx @@ -47,7 +47,7 @@ export class ViewSelectorWidget extends Widget { viewMode: ViewMode; constructor(props: ViewSelectorWidgetProps = {}) { - super(props); + super(props, ViewSelectorWidget.defaultProps); this.viewMode = this.props.initialViewMode; this.setProps(this.props); } diff --git a/modules/widgets/src/zoom-widget.tsx b/modules/widgets/src/zoom-widget.tsx index 83d532c669f..4b52e555c60 100644 --- a/modules/widgets/src/zoom-widget.tsx +++ b/modules/widgets/src/zoom-widget.tsx @@ -40,7 +40,7 @@ export class ZoomWidget extends Widget { viewports: {[id: string]: Viewport} = {}; constructor(props: ZoomWidgetProps = {}) { - super(props); + super(props, ZoomWidget.defaultProps); this.setProps(this.props); }