The Problem
Right now, the dashboard feels fragmented because each widget handles loading and error states differently. Instead of a unified UI, we have varying fonts, styles, and layouts for simple data transitions.
Where it's happening:
AttackOriginMap: Custom "Loading map..." text in a 200px box.
EnrichmentLookup: Uses a red Alert for errors and changes button text for searching.
AttackOriginCountriesChart: Uses "Loading..." text with its own padding.
Why this matters
It breaks the "Premium" feel of the dashboard. During data refreshes, the layout shifts and the UI doesn't look like it belongs to the same app.
The Solution
We should introduce a Widget Wrapper to handle these states. This will ensure every widget uses the same loading spinners and error messages automatically.
The Problem
Right now, the dashboard feels fragmented because each widget handles loading and error states differently. Instead of a unified UI, we have varying fonts, styles, and layouts for simple data transitions.
Where it's happening:
AttackOriginMap: Custom "Loading map..." text in a 200px box.EnrichmentLookup: Uses a redAlertfor errors and changes button text for searching.AttackOriginCountriesChart: Uses "Loading..." text with its own padding.Why this matters
It breaks the "Premium" feel of the dashboard. During data refreshes, the layout shifts and the UI doesn't look like it belongs to the same app.
The Solution
We should introduce a Widget Wrapper to handle these states. This will ensure every widget uses the same loading spinners and error messages automatically.