Skip to content

Commit 37b6394

Browse files
committed
Update library dependency diff rendering
Now we can see how a dependency being upgraded instead of "removed" and "added". Keeps highlighting version and everything.
1 parent 343672d commit 37b6394

File tree

9 files changed

+645847
-53
lines changed

9 files changed

+645847
-53
lines changed

api-stubs/branch-diff-with-libs.json

Lines changed: 645673 additions & 0 deletions
Large diffs are not rendered by default.

elm-git.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"git-dependencies": {
33
"direct": {
4-
"https://github.com/unisonweb/ui-core": "d9cf0e30bbb75decac36f1b9f4e2855d5a69d1e0"
4+
"https://github.com/unisonweb/ui-core": "9518fe75925e2a2d3828a4a5c2415ed0eac5d661"
55
},
66
"indirect": {}
77
}

src/Code2/Workspace/WorkspaceCard.elm

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
module Code2.Workspace.WorkspaceCard exposing (..)
22

3-
import Code.ProjectDependency as ProjectDependency exposing (ProjectDependency)
43
import Code2.Workspace.WorkspaceCardTitlebarButton as TitlebarButton exposing (titlebarButton)
54
import Html exposing (Html, div, header, section, span, text)
65
import Html.Attributes exposing (class)
76
import Lib.OperatingSystem exposing (OperatingSystem)
87
import UI
98
import UI.Card as Card
109
import UI.Click as Click exposing (Click)
11-
import UI.ContextualTag as ContextualTag
1210
import UI.Icon as Icon exposing (Icon)
1311
import UI.KeyboardShortcut as KeyboardShortcut exposing (KeyboardShortcut(..), single)
1412
import UI.KeyboardShortcut.Key as Key exposing (letter)
@@ -186,18 +184,6 @@ map f card_ =
186184

187185

188186

189-
-- RELATED VIEW HELPERS
190-
191-
192-
viewLibraryTag : ProjectDependency -> Html msg
193-
viewLibraryTag dep =
194-
ContextualTag.contextualTag Icon.book (ProjectDependency.toString dep)
195-
|> ContextualTag.decorativePurple
196-
|> ContextualTag.withTooltipText "Library dependency"
197-
|> ContextualTag.view
198-
199-
200-
201187
-- VIEW
202188

203189

src/Code2/Workspace/WorkspaceDefinitionItemCard.elm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Code.Definition.Term as Term
77
import Code.Definition.Type as Type
88
import Code.FullyQualifiedName as FQN exposing (FQN)
99
import Code.Hash as Hash
10+
import Code.ProjectDependency as ProjectDependency
1011
import Code.Source.SourceViewConfig as SourceViewConfig
1112
import Code.Syntax.SyntaxConfig as SyntaxConfig
1213
import Code2.Workspace.DefinitionItem as DefinitionItem exposing (DefinitionItem(..))
@@ -254,7 +255,7 @@ titlebarLeft cfg =
254255
lib =
255256
cfg.item
256257
|> DefinitionItem.toLib
257-
|> Maybe.map WorkspaceCard.viewLibraryTag
258+
|> Maybe.map ProjectDependency.viewLibraryBadge
258259
|> Maybe.withDefault UI.nothing
259260

260261
copySourceToClipboard =

src/Code2/Workspace/WorkspaceDefinitionMatchesCard.elm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import Code.Definition.Term as Term exposing (Term(..))
55
import Code.Definition.Type as Type exposing (Type(..))
66
import Code.DefinitionSummaryTooltip as DefinitionSummaryTooltip
77
import Code.FullyQualifiedName as FQN
8+
import Code.ProjectDependency as ProjectDependency
89
import Code.Syntax.SyntaxSegment as SyntaxSegment
910
import Code2.Workspace.DefinitionItem as DefinitionItem exposing (DefinitionItem)
1011
import Code2.Workspace.DefinitionMatch as DefinitionMatch exposing (DefinitionMatch(..))
@@ -328,7 +329,7 @@ view cfg =
328329
lib =
329330
cfg.contextItem
330331
|> DefinitionItem.toLib
331-
|> Maybe.map WorkspaceCard.viewLibraryTag
332+
|> Maybe.map ProjectDependency.viewLibraryBadge
332333
|> Maybe.withDefault UI.nothing
333334

334335
({ terms, types, tests, abilities, docs } as group) =

src/UnisonShare/BranchDiff/LibDep.elm

Lines changed: 63 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,87 @@
11
module UnisonShare.BranchDiff.LibDep exposing (..)
22

3+
import Code.FullyQualifiedName as FQN exposing (FQN)
4+
import Code.ProjectDependency as ProjectDependency exposing (ProjectDependency)
35
import Json.Decode as Decode
46
import Json.Decode.Pipeline exposing (required)
57
import Lib.Decode.Helpers exposing (failInvalid, whenTagIs)
8+
import List.Extra as ListE
69

710

811
type alias LibDepInfo =
9-
{ name : String }
12+
{ name : FQN, dep : ProjectDependency }
1013

1114

1215
type LibDep
1316
= Added LibDepInfo
1417
| Removed LibDepInfo
18+
| Updated { before : LibDepInfo, after : LibDepInfo }
19+
20+
21+
same : LibDep -> LibDep -> Bool
22+
same a b =
23+
ProjectDependency.same (projectDependency a) (projectDependency b)
24+
25+
26+
libDepInfo : LibDep -> LibDepInfo
27+
libDepInfo libDep =
28+
case libDep of
29+
Added info ->
30+
info
31+
32+
Removed info ->
33+
info
34+
35+
Updated { before } ->
36+
before
37+
38+
39+
projectDependency : LibDep -> ProjectDependency
40+
projectDependency libDep =
41+
libDep |> libDepInfo |> .dep
42+
43+
44+
mergeUpdated : List LibDep -> List LibDep
45+
mergeUpdated deps =
46+
let
47+
go lib acc =
48+
case ( List.filter (same lib) deps, ListE.find (same lib) acc ) of
49+
( [ Added addedInfo, Removed removedInfo ], Nothing ) ->
50+
Updated { before = removedInfo, after = addedInfo } :: acc
51+
52+
( [ Removed removedInfo, Added addedInfo ], Nothing ) ->
53+
Updated { before = removedInfo, after = addedInfo } :: acc
54+
55+
( [ Added _, Removed _ ], Just _ ) ->
56+
acc
57+
58+
( [ Removed _, Added _ ], Just _ ) ->
59+
acc
60+
61+
_ ->
62+
lib :: acc
63+
in
64+
List.foldr go [] deps
65+
66+
67+
68+
-- DECODE
1569

1670

1771
decodeMaybe : Decode.Decoder (Maybe LibDep)
1872
decodeMaybe =
1973
let
2074
makeAdded name =
21-
Added { name = name }
75+
Added
76+
{ name = FQN.fromString ("lib." ++ name)
77+
, dep = ProjectDependency.fromString name
78+
}
2279

2380
makeRemoved name =
24-
Removed { name = name }
81+
Removed
82+
{ name = FQN.fromString ("lib." ++ name)
83+
, dep = ProjectDependency.fromString name
84+
}
2585
in
2686
Decode.oneOf
2787
[ whenTagIs "Added"

src/UnisonShare/Page/ProjectContributionChangesPage.elm

Lines changed: 63 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import Code.Definition.Reference exposing (Reference)
55
import Code.FullyQualifiedName as FQN
66
import Code.Hash as Hash
77
import Code.Perspective as Perspective
8+
import Code.ProjectDependency as ProjectDependency
89
import Code.Syntax as Syntax
910
import Code.Syntax.SyntaxConfig as SyntaxConfig
11+
import Code.Version as Version
1012
import Html exposing (Html, br, code, div, h2, label, p, pre, span, strong, text)
1113
import Html.Attributes exposing (class, id, style)
1214
import Http
@@ -666,58 +668,89 @@ viewChangedDefinitionsCards projectRef toggledChangeLines maxBadgeLength branchD
666668

667669

668670
viewLibDep : Int -> LibDep -> Html msg
669-
viewLibDep maxBadgeLength dep =
671+
viewLibDep maxBadgeLength libDep =
670672
let
671673
viewCard content =
672674
Card.card
673-
[ div [ class "definition-change-header" ] [ div [ class "change-line" ] content ] ]
675+
[ div [ class "definition-change-header" ]
676+
[ div [ class "change-line" ] content ]
677+
]
674678
|> Card.withClassName "definition-change lib-dep"
675679
|> Card.asContained
676680
|> Card.view
677681

678682
badge icon type_ =
679-
Tooltip.text type_
680-
|> Tooltip.tooltip
681-
|> Tooltip.withArrow Tooltip.Start
682-
|> Tooltip.view
683-
(viewChangeBadge_ maxBadgeLength icon type_)
683+
viewChangeBadge_ maxBadgeLength icon type_
684684

685-
viewTitle name =
686-
let
687-
fqn =
688-
FQN.fromList [ "lib", name ]
689-
in
690-
div [ class "change-title" ] [ FQN.view fqn ]
685+
viewDepInfoBadge dep =
686+
div [ class "dep-info change-info" ]
687+
[ div [ class "change-title" ]
688+
[ ProjectDependency.viewLibraryBadge_ { withVersion = True, withTooltip = False } dep.dep
689+
, span [ class "lib-namespace-info" ] [ text "(", FQN.view dep.name, text ")" ]
690+
]
691+
]
691692
in
692-
case dep of
693-
LibDep.Added { name } ->
693+
case libDep of
694+
LibDep.Added dep ->
694695
viewCard
695696
[ badge Icon.largePlus "Added"
696-
, div [ class "def-icon-anchor" ]
697-
[ Tooltip.text "Lib dependency"
698-
|> Tooltip.tooltip
699-
|> Tooltip.withArrow Tooltip.Start
700-
|> Tooltip.view (span [ class "def-icon" ] [ Icon.view Icon.book ])
701-
]
702-
, div [ class "change-info" ] [ viewTitle name ]
697+
, viewDepInfoBadge dep
703698
]
704699

705-
LibDep.Removed { name } ->
700+
LibDep.Removed dep ->
706701
viewCard
707702
[ badge Icon.dash "Removed"
708-
, div [ class "def-icon-anchor" ]
709-
[ Tooltip.text "Lib dependency"
710-
|> Tooltip.tooltip
711-
|> Tooltip.withArrow Tooltip.Start
712-
|> Tooltip.view (span [ class "def-icon" ] [ Icon.view Icon.book ])
703+
, viewDepInfoBadge dep
704+
]
705+
706+
LibDep.Updated { before, after } ->
707+
let
708+
toFrom =
709+
case ( before.dep.version, after.dep.version ) of
710+
( Just beforeV, Just afterV ) ->
711+
[ ProjectDependency.viewLibraryBadge_
712+
{ withVersion = False
713+
, withTooltip = False
714+
}
715+
before.dep
716+
, Version.view beforeV
717+
, Icon.view Icon.arrowRight
718+
, Version.view afterV
719+
, span [ class "lib-namespace-info" ]
720+
[ text "("
721+
, FQN.view before.name
722+
, Icon.view Icon.arrowRight
723+
, FQN.view after.name
724+
, text ")"
725+
]
726+
]
727+
728+
_ ->
729+
[ ProjectDependency.viewLibraryBadge before.dep
730+
, Icon.view Icon.arrowRight
731+
, ProjectDependency.viewLibraryBadge after.dep
732+
, span [ class "lib-namespace-info" ]
733+
[ text "("
734+
, FQN.view before.name
735+
, Icon.view Icon.arrowRight
736+
, FQN.view after.name
737+
, text ")"
738+
]
739+
]
740+
in
741+
viewCard
742+
[ badge Icon.refreshSmallBold "Updated"
743+
, div [ class "dep-info change-info" ]
744+
[ div [ class "change-title" ] toFrom
713745
]
714-
, div [ class "change-info" ] [ viewTitle name ]
715746
]
716747

717748

718749
viewLibDeps : Int -> List LibDep -> List (Html msg)
719750
viewLibDeps maxBadgeLength deps =
720-
List.map (viewLibDep maxBadgeLength) deps
751+
deps
752+
|> LibDep.mergeUpdated
753+
|> List.map (viewLibDep maxBadgeLength)
721754

722755

723756
viewBranchDiff : ProjectRef -> ToggledChangeLines -> BranchDiff -> Html Msg

src/css/unison-share/page/project-contribution-changes-page.css

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@
102102
}
103103

104104
& .change-info {
105+
position: relative;
105106
display: flex;
106107
flex-direction: row;
107108
align-items: center;
@@ -129,6 +130,34 @@
129130
}
130131
}
131132

133+
& .change-info.dep-info {
134+
margin-left: 0.5rem;
135+
136+
& .version {
137+
font-size: var(--font-size-medium);
138+
font-weight: 500;
139+
}
140+
141+
& .lib-namespace-info {
142+
position: relative;
143+
display: flex;
144+
flex-direction: row;
145+
align-items: center;
146+
font-size: var(--font-size-extra-small);
147+
line-height: 1;
148+
color: var(--u-color_text_subdued);
149+
font-family: var(--font-monospace);
150+
& .fully-qualified-name_segment {
151+
color: var(--u-color_text_subdued);
152+
}
153+
154+
& .icon {
155+
font-size: var(--font-size-extra-small);
156+
margin: 0 0.25rem;
157+
}
158+
}
159+
}
160+
132161
& .definition-change-actions .tooltip-bubble {
133162
margin-right: 0.5rem;
134163
margin-top: 0.125rem;
@@ -538,12 +567,14 @@
538567
& .icon.ability-constructor,
539568
& .icon.data-constructor,
540569
& .icon.doc,
541-
& .icon.book,
542570
& .icon.test {
543571
color: var(--u-color_icon_subdued);
544572
}
545573

546574
& .change-title {
575+
display: flex;
576+
align-items: center;
577+
gap: 0.5rem;
547578
color: var(--u-color_text);
548579

549580
& .fully-qualified-name {
@@ -659,12 +690,21 @@
659690
}
660691

661692
@media only screen and (--u-viewport_max-md) {
693+
.project-contribution-changes-page
694+
.definition-changes
695+
.definition-change.card
696+
.definition-change-header
697+
.change-info.dep-info
698+
.lib-namespace-info {
699+
display: none;
700+
}
701+
662702
.project-contribution-changes-page {
663703
& .definition-change.card {
664704
& .definition-change-header .change-line {
665705
& .change-info .hash,
666706
& .change-info .extra-info,
667-
& .change-info .icon.arrow-right,
707+
& .change-info:not(.dep-info) .icon.arrow-right,
668708
& .change-badge label {
669709
display: none;
670710
}

webpack.dev.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const docExamplesReadmeDef = require("./api-stubs/doc-examples-readme-definition
1212
const blogEngineLib = require("./api-stubs/blog-engine-lib.json");
1313
const browseBlog = require("./api-stubs/browse-blog.json");
1414
const notifications = require("./api-stubs/notifications.json");
15-
const branchDiff = require("./api-stubs/branch-diff-weird-equals.json");
15+
const branchDiff = require("./api-stubs/branch-diff-with-libs.json");
1616

1717
// ENV
1818
const API_URL = process.env.API_URL || "http://127.0.0.1:5424";

0 commit comments

Comments
 (0)