Skip to content

Commit b467f1a

Browse files
Jen-Unoclaude
andcommitted
revert(unocrm): remove the loading-skeleton mitigation now the preview issue is filed upstream
Strips every layer that existed only to soften the Hot Design populated-preview issue, at the maintainer's direction, returning every list FeedView to the canonical Value/None/Error trio the other studio samples use: - the page-drawn ghost wrappers behind the Dashboard activity FeedViews and the Pipeline stage FeedView (Grid.Row returns to the FeedView itself); - the in-template empty-collection fallbacks and their EmptyToVisibility converter; - the four *LoadingTemplate skeletons and the two GhostBar styles; - the Progress/Undefined template wiring and the RefreshingState="None" attributes; - the opaque cover backgrounds the value and empty templates carried so they could hide the skeleton behind them. What stays is everything that was real product work: the designed empty states ("No activity yet", "Nothing in the pipeline yet"), the differentiated preview variants, the no-capture mock feeds — the one mitigation-era change confirmed to matter, since it took the previews from never-rendering to rendering — and the upstream proposal that now owns the rest of the problem. Verified with FULL-PAGE simulator screenshots of both changed pages (Dashboard default; Pipeline via a temporary default-route swap, reverted): headers, filters, lists and rows all in place. Four heads 0 warning / 0 error on full rebuilds. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 765784f commit b467f1a

7 files changed

Lines changed: 33 additions & 374 deletions

File tree

studio/uno-crm/UnoCRM/Converters/EmptyToVisibilityConverter.cs

Lines changed: 0 additions & 48 deletions
This file was deleted.

studio/uno-crm/UnoCRM/DataTemplates.xaml

Lines changed: 17 additions & 238 deletions
Original file line numberDiff line numberDiff line change
@@ -54,20 +54,12 @@
5454
<!-- The desktop FeedView's populated state: the materialized feed value in a ListView. The item
5555
container style is in Styles.xaml with the rest of the named styles. -->
5656
<DataTemplate x:Key="DesktopContactListTemplate">
57-
<Grid>
58-
<ContentControl ContentTemplate="{StaticResource ContactListLoadingTemplate}"
59-
HorizontalAlignment="Stretch"
60-
HorizontalContentAlignment="Stretch"
61-
IsTabStop="False"
62-
AutomationProperties.AccessibilityView="Raw"
63-
Visibility="{Binding Data.Count, Converter={StaticResource EmptyToVisibility}}" />
64-
<ListView ItemsSource="{Binding Data}"
65-
BorderThickness="0"
66-
Background="Transparent"
67-
SelectionMode="None"
68-
ItemContainerStyle="{StaticResource ContactListItemStyle}"
69-
ItemTemplate="{StaticResource DesktopContactCardTemplate}" />
70-
</Grid>
57+
<ListView ItemsSource="{Binding Data}"
58+
BorderThickness="0"
59+
Background="Transparent"
60+
SelectionMode="None"
61+
ItemContainerStyle="{StaticResource ContactListItemStyle}"
62+
ItemTemplate="{StaticResource DesktopContactCardTemplate}" />
7163
</DataTemplate>
7264

7365
<!-- The desktop FeedView's None state (a list feed emits None when it has no items). -->
@@ -102,16 +94,8 @@
10294
scroll and the whole page scrolls as one — a nested ListView scroll would trap the gesture
10395
and never move the page offset. -->
10496
<DataTemplate x:Key="MobileContactListTemplate">
105-
<Grid>
106-
<ContentControl ContentTemplate="{StaticResource ContactListLoadingTemplate}"
107-
HorizontalAlignment="Stretch"
108-
HorizontalContentAlignment="Stretch"
109-
IsTabStop="False"
110-
AutomationProperties.AccessibilityView="Raw"
111-
Visibility="{Binding Data.Count, Converter={StaticResource EmptyToVisibility}}" />
112-
<ItemsControl ItemsSource="{Binding Data}"
113-
ItemTemplate="{StaticResource MobileContactCardTemplate}" />
114-
</Grid>
97+
<ItemsControl ItemsSource="{Binding Data}"
98+
ItemTemplate="{StaticResource MobileContactCardTemplate}" />
11599
</DataTemplate>
116100

117101
<!-- The mobile FeedView's None state. -->
@@ -631,47 +615,20 @@
631615
<!-- Recent activity, in the desktop and mobile treatments. Both render the SAME Activities feed,
632616
so the two arrangements stay in step by construction. -->
633617
<DataTemplate x:Key="DesktopActivityListTemplate">
634-
<!-- The loading shape sits under the rows and hides as soon as there are any. A value state whose
635-
collection is still empty is not an empty result — an empty result reports "none" and picks the
636-
empty-state template — so it can only be a collection that has not filled yet, and the honest
637-
thing to show is the shape of what is coming. Without this the card has no content and
638-
collapses to its own padding. -->
639-
<Grid Background="{ThemeResource DashboardSurfaceBrush}">
640-
<ContentControl ContentTemplate="{StaticResource ActivityLoadingTemplate}"
641-
HorizontalAlignment="Stretch"
642-
HorizontalContentAlignment="Stretch"
643-
IsTabStop="False"
644-
AutomationProperties.AccessibilityView="Raw"
645-
Visibility="{Binding Data.Count, Converter={StaticResource EmptyToVisibility}}" />
646-
<ItemsControl ItemsSource="{Binding Data}"
647-
ItemTemplate="{StaticResource DesktopActivityTemplate}" />
648-
</Grid>
618+
<ItemsControl ItemsSource="{Binding Data}"
619+
ItemTemplate="{StaticResource DesktopActivityTemplate}" />
649620
</DataTemplate>
650621

651622
<DataTemplate x:Key="MobileActivityListTemplate">
652-
<!-- The loading shape sits under the rows and hides as soon as there are any. A value state whose
653-
collection is still empty is not an empty result — an empty result reports "none" and picks the
654-
empty-state template — so it can only be a collection that has not filled yet, and the honest
655-
thing to show is the shape of what is coming. Without this the card has no content and
656-
collapses to its own padding. -->
657-
<Grid Background="{ThemeResource DashboardSurfaceBrush}">
658-
<ContentControl ContentTemplate="{StaticResource ActivityLoadingTemplate}"
659-
HorizontalAlignment="Stretch"
660-
HorizontalContentAlignment="Stretch"
661-
IsTabStop="False"
662-
AutomationProperties.AccessibilityView="Raw"
663-
Visibility="{Binding Data.Count, Converter={StaticResource EmptyToVisibility}}" />
664-
<ItemsControl ItemsSource="{Binding Data}"
665-
ItemTemplate="{StaticResource MobileActivityTemplate}" />
666-
</Grid>
623+
<ItemsControl ItemsSource="{Binding Data}"
624+
ItemTemplate="{StaticResource MobileActivityTemplate}" />
667625
</DataTemplate>
668626

669627
<!-- The activity feed with nothing in it. A ghosted row of the real thing — a title bar over a
670628
detail bar with a timestamp opposite — then what would fill it. Same device as the pipeline's
671629
empty state, so the app answers "nothing here" the same way everywhere. -->
672630
<DataTemplate x:Key="NoActivityTemplate">
673631
<StackPanel Spacing="14" Margin="16,18,16,18">
674-
Background="{ThemeResource DashboardSurfaceBrush}"
675632
<Grid ColumnSpacing="14" Opacity="0.4">
676633
<Grid.ColumnDefinitions>
677634
<ColumnDefinition Width="*" />
@@ -698,74 +655,11 @@
698655
</StackPanel>
699656
</DataTemplate>
700657

701-
<!-- The activity feed before its request has answered. The page's own rows, ghosted three deep, so
702-
the panel has the shape and height of the thing it is about to show instead of collapsing to
703-
nothing and shoving the layout when the rows land. Three, because that is what fits without
704-
claiming to know how many are coming.
705-
706-
The rest of the app declares no loading template — every other request either resolves into a
707-
surface that reads fine empty, or has a designed empty state. This panel has neither: it is a
708-
full-width card whose content is the only thing in it. -->
709-
<DataTemplate x:Key="ActivityLoadingTemplate">
710-
<StackPanel Opacity="0.35">
711-
<Grid ColumnSpacing="14" Padding="16,18">
712-
<Grid.ColumnDefinitions>
713-
<ColumnDefinition Width="*" />
714-
<ColumnDefinition Width="Auto" />
715-
</Grid.ColumnDefinitions>
716-
<StackPanel Spacing="7" VerticalAlignment="Center">
717-
<Border Height="9" Width="176" CornerRadius="4" HorizontalAlignment="Left"
718-
Background="{ThemeResource DashboardMutedTextBrush}" />
719-
<Border Height="7" Width="104" CornerRadius="3" HorizontalAlignment="Left"
720-
Background="{ThemeResource DashboardBorderBrush}" />
721-
</StackPanel>
722-
<Border Grid.Column="1" Height="7" Width="34" CornerRadius="3" VerticalAlignment="Center"
723-
Background="{ThemeResource DashboardBorderBrush}" />
724-
</Grid>
725-
<Grid ColumnSpacing="14" Padding="16,18">
726-
<Grid.ColumnDefinitions>
727-
<ColumnDefinition Width="*" />
728-
<ColumnDefinition Width="Auto" />
729-
</Grid.ColumnDefinitions>
730-
<StackPanel Spacing="7" VerticalAlignment="Center">
731-
<Border Height="9" Width="138" CornerRadius="4" HorizontalAlignment="Left"
732-
Background="{ThemeResource DashboardMutedTextBrush}" />
733-
<Border Height="7" Width="126" CornerRadius="3" HorizontalAlignment="Left"
734-
Background="{ThemeResource DashboardBorderBrush}" />
735-
</StackPanel>
736-
<Border Grid.Column="1" Height="7" Width="34" CornerRadius="3" VerticalAlignment="Center"
737-
Background="{ThemeResource DashboardBorderBrush}" />
738-
</Grid>
739-
<Grid ColumnSpacing="14" Padding="16,18">
740-
<Grid.ColumnDefinitions>
741-
<ColumnDefinition Width="*" />
742-
<ColumnDefinition Width="Auto" />
743-
</Grid.ColumnDefinitions>
744-
<StackPanel Spacing="7" VerticalAlignment="Center">
745-
<Border Height="9" Width="160" CornerRadius="4" HorizontalAlignment="Left"
746-
Background="{ThemeResource DashboardMutedTextBrush}" />
747-
<Border Height="7" Width="88" CornerRadius="3" HorizontalAlignment="Left"
748-
Background="{ThemeResource DashboardBorderBrush}" />
749-
</StackPanel>
750-
<Border Grid.Column="1" Height="7" Width="34" CornerRadius="3" VerticalAlignment="Center"
751-
Background="{ThemeResource DashboardBorderBrush}" />
752-
</Grid>
753-
</StackPanel>
754-
</DataTemplate>
755-
756658
<!-- The mobile pipeline board's stage list. -->
757659
<DataTemplate x:Key="MobileStageListTemplate">
758-
<Grid Background="{ThemeResource DashboardPageBackgroundBrush}">
759-
<ContentControl ContentTemplate="{StaticResource StageListLoadingTemplate}"
760-
HorizontalAlignment="Stretch"
761-
HorizontalContentAlignment="Stretch"
762-
IsTabStop="False"
763-
AutomationProperties.AccessibilityView="Raw"
764-
Visibility="{Binding Data.Count, Converter={StaticResource EmptyToVisibility}}" />
765-
<ItemsControl ItemsSource="{Binding Data}"
766-
ItemTemplate="{StaticResource MobileStageTemplate}"
767-
ItemsPanel="{StaticResource StageStackPanel}" />
768-
</Grid>
660+
<ItemsControl ItemsSource="{Binding Data}"
661+
ItemTemplate="{StaticResource MobileStageTemplate}"
662+
ItemsPanel="{StaticResource StageStackPanel}" />
769663
</DataTemplate>
770664

771665
<!-- The board's empty state. It owns a whole page region rather than a slot inside a card, so it
@@ -780,7 +674,6 @@
780674
same button twice. -->
781675
<DataTemplate x:Key="NoStagesTemplate">
782676
<StackPanel HorizontalAlignment="Center"
783-
Background="{ThemeResource DashboardPageBackgroundBrush}"
784677
MaxWidth="300"
785678
Spacing="16"
786679
Margin="0,48,0,32">
@@ -822,16 +715,8 @@
822715

823716
<!-- The Leads page's top-open-leads list (desktop rail). -->
824717
<DataTemplate x:Key="TopLeadListTemplate">
825-
<Grid>
826-
<ContentControl ContentTemplate="{StaticResource TopLeadLoadingTemplate}"
827-
HorizontalAlignment="Stretch"
828-
HorizontalContentAlignment="Stretch"
829-
IsTabStop="False"
830-
AutomationProperties.AccessibilityView="Raw"
831-
Visibility="{Binding Data.Count, Converter={StaticResource EmptyToVisibility}}" />
832-
<ItemsControl ItemsSource="{Binding Data}"
833-
ItemTemplate="{StaticResource TopLeadTemplate}" />
834-
</Grid>
718+
<ItemsControl ItemsSource="{Binding Data}"
719+
ItemTemplate="{StaticResource TopLeadTemplate}" />
835720
</DataTemplate>
836721

837722
<DataTemplate x:Key="NoOpenLeadsTemplate">
@@ -946,110 +831,4 @@
946831
</Grid>
947832
</DataTemplate>
948833

949-
<!-- The shape of each list while its collection is still filling. Each mirrors its own row so the
950-
panel holds the height and rhythm of what is coming, rather than collapsing and then shoving the
951-
layout when the real rows land. -->
952-
<DataTemplate x:Key="StageListLoadingTemplate">
953-
<StackPanel Spacing="18" Opacity="0.35">
954-
<StackPanel Spacing="10">
955-
<StackPanel Orientation="Horizontal" Spacing="8">
956-
<Ellipse Width="10" Height="10" VerticalAlignment="Center"
957-
Fill="{ThemeResource DashboardMutedTextBrush}" />
958-
<Border Width="96" Style="{StaticResource GhostBarStyle}" Height="8" />
959-
</StackPanel>
960-
<Border Height="52" CornerRadius="{StaticResource RadiusMd}" BorderThickness="1"
961-
BorderBrush="{ThemeResource DashboardBorderBrush}" />
962-
<Border Height="52" CornerRadius="{StaticResource RadiusMd}" BorderThickness="1"
963-
BorderBrush="{ThemeResource DashboardBorderBrush}" />
964-
</StackPanel>
965-
<StackPanel Spacing="10">
966-
<StackPanel Orientation="Horizontal" Spacing="8">
967-
<Ellipse Width="10" Height="10" VerticalAlignment="Center"
968-
Fill="{ThemeResource DashboardMutedTextBrush}" />
969-
<Border Width="76" Style="{StaticResource GhostBarStyle}" Height="8" />
970-
</StackPanel>
971-
<Border Height="52" CornerRadius="{StaticResource RadiusMd}" BorderThickness="1"
972-
BorderBrush="{ThemeResource DashboardBorderBrush}" />
973-
<Border Height="52" CornerRadius="{StaticResource RadiusMd}" BorderThickness="1"
974-
BorderBrush="{ThemeResource DashboardBorderBrush}" />
975-
</StackPanel>
976-
</StackPanel>
977-
</DataTemplate>
978-
979-
<DataTemplate x:Key="TopLeadLoadingTemplate">
980-
<StackPanel Opacity="0.35">
981-
<Grid Padding="0,0,0,10" Margin="0,0,0,10">
982-
<Grid.ColumnDefinitions>
983-
<ColumnDefinition Width="*" />
984-
<ColumnDefinition Width="Auto" />
985-
</Grid.ColumnDefinitions>
986-
<Border Width="132" Style="{StaticResource GhostBarStyle}" />
987-
<Border Grid.Column="1" Width="62" Style="{StaticResource GhostBarFaintStyle}" />
988-
</Grid>
989-
<Grid Padding="0,0,0,10" Margin="0,0,0,10">
990-
<Grid.ColumnDefinitions>
991-
<ColumnDefinition Width="*" />
992-
<ColumnDefinition Width="Auto" />
993-
</Grid.ColumnDefinitions>
994-
<Border Width="108" Style="{StaticResource GhostBarStyle}" />
995-
<Border Grid.Column="1" Width="56" Style="{StaticResource GhostBarFaintStyle}" />
996-
</Grid>
997-
<Grid Padding="0,0,0,10" Margin="0,0,0,10">
998-
<Grid.ColumnDefinitions>
999-
<ColumnDefinition Width="*" />
1000-
<ColumnDefinition Width="Auto" />
1001-
</Grid.ColumnDefinitions>
1002-
<Border Width="146" Style="{StaticResource GhostBarStyle}" />
1003-
<Border Grid.Column="1" Width="66" Style="{StaticResource GhostBarFaintStyle}" />
1004-
</Grid>
1005-
</StackPanel>
1006-
</DataTemplate>
1007-
1008-
<DataTemplate x:Key="ContactListLoadingTemplate">
1009-
<StackPanel Opacity="0.35">
1010-
<Border Style="{StaticResource DashboardKanbanCardStyle}" Margin="0,0,0,10">
1011-
<StackPanel Spacing="9">
1012-
<Border Width="126" Style="{StaticResource GhostBarStyle}" />
1013-
<Border Width="96" Style="{StaticResource GhostBarFaintStyle}" />
1014-
<Grid>
1015-
<Grid.ColumnDefinitions>
1016-
<ColumnDefinition Width="*" />
1017-
<ColumnDefinition Width="Auto" />
1018-
</Grid.ColumnDefinitions>
1019-
<Border Width="74" Style="{StaticResource GhostBarFaintStyle}" />
1020-
<Border Grid.Column="1" Width="44" Style="{StaticResource GhostBarFaintStyle}" />
1021-
</Grid>
1022-
</StackPanel>
1023-
</Border>
1024-
<Border Style="{StaticResource DashboardKanbanCardStyle}" Margin="0,0,0,10">
1025-
<StackPanel Spacing="9">
1026-
<Border Width="104" Style="{StaticResource GhostBarStyle}" />
1027-
<Border Width="118" Style="{StaticResource GhostBarFaintStyle}" />
1028-
<Grid>
1029-
<Grid.ColumnDefinitions>
1030-
<ColumnDefinition Width="*" />
1031-
<ColumnDefinition Width="Auto" />
1032-
</Grid.ColumnDefinitions>
1033-
<Border Width="66" Style="{StaticResource GhostBarFaintStyle}" />
1034-
<Border Grid.Column="1" Width="44" Style="{StaticResource GhostBarFaintStyle}" />
1035-
</Grid>
1036-
</StackPanel>
1037-
</Border>
1038-
<Border Style="{StaticResource DashboardKanbanCardStyle}" Margin="0,0,0,10">
1039-
<StackPanel Spacing="9">
1040-
<Border Width="140" Style="{StaticResource GhostBarStyle}" />
1041-
<Border Width="88" Style="{StaticResource GhostBarFaintStyle}" />
1042-
<Grid>
1043-
<Grid.ColumnDefinitions>
1044-
<ColumnDefinition Width="*" />
1045-
<ColumnDefinition Width="Auto" />
1046-
</Grid.ColumnDefinitions>
1047-
<Border Width="82" Style="{StaticResource GhostBarFaintStyle}" />
1048-
<Border Grid.Column="1" Width="44" Style="{StaticResource GhostBarFaintStyle}" />
1049-
</Grid>
1050-
</StackPanel>
1051-
</Border>
1052-
</StackPanel>
1053-
</DataTemplate>
1054-
1055834
</ResourceDictionary>

studio/uno-crm/UnoCRM/Presentation/ContactsPage.xaml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,7 @@
154154
Source="{Binding FilteredContacts}"
155155
ValueTemplate="{StaticResource DesktopContactListTemplate}"
156156
NoneTemplate="{StaticResource DesktopContactsEmptyTemplate}"
157-
ErrorTemplate="{StaticResource CrmErrorTemplate}"
158-
ProgressTemplate="{StaticResource ContactListLoadingTemplate}"
159-
UndefinedTemplate="{StaticResource ContactListLoadingTemplate}" />
157+
ErrorTemplate="{StaticResource CrmErrorTemplate}" />
160158
</Grid>
161159
</Border>
162160
</Grid>
@@ -258,9 +256,7 @@
258256
<mvux:FeedView Source="{Binding FilteredContacts}"
259257
ValueTemplate="{StaticResource MobileContactListTemplate}"
260258
NoneTemplate="{StaticResource MobileContactsEmptyTemplate}"
261-
ErrorTemplate="{StaticResource CrmErrorTemplate}"
262-
ProgressTemplate="{StaticResource ContactListLoadingTemplate}"
263-
UndefinedTemplate="{StaticResource ContactListLoadingTemplate}" />
259+
ErrorTemplate="{StaticResource CrmErrorTemplate}" />
264260
</StackPanel>
265261
</Border>
266262
</Grid>

0 commit comments

Comments
 (0)