From e7ff1eb66b3004a9acc2be5dea542ae41abb59ec Mon Sep 17 00:00:00 2001 From: Lucy C <12953208+elvece@users.noreply.github.com> Date: Fri, 12 May 2023 12:20:05 -0600 Subject: [PATCH] display icons based on mime type (#2271) * display icons based on mime type * Update frontend/projects/marketplace/src/pipes/mime-type.pipe.ts Co-authored-by: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> * fixes --------- Co-authored-by: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> --- .../src/pages/list/item/item.component.html | 2 +- .../src/pages/list/item/item.module.ts | 10 ++++-- .../dependencies/dependencies.component.ts | 1 + .../pages/show/package/package.component.html | 6 +--- .../src/pages/show/package/package.module.ts | 6 ++-- .../marketplace/src/pipes/mime-type.pipe.ts | 29 ++++++++++++++++++ .../projects/marketplace/src/public-api.ts | 1 + frontend/projects/marketplace/src/types.ts | 3 ++ .../assets/img/service-icons/bitcoind.png | Bin 26145 -> 0 bytes .../assets/img/service-icons/bitcoind.svg | 9 ++++++ .../marketplace-show.module.ts | 6 ++-- .../src/app/pages/updates/updates.module.ts | 4 ++- .../src/app/pages/updates/updates.page.html | 4 +-- .../ui/src/app/services/api/api.fixures.ts | 8 ++--- .../ui/src/app/services/api/mock-patch.ts | 4 +-- 15 files changed, 70 insertions(+), 23 deletions(-) create mode 100644 frontend/projects/marketplace/src/pipes/mime-type.pipe.ts delete mode 100644 frontend/projects/shared/assets/img/service-icons/bitcoind.png create mode 100644 frontend/projects/shared/assets/img/service-icons/bitcoind.svg diff --git a/frontend/projects/marketplace/src/pages/list/item/item.component.html b/frontend/projects/marketplace/src/pages/list/item/item.component.html index f13992d75..0220a0a0c 100644 --- a/frontend/projects/marketplace/src/pages/list/item/item.component.html +++ b/frontend/projects/marketplace/src/pages/list/item/item.component.html @@ -1,6 +1,6 @@ - +

diff --git a/frontend/projects/marketplace/src/pages/list/item/item.module.ts b/frontend/projects/marketplace/src/pages/list/item/item.module.ts index 7f3dcde4a..dd157174e 100644 --- a/frontend/projects/marketplace/src/pages/list/item/item.module.ts +++ b/frontend/projects/marketplace/src/pages/list/item/item.module.ts @@ -3,12 +3,18 @@ import { NgModule } from '@angular/core' import { IonicModule } from '@ionic/angular' import { RouterModule } from '@angular/router' import { SharedPipesModule } from '@start9labs/shared' - import { ItemComponent } from './item.component' +import { MimeTypePipeModule } from '../../../pipes/mime-type.pipe' @NgModule({ - imports: [CommonModule, IonicModule, RouterModule, SharedPipesModule], declarations: [ItemComponent], exports: [ItemComponent], + imports: [ + CommonModule, + IonicModule, + RouterModule, + SharedPipesModule, + MimeTypePipeModule, + ], }) export class ItemModule {} diff --git a/frontend/projects/marketplace/src/pages/show/dependencies/dependencies.component.ts b/frontend/projects/marketplace/src/pages/show/dependencies/dependencies.component.ts index 13ff86809..a6ecb103f 100644 --- a/frontend/projects/marketplace/src/pages/show/dependencies/dependencies.component.ts +++ b/frontend/projects/marketplace/src/pages/show/dependencies/dependencies.component.ts @@ -11,6 +11,7 @@ export class DependenciesComponent { pkg!: MarketplacePkg getImg(key: string): string { + // @TODO fix when registry api is updated to include mimetype in icon url return 'data:image/png;base64,' + this.pkg['dependency-metadata'][key].icon } } diff --git a/frontend/projects/marketplace/src/pages/show/package/package.component.html b/frontend/projects/marketplace/src/pages/show/package/package.component.html index 9ea3393e7..ca853030e 100644 --- a/frontend/projects/marketplace/src/pages/show/package/package.component.html +++ b/frontend/projects/marketplace/src/pages/show/package/package.component.html @@ -1,9 +1,5 @@
- +

{{ pkg.manifest.title }}

{{ pkg.manifest.version | displayEmver }}

diff --git a/frontend/projects/marketplace/src/pages/show/package/package.module.ts b/frontend/projects/marketplace/src/pages/show/package/package.module.ts index ec15f429b..665e146b5 100644 --- a/frontend/projects/marketplace/src/pages/show/package/package.module.ts +++ b/frontend/projects/marketplace/src/pages/show/package/package.module.ts @@ -8,16 +8,18 @@ import { } from '@start9labs/shared' import { PackageComponent } from './package.component' +import { MimeTypePipeModule } from '../../../pipes/mime-type.pipe' @NgModule({ + declarations: [PackageComponent], + exports: [PackageComponent], imports: [ CommonModule, IonicModule, SharedPipesModule, EmverPipesModule, TickerModule, + MimeTypePipeModule, ], - declarations: [PackageComponent], - exports: [PackageComponent], }) export class PackageModule {} diff --git a/frontend/projects/marketplace/src/pipes/mime-type.pipe.ts b/frontend/projects/marketplace/src/pipes/mime-type.pipe.ts new file mode 100644 index 000000000..40000a47b --- /dev/null +++ b/frontend/projects/marketplace/src/pipes/mime-type.pipe.ts @@ -0,0 +1,29 @@ +import { NgModule, Pipe, PipeTransform } from '@angular/core' +import { MarketplacePkg } from '../types' + +@Pipe({ + name: 'mimeType', +}) +export class MimeTypePipe implements PipeTransform { + transform(pkg: MarketplacePkg): string { + switch (pkg.manifest.assets.icon.split('.').pop()) { + case 'png': + return `data:image/png;base64,${pkg.icon}` + case 'jpeg': + case 'jpg': + return `data:image/jpeg;base64,${pkg.icon}` + case 'gif': + return `data:image/gif;base64,${pkg.icon}` + case 'svg': + return `data:image/svg+xml;base64,${pkg.icon}` + default: + return `data:image/png;base64,${pkg.icon}` + } + } +} + +@NgModule({ + declarations: [MimeTypePipe], + exports: [MimeTypePipe], +}) +export class MimeTypePipeModule {} diff --git a/frontend/projects/marketplace/src/public-api.ts b/frontend/projects/marketplace/src/public-api.ts index b9e8c4686..fef451a3e 100644 --- a/frontend/projects/marketplace/src/public-api.ts +++ b/frontend/projects/marketplace/src/public-api.ts @@ -22,6 +22,7 @@ export * from './pages/show/package/package.component' export * from './pages/show/package/package.module' export * from './pipes/filter-packages.pipe' +export * from './pipes/mime-type.pipe' export * from './services/marketplace.service' diff --git a/frontend/projects/marketplace/src/types.ts b/frontend/projects/marketplace/src/types.ts index 91bc44495..8187d3bc0 100644 --- a/frontend/projects/marketplace/src/types.ts +++ b/frontend/projects/marketplace/src/types.ts @@ -47,6 +47,9 @@ export interface MarketplaceManifest { short: string long: string } + assets: { + icon: string // ie. icon.png + } replaces?: string[] 'release-notes': string license: string // type of license diff --git a/frontend/projects/shared/assets/img/service-icons/bitcoind.png b/frontend/projects/shared/assets/img/service-icons/bitcoind.png deleted file mode 100644 index 26ab11e1d4faab186ec0effe67c88683b990cc2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26145 zcmY(p1ytNW@GrV7OIdue;;@UmwzzxILUDK6;_mM5?pEBPKyjB++$j!4i@WXX?|<*R z_r08xGn2{8XENV>PfjvP#789=3{+xN004mTK~_=~06_T1A^^Z|{t-RLGK+r%WGSX7 z1_0E@p*E{wKL7w+*a3heBLILu9RMJ(&;Fqz_^%__ zTaTI|8WTac|jls{D=0RKRE=F|HG>y(Eo28AOH~d1pxZrIy(R8 ze?|6R{m%0jm_*#%vs%S?EkX@2)gtCV{OcxjiK%~*0xUk?n0FRqrv}=|4+zJ zV|C+VwR5y&aqO=Pwrj*ORT&{|@V4fNcNuuyL@mv;80Jf2M-}N%@r>znK5? z{2#tBhv5Hc{{LkE+m9gIf6o6ugZW>P{*UxusKTg%Z2#x838O0X(P;w!qJR&QVruRP ze>+k9^`vs{4Q~wGCKIBvlN7|kkO_MV)OC7FU}O!BTZ)V3S_*z5{r#egrW?_MX{QDa zN?ncLAg<O}vt3?kgSPTt<&xXS!`*>fNwL3nzbeOb`}jqO#%gu++Vn~4;2!wnm6}RS^X_qyz7T5A>>`TnH38ze4v=+DDC%E}H4!`(m z7zIisFU&qzyqUBVrLwqug4n1r;oAnJkMIp{Ik}St{y^{xNu#$1&+Mnqx?O#yn{@qJ zdP>v~D^5s_G5z*Q@b!}ucmS0D2YRNPpR?93 z$|dH$O;;Zs|enb zor=zs4kn+Jb7z-&h}6La(wLi*@~e0_FJQueb-6 zz$8Dd05*N>LH>Id791nyjO@22sLK}nLp@((>d6(9IQ|;yU?uFSyYILtM zWjMLU=hYp8B+qOXn}+xb%i(%zTN(PfhWA`{JNMECb$2%z^U^Y0=zKrM%%3H{DIE+Q zAQcBCX6DFnv47PVz4#b!{FdT#D#3&IS!nEz_oShuz~rVoLQccfYz5c+SW5monE)!R z)F3saQ`B|&jZqj1^KLC9m6%!vi8&!*X1A1@@8_0^8{3uuqp_7_^~{$bt%8M%CzSOc zlZ03M*0B34n5L~~=u_txcHWyVh@l!D@I4VbezgOl`CE)XRz@zyJ4h)uD^3!_Rc7k~ zDcUcjJBONm(i9j^!ZgVv>IfeMH6f%eoNd<$$8=&>#IUx?!*IBc3BVGN+b;OoKTmGT zKmHSYAH(jix6Zg&Oq0JSbh|(7dy;2*?kQcPvr3&uNriwZQ$&VA`F-qv)i-aF?6{ct z;)o9(Gi#E3!Zq0dJ_)ipQZm_hT(qo+2AYI>y&y^UJc zxp~JxnPwV^K2;i+f+WRi8d)xXdObeiKu9bQobl(l(n#rB~Wst1kX@`6P|MtEF zD}^~dW0yLdjXh@BD?r*sRTACX$WFfJ%m`z}-_C2yyVLy3-Hv0@dYxxRxO}COI;=2q@*z8ov!x?Qd3|oBf{wsZs!_jzhhLv4;T zd>v#>4tG|Z0ZXIN)xi6DYqt2ZZfY`WpZ!@wad2H%1w}vev*v08Mt9E%fR)T!cy(YNK1Q|31sZls@Fsga-LJC z{{z-Cl7ib}shx-1s#&ykSr4<0cDoBk|LAx#mVXHD={@n?7ZAJlGafP|^gP~s_&ZGe z@`iY@L}MO15IEK+S;p)w_vK1ufz(@~;j?soemPi_BW05HOfbczId34YpAU7{+`9+$vO1-9W z{2F1WpTL0~Jm+HLd)ogP$>LRQn?HizF?Lh-<#s3WFa9mYn1y8QYPa{P_TgGYyN*r= zQ-F2wbHmX;@b1jm{EJWN(a46h$h;DH=D&Y>2JQ+i|NA+hJF-Kcb|v5WW(r~^Y}T-* z@Rp)2kW!uQCP@ECH5N&E~4I8$cRFB+oQHFjo zYmHyt{bu(H81vw%GunTq?DomH*};>@Ck5jf(Y)Xtqd`F}AnoSjmzOoG;UrmhR!RTx z_qZA?K5N-mitA6!P!VF^h;)_){pjaC^r!nZFi?1h&ZyiCLAh`7IQg+Un$3#ROigNs z)w2zI5@QkpuhHyD)Af~0#Y0$Z3LKa2)j-L-aL%(`RyE1LPo#-5q#i()D9mdh85l|n z__zuB{?gIr`#R?g>&7X~ZP}iK{SnfxCzyP^iI9!as|5NYaJw_`myqbrhLk)aX5Hc| zi^nXqhSC7AFD*4D4DblgR_mVWws*+b=53m=m)vh$CM2p?jz1v#oj2XJG}O@($HgpU zhf)E?Pj$Zczpd@cwc78Jd-y}!^xPPKHy9>j@jzk&;x_V;DhF-vZt>zCAagU~KD(?o z#N53rbgU}?`_t=#F3iWTs}8)8OG&^KYvPazt#yL@f${}N_%-l}{(j9yzTK_?7f*zE zFr?ME3NSd5r@j1ehNA3)gc}3xu6wx{H#{z&NTY+)$%$zYC>b&PTEQZ(fY)Y47i_G$3uMil$f?pa|tSVHH;Zaezojl(HI4d?Nq%Ua3R&YUv@LJ8?9kRu(<()qOJSIhRP z?K9~j)w`p&5tR8h@ZC8Eo4+$-rYvh3tgr6|K<2W7N&NN*v!>W_YGzZ*8Q+hBSc0g`)TM3K4yHzJY`g{(M zMcfy0b%VR$Z#%~&*87=lOBWP`7K!9=1dmkwZsE0~HEUbFDMl->B;7}4ml`HasQBwC zo9lPwpBd^b3}=Dve`-s&a2Cx$kdY!>BW;KCwbW{obxL368#A&p63iYT66z=)2TNs_ z6d;c9L56*0TlokL_!$XT!DQg=`FeJ)@V<1pz9i_V;G2sW;D>!?xZv~5tU$MM^UFl7 zi0gTImUK_Gr87Z*pXs zmTIW!B*O3U6D<1~CIOMD)TR-;&I-a(Q>ARVKqH9`&`i`R!xQ>bhR9DBoJavAJ5rxaL^`!|AMT=o;0a~N;H&k(fMb}Q?YK+}~gH`rNTzvpW%z7uN*s&~)7Ymdff{jzO}DjhN5!0(N4~o^%KKyF%B^;SvIgaR6DSzpI03Rh@?^f zxE#2QP3SW*V17&y&1{syT%6o76bz7zQLN4OdPmX06&(2@MC#H4AoJANXtR~QZ~xi{g>Id zl?&ArQ7(w@=>T;C8asA%H>Hh7m~Zd0ks#YQ&nd(jFIN||OpS1d6ke|oxh{7UF3*9L zpF|dw8({XsoUxO&H)8GzNcLch9icI6%b$Wz+SfL4@$C(&VA0$`i3sPowrUrzyO2WM zcz0lPG|k6Pu31|}^Yga!C0xu|)-efw!HA{Nli52NJWt8zB!@_K24N#?pk8uW!^^T8 z$lfnrRhrmt*^-GiRT{$wmFuu$4_eAz`+liQskEuQie!~lTCexLk8feX{X2!@=VBXy z>6))7L0g_p4K66}U!OF`J=oS&;G#QHXJPTgr4^#0yYOeF61qtZ&#wbRcO-_Xgy^CW zV8Texle12Fr{4YFXKegmMiGLN9-phx!^upH&oKku+Uu`!2x%c5-*kl|&>mJ|owR+w zstrMdyl7Q3>T&_6nC{rl1PN#kEU7(fi+%g+HU8QrI>z5!9jD~_ap7ylE zHlNlI$Pm-F`O@vHIH2k`n{C(PuWUv6?zzN|A6h3q>-+8L;_n|o0m#sA!gdoMo&yMZ zGj)lbgCTYJN_B@ECFb-xWPhP~sH=G!HO|A@j5kAYjq;Xi_0h$R8XQYjP0v$-d$2wb zBvudw2`N^^4r6Da2EQi?4N~i3we@-s#a~hNWL(AZRn+Jm>x1=XeO;_Ms(NEOG5Vq} zR}!>K5bySO6CIoBrDCm-8!r1Q!pE#=ae*_Gd;o$1EU*ylT3*95^aqe71A1}DL;GHy za@az5@@(6D?TAT-IrbTo){4eYt4TukNh@IYAv5Z+FHS2R#~NUC+W_MU$hcb25vsqd(BUjq`_g z5R2Cn^v#5v^)@nU-N{s8Ktgiv@&zEM{+9%E<77-+7a)d0vj|>2bKdnkz785he97{}K2Se7^&2pTa`x1C7KwtoHCVN$P`5 z$@{cHF+Y}q<@~u_sj)2K4WaLEL(AA7^>`!e>~pfquA3s{6m|2TizWiZf z`#>64YRG&Shn~IXM{_AMb^E91^@$nC73SYJ-A*;zP z6gg1TlL7Uv69o2Xy)E*eW}xC6I|X0GA#?@9#|oPO^5(GgQC@h z))mr#IYv6`Z@3|TB^+$hUD&$>5o}8D1N`k|q8B|pwK7Wp{b|;gR_9K4Z+35WB_2cs z?%kMaaUKlaa*;SC&_h{hDZyqDaGoc=B9flzk=Oy)7*WTYor{P82>2taL3Y>o*+U?E zfo4&G`sh2(hrjKv6Nl#rn&yqJYHB4_UjZdsS54M@I^RDK>Ur(KRdx5+d6(K$%Jq+- zfKOsa1(F}ZF)8pk3^e+LPZ%g6%VGOlskQk`>B@ZRI6HG_0fLlH`SX6owK;BT%~e2r z8M(*#`d9raw`!4~N;`q)sPR{IV`I+(^%ero86*i&YUOc*kw5dWKT?n$<}@$Nz18+= z+<2dloY!kn7F1(=QN=SZLDa{eK?UjF%w2E7LfKOE;(azw+{sIz19GG>lJCO*?H4#O z

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 T|0R&U00000NkvXXu0mjf)KbQX diff --git a/frontend/projects/shared/assets/img/service-icons/bitcoind.svg b/frontend/projects/shared/assets/img/service-icons/bitcoind.svg new file mode 100644 index 000000000..af6a3140b --- /dev/null +++ b/frontend/projects/shared/assets/img/service-icons/bitcoind.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/frontend/projects/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.module.ts b/frontend/projects/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.module.ts index 029fef1fb..3cef27e61 100644 --- a/frontend/projects/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.module.ts +++ b/frontend/projects/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.module.ts @@ -1,18 +1,18 @@ import { NgModule } from '@angular/core' import { CommonModule } from '@angular/common' -import { Routes, RouterModule } from '@angular/router' +import { RouterModule, Routes } from '@angular/router' import { IonicModule } from '@ionic/angular' import { - SharedPipesModule, EmverPipesModule, MarkdownPipeModule, + SharedPipesModule, TextSpinnerComponentModule, } from '@start9labs/shared' import { - PackageModule, AboutModule, AdditionalModule, DependenciesModule, + PackageModule, } from '@start9labs/marketplace' import { MarketplaceStatusModule } from '../marketplace-status/marketplace-status.module' import { MarketplaceShowPage } from './marketplace-show.page' diff --git a/frontend/projects/ui/src/app/pages/updates/updates.module.ts b/frontend/projects/ui/src/app/pages/updates/updates.module.ts index e425bc94a..e07e798b4 100644 --- a/frontend/projects/ui/src/app/pages/updates/updates.module.ts +++ b/frontend/projects/ui/src/app/pages/updates/updates.module.ts @@ -14,6 +14,7 @@ import { SkeletonListComponentModule } from 'src/app/components/skeleton-list/sk import { RoundProgressModule } from 'angular-svg-round-progressbar' import { InstallProgressPipeModule } from 'src/app/pipes/install-progress/install-progress.module' import { StoreIconComponentModule } from 'src/app/components/store-icon/store-icon.component.module' +import { MimeTypePipeModule } from '@start9labs/marketplace' const routes: Routes = [ { @@ -23,6 +24,7 @@ const routes: Routes = [ ] @NgModule({ + declarations: [UpdatesPage, FilterUpdatesPipe], imports: [ CommonModule, IonicModule, @@ -35,7 +37,7 @@ const routes: Routes = [ InstallProgressPipeModule, StoreIconComponentModule, EmverPipesModule, + MimeTypePipeModule, ], - declarations: [UpdatesPage, FilterUpdatesPipe], }) export class UpdatesPageModule {} diff --git a/frontend/projects/ui/src/app/pages/updates/updates.page.html b/frontend/projects/ui/src/app/pages/updates/updates.page.html index 52de411ac..be48693f9 100644 --- a/frontend/projects/ui/src/app/pages/updates/updates.page.html +++ b/frontend/projects/ui/src/app/pages/updates/updates.page.html @@ -33,9 +33,7 @@ - +

{{ pkg.manifest.title }}

diff --git a/frontend/projects/ui/src/app/services/api/api.fixures.ts b/frontend/projects/ui/src/app/services/api/api.fixures.ts index 29f436b9e..17c74a12e 100644 --- a/frontend/projects/ui/src/app/services/api/api.fixures.ts +++ b/frontend/projects/ui/src/app/services/api/api.fixures.ts @@ -7,7 +7,7 @@ import { PackageState, ServerStatusInfo, } from 'src/app/services/patch-db/data-model' -import { Metric, RR, NotificationLevel, ServerNotifications } from './api.types' +import { Metric, NotificationLevel, RR, ServerNotifications } from './api.types' import { BTC_ICON, LND_ICON, PROXY_ICON } from './api-icons' import { DependencyMetadata, MarketplacePkg } from '@start9labs/marketplace' @@ -1873,7 +1873,7 @@ export module Mock { state: PackageState.Installed, 'static-files': { license: '/public/package-data/bitcoind/0.20.0/LICENSE.md', - icon: '/assets/img/service-icons/bitcoind.png', + icon: '/assets/img/service-icons/bitcoind.svg', instructions: '/public/package-data/bitcoind/0.20.0/INSTRUCTIONS.md', }, manifest: MockManifestBitcoind, @@ -1958,7 +1958,7 @@ export module Mock { 'dependency-info': { bitcoind: { manifest: Mock.MockManifestBitcoind, - icon: 'assets/img/service-icons/bitcoind.png', + icon: 'assets/img/service-icons/bitcoind.svg', }, }, 'marketplace-url': 'https://registry.start9.com/', @@ -2014,7 +2014,7 @@ export module Mock { 'dependency-info': { bitcoind: { manifest: Mock.MockManifestBitcoind, - icon: 'assets/img/service-icons/bitcoind.png', + icon: 'assets/img/service-icons/bitcoind.svg', }, 'btc-rpc-proxy': { manifest: Mock.MockManifestBitcoinProxy, diff --git a/frontend/projects/ui/src/app/services/api/mock-patch.ts b/frontend/projects/ui/src/app/services/api/mock-patch.ts index 6ee21f137..c2fc9b142 100644 --- a/frontend/projects/ui/src/app/services/api/mock-patch.ts +++ b/frontend/projects/ui/src/app/services/api/mock-patch.ts @@ -79,7 +79,7 @@ export const mockPatchData: DataModel = { state: PackageState.Installed, 'static-files': { license: '/public/package-data/bitcoind/0.20.0/LICENSE.md', - icon: '/assets/img/service-icons/bitcoind.png', + icon: '/assets/img/service-icons/bitcoind.svg', instructions: '/public/package-data/bitcoind/0.20.0/INSTRUCTIONS.md', }, manifest: { @@ -670,7 +670,7 @@ export const mockPatchData: DataModel = { manifest: { title: 'Bitcoin Core', } as Manifest, - icon: 'assets/img/service-icons/bitcoind.png', + icon: 'assets/img/service-icons/bitcoind.svg', }, 'btc-rpc-proxy': { manifest: {