From f8058f10c7bd4d8a9c461d68981922c2880b3a25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C5=A1per=20Grom?= Date: Mon, 13 Jan 2025 22:27:24 +0100 Subject: [PATCH 1/5] Prepare base identity config --- .../public/images/identities/bigquery.svg | 1 + frontend/public/images/identities/census.png | Bin 0 -> 5960 bytes .../public/images/identities/confluence.svg | 14 ++ .../public/images/identities/crunchbase.png | Bin 0 -> 9561 bytes frontend/public/images/identities/cvent.png | Bin 0 -> 27245 bytes frontend/public/images/identities/devto.png | Bin 0 -> 9178 bytes frontend/public/images/identities/discord.png | Bin 0 -> 17453 bytes .../public/images/identities/discourse.png | Bin 0 -> 5117 bytes .../public/images/identities/facebook.png | Bin 0 -> 3931 bytes frontend/public/images/identities/gerrit.png | Bin 0 -> 24138 bytes frontend/public/images/identities/git.png | Bin 0 -> 2383 bytes frontend/public/images/identities/github.png | Bin 0 -> 8640 bytes frontend/public/images/identities/gitlab.png | Bin 0 -> 2722 bytes .../public/images/identities/groupsio.svg | 197 ++++++++++++++++++ .../public/images/identities/hackernews.svg | 7 + frontend/public/images/identities/hubspot.svg | 1 + frontend/public/images/identities/jira.png | Bin 0 -> 23181 bytes frontend/public/images/identities/lfx.png | Bin 0 -> 273 bytes .../public/images/identities/linkedin.png | Bin 0 -> 7088 bytes frontend/public/images/identities/make.svg | 26 +++ frontend/public/images/identities/n8n.svg | 3 + .../{integrations => identities}/reddit.svg | 0 .../salesforce.png | Bin .../{integrations => identities}/segment.svg | 0 .../{integrations => identities}/slack.png | Bin .../snowflake.svg | 0 .../stackoverflow.png | Bin frontend/public/images/identities/tnc.png | Bin 0 -> 567 bytes .../twitter.png} | Bin frontend/public/images/identities/zapier.png | Bin 0 -> 2392 bytes .../src/config/identities/bigquery/config.ts | 11 + .../src/config/identities/census/config.ts | 11 + .../config/identities/confluence/config.ts | 11 + .../config/identities/crunchbase/config.ts | 11 + .../src/config/identities/cvent/config.ts | 11 + .../src/config/identities/devto/config.ts | 11 + .../src/config/identities/discord/config.ts | 11 + .../src/config/identities/discourse/config.ts | 11 + .../src/config/identities/facebook/config.ts | 11 + .../src/config/identities/gerrit/config.ts | 11 + frontend/src/config/identities/git/config.ts | 11 + .../src/config/identities/github/config.ts | 11 + .../src/config/identities/gitlab/config.ts | 11 + .../src/config/identities/groupsio/config.ts | 11 + .../config/identities/hackernews/config.ts | 11 + .../src/config/identities/hubspot/config.ts | 11 + .../config/identities/identities.helpers.ts | 21 ++ frontend/src/config/identities/index.ts | 73 +++++++ frontend/src/config/identities/jira/config.ts | 11 + frontend/src/config/identities/lfx/config.ts | 11 + .../src/config/identities/linkedin/config.ts | 11 + frontend/src/config/identities/make/config.ts | 11 + frontend/src/config/identities/n8n/config.ts | 11 + .../src/config/identities/reddit/config.ts | 11 + .../config/identities/salesforce/config.ts | 11 + .../src/config/identities/segment/config.ts | 11 + .../src/config/identities/slack/config.ts | 11 + .../src/config/identities/snowflake/config.ts | 11 + .../config/identities/stackoverflow/config.ts | 11 + frontend/src/config/identities/tnc/config.ts | 11 + .../src/config/identities/twitter/config.ts | 11 + .../src/config/identities/zapier/config.ts | 11 + .../integrations/{custom => }/cvent/config.js | 0 .../integrations/{custom => }/cvent/index.js | 0 .../src/integrations/integrations-config.js | 6 +- .../integrations/{custom => }/lfx/config.js | 0 .../integrations/{custom => }/lfx/index.js | 0 .../integrations/{custom => }/tnc/config.js | 0 .../integrations/{custom => }/tnc/index.js | 0 .../contributor-details-identity-item.vue | 25 ++- 70 files changed, 688 insertions(+), 16 deletions(-) create mode 100644 frontend/public/images/identities/bigquery.svg create mode 100644 frontend/public/images/identities/census.png create mode 100644 frontend/public/images/identities/confluence.svg create mode 100644 frontend/public/images/identities/crunchbase.png create mode 100644 frontend/public/images/identities/cvent.png create mode 100644 frontend/public/images/identities/devto.png create mode 100644 frontend/public/images/identities/discord.png create mode 100644 frontend/public/images/identities/discourse.png create mode 100644 frontend/public/images/identities/facebook.png create mode 100644 frontend/public/images/identities/gerrit.png create mode 100644 frontend/public/images/identities/git.png create mode 100644 frontend/public/images/identities/github.png create mode 100644 frontend/public/images/identities/gitlab.png create mode 100644 frontend/public/images/identities/groupsio.svg create mode 100644 frontend/public/images/identities/hackernews.svg create mode 100644 frontend/public/images/identities/hubspot.svg create mode 100644 frontend/public/images/identities/jira.png create mode 100644 frontend/public/images/identities/lfx.png create mode 100644 frontend/public/images/identities/linkedin.png create mode 100644 frontend/public/images/identities/make.svg create mode 100644 frontend/public/images/identities/n8n.svg rename frontend/public/images/{integrations => identities}/reddit.svg (100%) rename frontend/public/images/{integrations => identities}/salesforce.png (100%) rename frontend/public/images/{integrations => identities}/segment.svg (100%) rename frontend/public/images/{integrations => identities}/slack.png (100%) rename frontend/public/images/{integrations => identities}/snowflake.svg (100%) rename frontend/public/images/{integrations => identities}/stackoverflow.png (100%) create mode 100644 frontend/public/images/identities/tnc.png rename frontend/public/images/{integrations/twitter-x-black.png => identities/twitter.png} (100%) create mode 100644 frontend/public/images/identities/zapier.png create mode 100644 frontend/src/config/identities/bigquery/config.ts create mode 100644 frontend/src/config/identities/census/config.ts create mode 100644 frontend/src/config/identities/confluence/config.ts create mode 100644 frontend/src/config/identities/crunchbase/config.ts create mode 100644 frontend/src/config/identities/cvent/config.ts create mode 100644 frontend/src/config/identities/devto/config.ts create mode 100644 frontend/src/config/identities/discord/config.ts create mode 100644 frontend/src/config/identities/discourse/config.ts create mode 100644 frontend/src/config/identities/facebook/config.ts create mode 100644 frontend/src/config/identities/gerrit/config.ts create mode 100644 frontend/src/config/identities/git/config.ts create mode 100644 frontend/src/config/identities/github/config.ts create mode 100644 frontend/src/config/identities/gitlab/config.ts create mode 100644 frontend/src/config/identities/groupsio/config.ts create mode 100644 frontend/src/config/identities/hackernews/config.ts create mode 100644 frontend/src/config/identities/hubspot/config.ts create mode 100644 frontend/src/config/identities/identities.helpers.ts create mode 100644 frontend/src/config/identities/index.ts create mode 100644 frontend/src/config/identities/jira/config.ts create mode 100644 frontend/src/config/identities/lfx/config.ts create mode 100644 frontend/src/config/identities/linkedin/config.ts create mode 100644 frontend/src/config/identities/make/config.ts create mode 100644 frontend/src/config/identities/n8n/config.ts create mode 100644 frontend/src/config/identities/reddit/config.ts create mode 100644 frontend/src/config/identities/salesforce/config.ts create mode 100644 frontend/src/config/identities/segment/config.ts create mode 100644 frontend/src/config/identities/slack/config.ts create mode 100644 frontend/src/config/identities/snowflake/config.ts create mode 100644 frontend/src/config/identities/stackoverflow/config.ts create mode 100644 frontend/src/config/identities/tnc/config.ts create mode 100644 frontend/src/config/identities/twitter/config.ts create mode 100644 frontend/src/config/identities/zapier/config.ts rename frontend/src/integrations/{custom => }/cvent/config.js (100%) rename frontend/src/integrations/{custom => }/cvent/index.js (100%) rename frontend/src/integrations/{custom => }/lfx/config.js (100%) rename frontend/src/integrations/{custom => }/lfx/index.js (100%) rename frontend/src/integrations/{custom => }/tnc/config.js (100%) rename frontend/src/integrations/{custom => }/tnc/index.js (100%) diff --git a/frontend/public/images/identities/bigquery.svg b/frontend/public/images/identities/bigquery.svg new file mode 100644 index 0000000000..4ee5458647 --- /dev/null +++ b/frontend/public/images/identities/bigquery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/images/identities/census.png b/frontend/public/images/identities/census.png new file mode 100644 index 0000000000000000000000000000000000000000..bd3874bc8bb82afb4299d8193bd483c4a313902c GIT binary patch literal 5960 zcmYLN2{_bU)W82(%nUP@QMN(0(eNT7lw<~3rZ5ym(GW6~eMw6G4Ovo%QKV%e)%&8R z@>)wHOVMJfSF)6f%1bJgO6t4g{l4e(Jf1mo=HA~u_uPAa_nec(ad)Ojt4RX@D6TG! zUI1X&03bh!Qcz>E72OLzNKr1nu>i;@O8yaW`iu%xBC%f1_TcJc^>O$Gw~OV*0^oYC z%+EkP07}EIj;zgz$cN$K<3mnLcrH6nai#iUjU%&@IDINz)OC(ANyIG=ZW-Y5LZ1#l zv0H!RXl29Pyrz%XL?q=j`t8%xu`vq-0{`!ysD7U!?o(IS`INJ0#KP=c%ML}d3nxe= z!*q6PVRpVJ$N>`h^Fn3}U9}(FWV?~ty&L`1BkvVU!xN%BJ##E8w2dX!Ty?K`sslPZd z@-GF!l}=Auw~TZ2(@%%^>@+>$@{G{=?{ie6OP)cioWq vWXS61E!JQ%#A1S?h6h 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 literal 0 HcmV?d00001 diff --git a/frontend/public/images/identities/confluence.svg b/frontend/public/images/identities/confluence.svg new file mode 100644 index 0000000000..d0751a39c1 --- /dev/null +++ b/frontend/public/images/identities/confluence.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/frontend/public/images/identities/crunchbase.png b/frontend/public/images/identities/crunchbase.png new file mode 100644 index 0000000000000000000000000000000000000000..24df79060b594e2c973b877d67a250e5993fb320 GIT binary patch literal 9561 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 PpGyN>6P=3d4pILPp$R*X literal 0 HcmV?d00001 diff --git a/frontend/public/images/identities/cvent.png b/frontend/public/images/identities/cvent.png new file mode 100644 index 0000000000000000000000000000000000000000..c94c160e0adcc7d979902a2a38328b18501161ff GIT binary patch literal 27245 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

*DgWZ63lysD!%&jkd8PbZCVzs zIqqdPmc2OU-4!v=*^)HVSD0I1-pGpgsfYY_IwD2rkYoYP&K19i4cFxpU2C6HmZm#j zxq4{g+K4zP^-JN`T!CSeOX}z5dd%^g<$ zv=!k3R+@Z?92<}$&z7PA!f@o2r5{T@IR_?JbTEA6t_JSa&S@c}pWS)eQpcm9N01EU z?L5?ls#nIFu;-eC>#r4Ilec$_@FJ&y_NQ==&8|-M*EYZh`eGLFgF19efNIj6aUPKSUY{N1DB5a2w@`f971HJjsjF&#tru0Wcv2V1MxIOy zp>07vDv(i#F`-KDon(X#f%p@BxNE@^kAnzT$|@YO^1c_~gCSAb4LN5epAouIvVVypvrK86yd!>gf6F0{iJ=q+p5b>L6L`L)F&@ zUPjhfcibR_^WohNL07VSUVeSDa&?I%4uFSa(5g%UOUA89#-H%o2SfA#_8Oyt`J%Q0K?YX6DWQ!5YVA`UW&F~u_Fm;~ zMjyu*u6WqO;o#)b0e*0I?fU$!@;rH|lGjp6ti$*R+idR&YDgr#(t9PH6a1;1bKx={V$P4bFzKrfEpowke`8Vt^Spz;$gRj`VK-*AtoV_5#m| z+ccq|w}SniwrNK?w9XZz{SXDNPW91Qi;2)Z2^Fvw?gSdYpk|GYBO<_WEgUTs&$|0{ zSsn63_pqeehrmVC55~3=`J8$Do=0Pi{}qSPN{+ld0KE z-d^YnoX}Hf8{5Ry_h%kFRw3Z9rz$n85FG$ICWF6b&i(2bBZJNS%|`u9#@xvny%TG} znDzman}oBHCx3vTu0WHYG+3@&_+D4$ZjwW2I!%)R>Q#61AkrZIq~ME+z!Q4`S91y^ z_zs4+%mw#lE3%DzR8$j&EVj__4vhW_yMOsd5^5GomElej)Y9@yb@CPI*2{7Br0BoT zm3QK@da1h}Sm7{D#i|5tnMbQaGQbiAl2XO!wBnBqYVT9S681qO39M(RcYFBAS?{eV z$ITPpxw@cbk_Gm6Zbzj+Vu>H-(sWzK#M*f@Zm@R#e|5)O4VuzbhG%L1$CVsHd$@xYHON42MpIK|- zD#shxVs2&tbU)@bY5L46T)ZuEpX~vy2Tzlq3bzE`H0}@IWK|(*19C^bz~1?sE$Egu z7@4qbG||Wmd|A~Dwtp~1gw4V@`2|*rEZVV+nz)KnAUZi{-Ao69b&w$ntMBaJxaj~8 zS9NeC;o%3^IA?JJL^x#w^~SCp?$o@@P`$_vJh>5B&N$?gabIJZ9jx;%YSaE8xq<4? z$oQsd-}Au}z!3kT>S+kA#xXBH@hz4MeIr@m*fwCcj>>5LA0@hGwLau?Av}!yFMBPw znx1Au1{Zl0;P#bE)|GxhIeWvg54HVb>94>O*LO`o!%KLr{OEsr{`4KqvuS!6G;)0@ zlN?=Qn$-m!<+m3}kuf8@4#I3x+q8f{q7tqQVrw$4Nv|4^qka@-Cx+M9$8Pih%JtSE zF?xK*z(rJ7GM70Krja;*SF ziKWL}BtAwyl0aA0vhjxPSF+c&ewJGjfWTYHl`bP4TqMAfi%Th+C8m}l%8ig7s|ZYs zSHs-4(lLt&BHnylASGo|{p|goiwAlglI;Mkfdk>KRDbV(dypwgPzD9Z7zM0J{3mw- z*tc`NWRVinN{3&{gS9Qv!;imrw@HBP;2cX4!F+Wa>qzfphbc=PH*6HRq)E1|aObGx zP=(f{q@-kXZ`tod{cMdz51A+WjV!pr}tl`3?th12BZ1#yrsb61%=BDo;9c_2e{3gb2em{GfYCJd^A?|R^x^EAsB z@SOn6u7pb}r>jDaj!3s;mAn^YCtLZ9Dd)}KJL!vHvKMUGNQb!%EEFCS>33LEhmDC%{qWi>0_zi`=r@o`#61TVT85BiHhKNHLNIW6?QFHNBM z%cd9&^`!QSdi@z78H5M^akxzx|AK!WU+LG1S^!bJ+}UY`VSfQ!UqoVQt%cToW$r18 zN3KYZsg&w(YfU;XUk~m1_e5ok+u7E&zFh?!P69G)`o2G|8Es*a_>Kr}Q0lo!#*ACw zeq_kZVH z>;4>_`T2X|(Us;X7fv5nY!tk(JOTIu?MGnskr+>f4;tsBZbC(zTYK7>Bn7YOq51#`U1dbmsYc=Q0 z)E1sN!CW`UGklIdi&up@^@Uf3XaTs*=w!WGj6dGW>)rPCs|Co!Cx=p9%0 zzI0sPz@)qrrO~YDwDKxehA6c-QN!PjMke458^)6vIUKnsEs`7ox87KP-hXCyb-qy0 zQO5G+!PtMeUWK_r(hss`wzV`vo~W23%$41<4Ojg$=#E`i?lu-;if^BhqNT?Fk(v7z zn{yY5d)0 z=;_I@*HaYMHmMSe`HCm*bV)C4eK_UDgos}J%!9Eh$82ah2SfiXU7R;MS2I?H873Dm*rnhNqcq>fxg*8oB< zkCN|#>w`93y%Zp!+Zp*j7YP^a$Tb5sy6*-gKdoXN${`>zvM)aI`{oKN=2|QID0R?R z5EY4*XewfSKp%hcEkl8@Z&j@xmflKZ739RBmOnxe+KT-yfGSu*k@aBH)92KB1jNwt z3Y`U2V~6)ms2gx_LgEeR6MunB2D{ulKWkmY{G5@zWi%d)18Pze3n#f2wwfh~^7Xy} ze6Tkt1^6yc45+}PD>2s3LK)5BMsiPodsc3`zLHj>i-^iW(D#*966`{t+b)N(^ z&hltpSFH)IHwQ5FW2cZ6a{TPyLh&ULq9n09O6Ji!Zpi5trk%T`BLS39s}2g<7e1Ua zT=6NLs@(Q7!_WHK7NQFS1Sr(y-(*GPYI$wZ-XgA{~3brZ~2-idT z7-7{mOmodQ&d|fh!X#bdY)+9nfvR*-g<;(V+_Z{;=!r;=Q?ocICC|C>6>u{BK5^xg zK_)c3EoZyVXSSiAqjr$QX`fibO8X#ami&;SPGh)&(togLnfn|oX)fAA=VvMzcR_}6 zo^DGQ(=n=5AXLvYR%~&@bYIcQQy7gRkxE@5{3A;DO@%7$1E>zGOUoyNW^zzFe+SX4 zT9S*w`vU9QL{*(4=AB$&a&8}F#34yzELlW6_Ko2(Eg2vc5Kx z{o=%k5A&B@?-$^MvK?1K_Joyq#FGct$b@qk&613lW?E!R@AJQ=5%=^lCm6R6lw+!2k&JV(9a>td2Z=@2oAb}r~tAZG-Z$7Xa;vf zZ^9tPHhKhkvYy|Py8i7DotOU5No6A>Ej6AKR{9AGkgdaqaI*DuzzUf96rT_Snzht^n;}(|CpT@y89qEDKFHwLfy{Me4JhmY%WVeaR8&Uv2aIgiJ=MQdx`z6fW70|0RG?j4ja06@WC zp#TLL_+!^+=m`9A!S#-@2LMoiCVoRYT?%c$4_Q6c9(wAz*m`S@hm(Pddlfv_`Wre#U0AXDBu0ad;PBjef$_ z>YBbAO98>b@58a4-8Uo#QauzlM!$`I!%8d#+|gP(?BDn8_W=0*-}*wt99$7KD$srA zxRkxkq~%Op$Ii_rjrnP)|deY%vmZ(Q9@=C08U=tisOR$4%mo>-$b_{mELIR9LTzvNS$ z?S2VUMf)bWeccbiW0IS~0BqG8%6g4==A^VHC+`71R0tYGGkIJJ`A*BQmZx{D zX>mHrx*duM5aKfGT&p{@FU-7J?1KMWdS*`*$j)B0Ba63E6!KJummQ&w=%Ed02A4j_ z!8O!*F4q~5IOAR0ktyt{kgEbNr&TQYPf2Bat6Kq!+rZf0zB5n23nqK=T0EL-Y61}k zljVYqHBg#IYr1}wzi8neLY+#t%&qU*R=+(fJ$gE|GVIj?lf5-qsOCtX?fR~+!n@I7 zo+?D#a1^ITI#P{5x_qX3CIzU{l#i=#hZ?qSkaKNPwNR;mLdSs{Mku6Ka<5Rjm z>a_>1{5e(c4dZkge(CluMk9_BKs5T8UCVg4hKI=L!3yBJoWL^;j=3ynwV4;|>{pjG z0v;pyx9+*?r7Led1?cYutRw>`k3){Xcx+@Gewc{V6WY>94^fGL0gPsHWtwUaj(m*f zsYqlVh3rErg0Cel8)TG93gN}O+So4rVTTwyA|nA~C2sAmN9rw2BiPZCR8A=3CKI3! zAoltijDP#ssVv-wojt&q;ET}wON&qZ_KTOVVZ##69h)*dIWcg&F?#L_#d^f=$I|Qa z8B)XYc1YSJ#WF~?PP9~kowQXy!`5_ZS1UU%1i!QqXl7uDq&wxn3`|g~oXtfwTsq@8 zfz0v&gj)xST92``?JFy|!k5gBxD&rD`m{CZc zqa9nm!f15wa_iGiet6|B#YM?|juqCWyD!#n>8+Cb+z-Lar!+mzytOsjrg?W7eRW%r z38=Zf6?1iGD=E9!Yyh zJ_3;|<9g9LbQ5-l~r+(v|lJ1NI>_ba~NrajxOCDp-bM8O(K zF+R7Gbgq`KR4y2FHHLdnGwN)m|H%&*Bz+PS*m-bhNUurKs$Y_CsXp)k^Cl>dzO87J z!vltSPvEh6$-gc0+;x*2fIQqg2^wTcXi)|2UGsqwg1Yy@AA_*^aKCdTiPe=2};b_D?!h zTwG6W@1Rz~eM$Ry%-Sx)cWHmyr<{WPw52f0zM}vL_<^QH$TM!ZyKc^8Yytgri5}_g z#c6DpQkx8F{Y#`aU*iqA5^6c);gOseAj-UKE~78?rP6{5Rp3u=M>_;}RsN@T%eqO1 zz;W~?M23&MUR+*cFpkDlKl$P~bk+{O!Bj5ww`ASf%}F4)(vm#;e!lLr5vQ)q4>;(2 z)kVx^n4`Yur|d{Ap#BFq0B2{c8T{9*;tg4dQl1i9#>Co(2%E)7=;V(=9>{*KU zr2}qCAS)~4Ox&NXL8+a`%NFg(7Ebd;6DvmeDFTYp9k+l-tI zE`Hm+t;**ig2@{1r@NsQn|`LM_5>lv7pQLpzS@~|JMFF!>Mx4 zDdS`M3s01?wm`8s%_aJ5vIIoD4LgPgW!0r z<1H4Z(fzTd5^Fc4m<{Gt<*Eu^e=N~i3cxvbfccyJWt_$#=$U#6ogU+l$>9#?){!} z1tcaJ*j1{4d{3TDy_kD+iDUQ9G``|j!njrDHJuWiE{gYWC;M!#K$F;|d zfgR|SirBOJ#doHw4m%s{4(ew|y9e(g7N`LN5AC4-tK zvZTFzbC)OTeux#E^mR;z49*M?CGjy1*~|5Tsb|r5Rj>SFB~P>)t$As#IO+20;`P*F z+JKMsiBF#&K@KZ{Z^((_;BRG0Pb&ez#KY^R)PHTnauRHTpN>m8^4l*4Qyr2=uDp)W56B|S)R}f>zaP*PR_v_BQ@$LCkWmX?-lULhK z;EQPY12?jkB}~Q#wJ!5ajD3llXDy*9x55IVZL=4>+YR-Q$>xTU$5v(IW^C-a0%S3# zPD?rB+RgA;<0uv-ts2hAh$j;IE{2H?O%qmH6V&uJ!axj9l5X{S_!_z8?v3!?%8baU zLaHLAjR=AB;YvO~@&a=BOPCTQqiHi~*{8rgM@iwrY#*pTI@p)j@D|HhN9U#%uN5Y| zWoRha?2D-%jmH;ZU5iAZ_Fto+Yk;9F+u?>Jf&Os~=ZDEkfF;cLdW(Rsl>#K2E}-HP zolX%I#ij(~=|KO;J95WJAtPZxoj1tsFCdVs2;J1g8%IT{tj8C(+Xw7D`-9)V_w;r% zc_71mlxcf=R#X>F|F}tFOAk8A{R=gYVp!nE4s4qQFB28DESX7hR+=Y?&LZ$EJcr>Z zZeEo*F8QqkymqqV<;xw7ws;g|wflU1quUT~+yg5B)K%O_qz~xn4&xE=Hya##(DCk{ zsBvPFx9k>++nul;v~+`9ZU_s~hX9qTo}QMIdH4=ReWW5?VmbKffiz5v>XfnHYj#!( zHSeDeXHh@{e{&QP6-;>)K^GDg710;I{AcpA{l*w%EcWo8d0ezb0~oxaZt_v<8)miW zA08~VSU@V64_mvWa<;D$w_yLpc4T)+!4CO6%METpvqJypHEjDFkj7SnYbo4qQrBF2 z%oW&+rd6~ew~(?exLH-YHvkHyFd)uD?opzKP-o-REX@R-3hp<^A*iKtT!JtPrBBOxo4e9dp2kiGCFnN-cYA z`Q1tH`pD@IY~BF`3E=Ak6CH5i5(Vo?_4rKOk_aq8?bHC~= zUy5mL8>6-|T_$hV*NBTUBR><4iu!~LaeM3G0#N&np@Wx&h$_+PPH%Qr6|qD`3&K6SLxaYW3!Rx69?7ZC_@%62y#zBaBN)+9#_m!#gH`rywD{BaOasn>e zt<=Bp#Bg z@8q3<4oeTb2F9s%?}uyv^}b68;@WRQ4P5zWDmZh;pi>b0`?j{lzsmuYhCY5ey0~|K zT+_a*F=MCLFot{CNTB$D`rp#KqQ&d4cGbbiuz>x2oAZk}a;GI8a1Jj&)qCp!c;1*R z*)U9uN;x(oG%BhmeYvjxaq*mEr(lE<6L9f*10~S>8BNW{hwzUa{%fb`j6{i(Iy>{H z4#m8%|oDi`$0d2UFrR}+shD%>di&e=7rDub?tEI`R*C$RJ= z&?Kags3C?sWe)RW>kEUOj^skmah?F#&f}OcMLIgh#5tcMNjxw73N0t*$Y$eL?xLIP zs3N#-k?`drFs!E;qrPDnvJ9|Dnv;M zu{r%<`CA9(Y+=<=fgb`S2bh12{i;Vw2LgxCQGu)`s=;a)`IXdf4}Z?0=N0I zNdKvd-)eIME3p<^j{JAZpH9n_D-971FE>$4OyHwaNl+I$UVh7qTxrKv{9ljT@C|o7 z>))?+oS5q5mHKzBYt;aCRR*{Xdj_(^mmJd#&puIN!`9+mkbtCVHFGG@hLXzRMO~t` zoK{)^CO~1-tR7a67Cczt2&RtLX<+(4#%az3#PyAPfI=o7iCpm*8MeD))Ro9qVPI&s z8Y=-dXY3M~b1SXkv@&YF1}sVzXhFcc6ueZT;5P5{(u(T-dmv}6@DxcxN2g=iUEm}z zmQ?Oc;`p%M7s0VF?=B+a00ri`s9BrgeAm0wncu95BLcg!)^^I z0{5}RJrz=z8MV}T){QDSASq_^sFfa=qZNpUU&mEOz1Ip4hJ6np0M4kC4qUVfJx`@Y z``2i!2cRGXfOkqYgu{+#4?2m%7vs~UXV4Tl0T>W~6$AZ2;X~9eJ;ua5%uXKn-<@^B ziLoYXOXn_&M1hCz-jpH#n4AnyC>=|T3!+p|@-EQ?DnlgD{oc^#=CRztm^rweWI3~? z@BK;iQe$w7T9Sm}$=k%+DC&~{wA0jH0y7L%%87N%1V8Cw+j_NCZ;}SBGX#bN{AtKH zolTcOi?7mHc%b=c@f54+Qcg0PdS$cy5d{i`!WIgQ$o?`Un{_%qYXfEhc4FJ@3j;pu zyS3L=GDY{IOFe;Sb+*6%*`AG@c%PxBzG_ z?n+Gj^JOjXf_JS62l3{PLL0KWHNR50TK^t~iDM$lS4NxvN(+0ojUK@K=w0efG0YzD zHEAUs9OFrckASyG`KjJrO@o-%fYLeUF$K}(p#0xwzWJ#4xJL-{;ZkNSsE;)Yo1hbS zPV*R#r1yZm{kn`YPiOLPGvXK@zjiP7U+;+4&;<(V8wwegz*C6uhF|ZV0@OqST_MR_ zKjq2+RnP;G^7)*rCEH$QJeC8WjI^XEP~wKHvLd6R1bGl-!70Y-`PG4QJ3 zgI^l{twqA%#f|xJwREMV%b8SLuXhKub=ZqfZUx@c`uk>;n%YCuxRIVoGve*W$0npR z@KkW|LW~Iz^~_rQCFs-{^wle~Q#wT_7?k81ioOnZsRITbvP7{YM8BJpohUgsd11|5 z3SPO1FaO#4Ad8RM>U(B4IEDavrQAwwl@W=h{sS`p|4w@m_L2OrB`4} zk8(b7*HH|;-uY)&_PugjzdNLz-97*@V^zd0FskXmF`-%zGtZ~CKXAaUP)-oX%ncR% zIt9Qs0IJ=&&;Kk$Uku^g-UNhaL21*?H?1#$p~*XjlcGjg2Gsu9N)e&N_3T1+RYK<# za7g6dd`cPP;BB~9b0``(x|Tr`Li8d!zgW|a#y&G9JhS{v2YNMHNdNWCEjWKrL%g?p zLoh@(N4xVfIQM8_UZN^7=BuP7zxI$E*ZpMXGx1Cm+Fy2=YzUWq*bWB_7=#(XF3w3ep^N4@wh=(TxQYv4z6 zR`AJSjEDB~0yrpv!FATW4elNBuYQ15Cs(LF_Yc}Y2+jlW1ANePv@MB%F|f+(L#8_V zblUwg{6>=a%NFaSMXr|)`Fd%Aj7obC!?X(*vJcovUkdK(gzwmYVGk(&q2{-@(l|ZU z!W-26ZCG>W3k%17pSBDeP8gR4OPmAN%qI>QE(L1KL1%SfT;a?7w1Gd|DxMPJBwH}c zWiBaclVUlDOR+M}XBJ+4;(XE?yqy%g_M81eZ0rMl-`=bn3>vBXW5gK&=F8O^w~F^) zEU+->s?NMxzr^gl`#&7Wyiir@YE?CZU%b+i;QS1r&#*GaAUmMEc`baBkyUE*o8-5v zPvBm&zLfq2{$EqWau}yJAYx_OogZAam%|@9Njj(>pMg_cjP4x<6cpcDYZo??4x^bH zi{sn$6-;70L>^YS{Z<-2prN!8$4F?n zX~Kba8d+0oO7-)<;)Po8&-oJOI^C(@3Xt_Zl=DaBJuOqyC*KX@BT$PsDc&m4k+(Sw zvUi1HrYnryGwSLzr>w4ZoY<_hjCv$Tb%nzjY&xajACv7gW4YdFbQg}O#WjK$(W|uI zRDSGV!C{-pNw*K=}2>9HdwsK5<>$UUs>5&FvDVYRyL5l66a6^6JZCKs#|f&zBq4a}OS9WarRlf>(w+ z5qc)hEI|2?n!7WXi$OPN*iW{AJ6#vY1wym<@ct%3EI+1BlpfA&k?` z`8iZu>K(lAUYdxKosXmTa ziNl7y$+R~zU7N#9+aNCxeqMvhRF}vf)f0GbdDeEcmL!yed3nBo?mU!-%ZNNcTkSyb zv1Hl)*}otq-s|qFGaRM%FARI*`+qS{l^*BIcQn9v!DPOizRL?#-!RtWK+U0q z%FysPKcKNa=Cn;d(DjGk_cRI)z|{30X{XYkWS5jK%HqXOK9pSl`+m!n4gjqV0NQ+? zn(Wy*MsB7Nwf}4=mSh=RlLkts847SwVra*;C1*uyIX{)l8h&v$${t2jf3ltPqYTb? z)lA?CssWF?GNaiOBzaP=5J*8$?{|C_0e<)WVWqv#`sgY`3hrdw(ircw-cq=R-+oG= z(st|9RmMZ%(So%p#RByZ;fnVn;)8hvx~}jvP|6K|Saf?t_C| zE#x=^UPc83<63N$9tK=gHS*teiwXdfRfIyv<|u@!37}m#J-6gh*L6I7c|V-roR)`H zEA<+4Zhd^|IfzXcp55X(uK;1@dl(6TbHpPk!T{(6k^BN&Z)FEx8-06Y@(086ij2I; zNq4>7Ck8De=y=-kn<5)z>wkheuzt0>kRDh_d);}nS}N;j-(MAQU?Ayd#IXs&JX7Gj ze|RWw&hT$ACGH#6<9P^0YrDwsa(&C-1_{NUX0+w3pY#*ya`x%$^3V`o4`UzfhP#mrt~zxJ8cj|8j+u=GCF#bR@;Y+A(K6AJ^F>cGMcHC# zaphLAb*XmqGvsYtpi5!WgS_EEw&NmbFv!}(+|Gds1Ed0RLKhFyPxxo(Tc*%4?xUyj zY1O{abp60+CW19D`)>@g1PS` zA;dH;wcjRV4(IQ`h?O8!+rRkQL)%j73Qle~P=s{S4l=7eenx}ko(>3nu`>dDuZ=aL z-0*fVDUoq`qy*oTy;$+TO+#>MX~d+@%OXt#epJpbE)3I3-?b6Y+E?^`z0Ku4=jK zU-I_BqC!%RlN4nE~uXKOIH0W~{A~e_s|v&IL)%7%8xL&~keC zm=Z9MDXVbnx;@$FJX7u%Nl|R-oLXhf+g6*wPhrLnLY2JrD8_?u0)svWV)}9CW{Wq# z<6p{EnBM&vyiPD$71#LaHugagDh+%LE6%Fmq&c(7{r_qK__|1Ez1XxvTY{r!Iv)W& z)Jm?WSp-0NN$4z#Kn2+hE_&mGRV7Vb-3A3ZhrPZyQ!0Pf9@;V94NwbfT&~iRJIfQT zx)3%^0!aJBg~V*iUawkD8WcFBip3QN?S}X6%AfuModsmz$+2SB3y|_kbn>?$$l_&s zQmga~pt-as?Pxe6K1$qwZGNK?1T{LD1gH;{8h1W4E`ggR2~luFs>zqhCzY=9N$k1`8-obaiBEfACEi?vAPw?g zalf&1vdiYvY4+7Jg>GO0X?s;P8Kx&Ug3sYOC+5d52HdicPsZCWl<1Kh=r6-!KA|Mh zU!2b^Xk1c^zlhnS#yD4G@Ct8twb>w5$A5d7+`wmE_$2UPSf$}6f+Q0$0T{t z_zBM>qyptWw{lRCucQ08Apfg_WZ_@258#~I6#&Hz$#q*i>!;r!{Yc|Xb`yd4v|97# zIZR1g$mReBAc6J|WuIwAUj61zzWsSi4($Fu!0(B6s(e7v%mYX^wB4DRN?XjwHi7%& zm3$DVSMC5+B*av#oR2eob+>eEZ+}J`=ye&Fy{Po@a#2@Il+m~gQngT!%<;D1?M%OB z&3ku=)@$&-W%9+N;GK&wOe6$*PNK;lHs@qV!3YVS&ddI~xn!t<=*jZNL@%?iulrj= zES|Fiu=M)GXspC@DzFJp@kv8cf>JRk(OlVp(V4M6Hee@$S*IduX)CN2^*edh2cQFO zBC!x$-4z%mM(JlDGmv`};R}VoZMHsWH{na{Gd}xx`yQw!Axj9Yqsxi=`Bx~A^7x&Y zO{`AbL_aOlGqa$=_*bE$PmA8`J_FX!Z9ecAsi20LBI3Cgbba^-n#hQ7sp90lxlJ8B zl6N@)3=1h@3m#9(GWrM0$tAU^{&t)C!>Wip4OiSc8F>mA36p0wyNN`_pr-3LBO-1? zG;hD{%ATv*VGq#k2ufA;K8eeK1LdC<6zg4Qv-J_hCl;LYpp999YOu_1I!T)-0$kD6 z8VS(o;DIZARtN2}8c-Py?aB;(hKGd_p#@0qVRYusmbBROFS|~$L4{p!)b?1GpGSn7 zf`}6z71$;%j`Bd-#epr*6uThkAZQs7q7T?lFVwNVcGD<1!|YTN*PNjF*81^$Ly=-*8u%D zFr_ZR`2aj?XiwO;ETi(aRr0d#H;0{J|iLnrNWFbwOr zL6dmb(0!3U+b4^_p>I`{Mh#>&GaBl;AeFyIZQ7Z*^6gDB)mL2g8>GP;>py>KCB+F$ zLs@i>GQZkHq+uAkK$nvJt|o&Y6L0T$cc7A!?+$AB5}vgSIyn0Eh;sxGbh$t&u%&;X ztjz-!?qracor%I3JyHo&%5>&$!*sJ z(ec3RDE@nnk%Hb29>~{X%@Jn82&GK`14lk*W5upVzDXr`0E z3nN3tv_5QM%&|1ej4XQsO&5)Ag>?-TlJ+q+#HbePIBd zQZJgS>YL8~9yNvz4N%Z#qg{b>XXNdMBCYoW5naY$7!>s%NZ->(#1a`B$I#T<5Pqa5 zz(79sKs6`_mp{pDaRAcN42dov<*vg0)UiABDH0{K_2Q7Jek=_r{JjUVR;R+Yyuqvm zF$P=p+k@Xf&kotNQgjT0!zad+NqhggrUUvQWmUc%uxbDd?*gpw$!7!@z)hiw^o!I> zJAFZ*4U!T~L~`*NjrG%6xn$1jR~=W;5HUH@j*Fn;UQ(<8Xuy7;tk|W0JB`5AtNHXx zSQ!AK)c5MUb15%9RrqczN_Mo+#xuE+fv)1-^n+;IiBlZ@ly+-Qn*+TdUioA>`{K9@ z;Fn9_AQcbA!eXl@yFI0d1RiY$2(}*fYjOgbknik8=@#zerUwkz49TliOC_OtmxFS) zKPVdoUjpG1f?&{(u~$f@+-r_YJmwQcBsd{p;yR??<&KS_9Wv5gFQ z)5ONL2Vjb!)-2PK6|-->>DE@`e+CBXMFh6(1D?3ID zNDUYM4#u_5EbX?joBoKy>W#h9C~|vNT_Sz(vsFKJLY8FC4Z?FVOp|sH&&K>jvo_=X z(4uIdGX_9_CvG}ffWg##HN;L-r5ckw;+>{U|5p)dD7Sh6ydN^re_0dc4} zhxug7u?R^blWkW47JzBiWrVALyo4*YOrZv=Hgb6rog(?3A}Nz-wr<*@sIsWk`1zDd zW6r7+QqSrM!W}nUbdIiTqBcle-+@W%vpId62Oz`eg~+#^5fxS3THFm{?K^|wRPe@y z%~3rl{>&;Mdk|#Ksv>M`4?({HQt9u%zMbB$&pd(P=)fF2I{$zZFsT?K7YZ(f$DQv#70F$SfWxM%Yvl7-GLPD#pmH>`u%8yN$6Gm_a1 zY;}UDO?JI)b@wBG|5g1N$5<{fW$6vsk&L=EySId;WqeLycsG!5M-|dv#~A@7Tmhu` zxf@zNhMzM#l16pb{uo+Nuo=3Cm>1r(RH&hZ`Kh^<__;d~Q%F-8upmhyyZ(L%jkUcV ze=gs5(|k}^oQ~IZo>D=N=xH=fOYfgN5Nd=H=`prtHN-;-%)pC+Uz^znNi4zxS})G3 zj{U1@#{^!8PT%O;A``{*SZ)5*LqK3bB5~2X=Lnm4aC5S0kV(oUJg2mx`A>yk9V#3* zL4Y`Ua`ETIW*I<%bo#2A^-qEC#|-Yt#gm4G{Yw9G2=*g+(FT6xlD8wggFEUfUGSyPEM*v$uKrx^`;ah?sO2VDkb9pLf}Z zL$u#&b%0gIxjMS~Y`?gEg6u{PU#LbNEgAs(sGuO?m@0sX>NEdhBf|K!RuCnSVUXn` z3xF~bhbY{n{{MZhUL6k_UJ_g_C&+F^X~h1c0TSpe5?}za<1!YC(F4Hw ze%-Kt^Y57}9j6#{o=BPV<9AcCR%7@2TRnrZY5-Tg{bp8ld zbO5iaIiC|3cqdUp`(JBIzVFw`)Q$hOj_$JMhyOQ5Zf@E|95r!@LZ7N}!OIRrCXX&D zUI_~xY2uE2e($ll$^F;(($;tDq1P`!Re{vJY#8Ec9s;bmAkKNA$nnPGE0jc`X?GhG zJm^pDf?_~ANbVM~+OokTb(dt81Z0w!E$&Dx?2Dzym0Ec~s`J{~T&#AgYS_15j_p71|KSnMaKwGGA9@x*? ze<;8hRDY{#N?M-}KKqWpKyAqrd)pLgVof>K%mJN+1FP5V_;W95FRN-B>r1j^433+; zUa>DRUev$HRe;lSvdhyQ42EI=B~`wkq!vki()ymPbO9gpB(eD5c@VyO*Eku8+LHh@ zh1_m|l>u7W`?%NVD-Y?K0{2CAo`TmZ`7FCnV2CsSY{@fE;S@@V+p8N!%Xnm z@!!*Le%)x|a4t6lc{p@@%V+T=IM%NVHV-tby78t3&a8j@=ZH0W&F!T6A`n+4y5Dp< zZgLm1TdFP*q|CYfz23XT6RU;QgGgt`KHcWWbHp`2eQ^Ao83z3Beh?|m<~xlRL=?(l zK;*rnjCC~xt3|`I_X?h>hjB#d`ygu$^SpsvYng|7uMPK%Y+bZFI>O<1&JxOE45u3I zA4S43-@KY%e~Uk0=Q|wnGdQ(3^6%TA44nP?cCr$&ekr8ah{t4kj((6r=$1+i=V8o9 zzXAPY!QEf%ul{_?-sS`t!xe5BC$2lj4ny%w5U7$h-|JuGeqz#A@sEC*oYq-o&P|4w zqXeYq*s|+cLiJ*OMfm(kXkyHZ5|bWl?F}?GJ;_cHaJX;Nnyng3Qgk9eHO}Nu381j& z@lY*5dfenP;!OZqY8&(MWg@UnnSD{ol*rY7UG7-1gplgR1Ulz_za&S}^^8ikBzDUw zSad0n!}^^z54UmM>3Q=AgvgRYu5Rlo(Nw;UhTGSg4%XEiM|3ynW_l9qby^bSO)rX& zxl)haxQuvSN_)~3_OZFP_Gr{P1J7OLb8o{kJ|!!Z5*jw^Hu}?}$!JLK;+i%9DE(K9 zW=!1$Ls#jv3*L%J9J;4hVnoEeb+dxnf3M9quMU@J@RM%fL`K=@2ub9#b$kycoN=eW zh$Zs*)M74oT{4jNWen||kQdkX4vQ)n9=58vXH9IyS4;&7j@G>wy_C2L(N7lUWDKVm z@l6o*s#R}tdJ-id#c4Hk7=<$`O(;j93FN^H!x>x%?Pu1mp2l0R|pN3f8BW~a- zzDp@QPpQ06c-`?Ons8+2e`1I&CG3y@1&orMNj)3#G+7PAf{Qd>;w_AL%zAD{ z@tK1ZU*=&n+y3#R(%N7wYksASgwe%TN{fg-4t*BrWSTc0Wuwcx3ViAG{>0l1u*~z# z#Z*z1g?qE{uFBcalkfB!lweOabHRF1Bm>DFU<<}D`YHp;3%A54rUuzs+J<(Hnu@jF zYu!T3=(IOEE@p>ztM0B!6nt%crx9IOzAa2 zTAU~s>`|Mbcly@kj{dxyU_3S>vhX`t)@~4N^W|`B0=p9FxCFs^`Naj$BbYI(o}s^m zSX>@2ZBHl?R>MD^QMN7r=zV_%5oVq}seHoEeOGmNq8PGa!XEqL?|X$rkek{;i8JHy zAR8t@7Z*xCtEGK%pDJi_kj?)SI-3xI4)$sVx>SH9?2fjwAO>BRyP@~Fg~ag-qj}&B zcIM$UU`^`B{wu``AooH>zg1@JZ|(GwAct)HH?6XaUbe^VFSB(CrL(K1Knppd?z4oq zXIXlEJ35zB(yV#mf$QXe(#;FmJz&t45)8cq9&2az?lkq`?bMm71q-7|Mog>s%?*K> z6`iiy#NrT#QQ@>Vm7KOlTlKPF8c?*ksmvGvG>fL5{JIOAlUSb#e4r1;gRgF2NeIt^ zzP$~5B;fY++9;Sqt=1bS(2yp4Cf6UtL9jzRde%L(O!-}EU6@e)j%(q zww=r+Sg51UtT(jf8*b9;OHFj}6u#$~qCHq0Q!G2p2z`JlJ>zMlFZ+38MCe24$D!1q0|)Mj?y{3LDKVvVTeVkqIR*>n?1VgF5r)osn^eHE z`6PbMwDvBCq?6840g>bVY8};1f#1w?wzEI^e~IVgkBeBbj=NhY-X@nO$C{q%IWTyVma1Q zPw))V#s->~mMe+%QL*Y*F3!5Z4`Xr1dBul6O=-#=8#&LcdrJ~s)#^L7+=p44LQJOJ|*-11wg&yVIF3wM(!|+SD@J7+caCd zbDY<#>XO%9eAK548W#wO@5>4n88V(*Hv@ zv^$QeFjs+N(|FbVJ#v!ju92U-rG_bZXY0d{g^w?Y6v7!{t;54i$IT!b$n>&AuQFH` z`_tv`MxghX_TsL$@V++ep9dpTKe&euz1qM7%eBCq^Zl;sLQg8W(Tx308H0IE3X!mk z7a!gErING#xgYy*5>3IE23ACAeH{2}QE08o%cE4s-!BmKU3TjVx6RheBNSFSdj=xb z2lDVDIvXvVgxYg3vQBgYVX->>En|@KTF$(bm+U26ei%;R!L#Ba=%HaI!lZBmKaU?H zrfSSTO?^QMtOJX9!4CQyi`O6wDO?51HOeo^?L2t8Nggl)8PjQ&k^junpoyUY;SX4T zv7ZSs@^T{Q-Htta+iRz`c^#Z*c3mvx`M9bgJLj*g|LmXM8x_}7rbmd>Kl zga6*HY4E~uSs^JIztAJ51;B7K_zALW`rsMd!kb9!dY9x?17;8&J0wk9bP2*7%Ng3` zVp#rG!QcT17g&Qaf{J2;o5?Oq8_k&#t0#cIS>CXuExGtCd?>HCiXN~~vornJ0ZL6V zrgPYBrHV$`t%gYH`-Wrvd|x9vm|DYi--g)-@YwZ`Uj*6I2#t17somWnTkj!~=3 z8|_8+%0S;ZUVF%f44HoN<#6cT$V%II{|((I#{b(9by+z0){tZK9U6>3uAJ=jGxIA+sZ%C_w4`GK_=;VU5 z^&Tj5;Si(IX2XF$pYLHmgSE@#UEr&hHXu&QXE)w|$-NJx@sqHsv`J|olIBI*(uQe)F4CVCz&k(HdWZ3?R`32FcvVusMGL{__k?NtraJ!o}=A`oMSat zHBdTW;u#~f3B%DQ9ihq|XP-kXA_zBmb7L4>~Ub!u=^2G6Cb;>HMdg%?`QlQsw#km$iDiY2S%DUfHWJeoV-> zc4%zssO9`HqylP|nOFt(+97l~8FIfmLqL$>z!R*=XaaQ$Qv(-BgwbT6^Tvf{gbyV~ z&)sHcM228E^n(W`wY7ZJcl66&(_K6h2|e%H zM+MU^h6E#-0Hm~kQGBdZ-%xB4i2QKR>0x|LGH=C0H~=Q$4DM{u8$dK!L4IEpc9--oy%}| zBf={_*c@!H2Eu_;l;bqTiRG@`A%QDW>MxC(niqvY$%ht;r^=`@w!sve_7{S-Tpx7C zEOTNu8{q!9So??iY?sCxfHO`U-l<^g%JBKJWBFkffd!>JnsDD+C4U-C&8;gK^haj9 z&oudVumkeGj0HqY1#~;C+GZbcz5oZ_H{kc(I$6Jf{e7DfFq2niZo4ei!Me*uqHTwa z)uMuL>d_n#%CPSgC#dx_9|A9QiC%`Tnj!ZBFz2*Xc}MMu=57C7E^wuva>Y}h>Zqj= zIBtQVYLbC##)fCvyUkF7+(Hx#$8!B)dWPJxZ!+%nOI5LMbmotrVDZ+ow_}>h3?hiQ z=-zUM8=dG^uk;+B4=#KiTpgKyh_^;+%2-3Rc_^72(^JaX+O&DO$z7ilG;-&dbqMqk@!6{2DSUCWgmN zep(>ObW-{>pW5^sO_E?T?UDCFTBs}-w-Z-o+RWvI0Sz87z?#DuQzYG^ea=b7SPt*~ z82@)Acp_ef0gdNk+Vuy?OyjTjw*xaAy_Sn+LuS!4O8 z@Vc*r+)vV^s|OX=vUBe>nK+!`!TR-ymZP`#(`}6 zpnR4uJwik^zNhuP^HETR!>l&x3tCL}f^z3uP35Irv=gjuqI4^KO+Q5q#d+DU!FSo- ztFX^@a%#kD@lSU0NA2;{!;NoC9vO#qI4?`xWT3w>?f(E!>_gfbftRz9EPiwcPn^md&@zRp`vt1F;5X?rGF zUR=j!emf>oR(jEK-m`|G@AC$C^B+8Qe~u~x=1Q46Px-pjP*%4PAwKH*;Iud8$<3eX z{(16@H#Z>~5vf-a=kW6h9CxE?HQYl= zYU!t*P`(DrF)qA?bLj%wM`&X3UqlLtu3pLKw*Q6}}u#cU0 zJ{nv*nFQ3_EuMpiB86S z0_p2IMXqK?GT~rXtMJxiE$*HXA?S_9;aEq}c9F^TM}o5K+SxrJ&5gPlCgz^h*&by3 qQn&OGzH~EEQ1BmZ{9pLOY3xYR{uoGuZthGGr@yPFi7HdE2>m~>Ulc$9 literal 0 HcmV?d00001 diff --git a/frontend/public/images/identities/discourse.png b/frontend/public/images/identities/discourse.png new file mode 100644 index 0000000000000000000000000000000000000000..dd010b37fce7090925bebfea72066074b2a89f80 GIT binary patch literal 5117 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 literal 0 HcmV?d00001 diff --git a/frontend/public/images/identities/gerrit.png b/frontend/public/images/identities/gerrit.png new file mode 100644 index 0000000000000000000000000000000000000000..8242dd3e0def45457ceb0830b56011d564cc964f GIT binary patch literal 24138 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%0A-qx`psk8+As|b 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 literal 0 HcmV?d00001 diff --git a/frontend/public/images/identities/github.png b/frontend/public/images/identities/github.png new file mode 100644 index 0000000000000000000000000000000000000000..9490ffc6d2e158b266f719d58365905c1c5060cb GIT binary patch literal 8640 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 literal 0 HcmV?d00001 diff --git a/frontend/public/images/identities/gitlab.png b/frontend/public/images/identities/gitlab.png new file mode 100644 index 0000000000000000000000000000000000000000..fd95e2526383a0279e3e1c8f4ad240a9691dc924 GIT binary patch literal 2722 zcma)8do+~m8vopKOEHlQiKeG&i?u>ded1pxa}0ML!E zX!COb069yd7a700x;o;5{{Q8B3^;cHS_p@vvEWvA zEff+_Aki<7Bo34?LD4Dbdl@*J2rcGA^XZWE4{)gnn$LvhQlVuID9(oFPD7$3=o=GS z$b;ZXz8?nRwle|d6Q1TWxI-)mH=Oo2A9X{+EMx9ym|`{)P*w&?azR-~obiyTb?7 zcz4Q408mH#RJoUfOc|V1rh9nfl_ymd)C@Jn2DG0kx#I~wWVxQ|P8@H1U2S}${yx%u z{&kIF;;;Ck@kUhU^JR+&usrIv1y{{fYZGKkn zyW`6}opRnDU7Bdre^+^Ox5-;Nt`w@AdUvmnwPEDxm4Q);IhK1?CuP@c{r7wRoez$D zr{WTRD|;v%%AL-;*UmaMrE0B)FULOOYAwi@Zfia1*1x>l>1uaV=+R0O}IN%;4#AtHp=B`V=I*CzUx^^||#=5Vhct;3#udqPQ?#igdvf{D1IK}a_5^z18`6MKyOaM=(#Yt!@9w*_g`y2`g_$NF}0(u z!^7QtUVoR8f6+6+Ho+QI+V{E6#PQul?orJ%NGIF_uQk(}?9=k^6yNJL2;8^9k@mhe zrw-%cCs37lQH}E(>79Ai!yBs96@8W4eTn5_MEaG?0ccqqg8~d>?9cbIlAE?_#9|=go0;XC4Tz%Zp2Qk|4eh0K&llA^$RM~Kb+<> z6erT_)fE?+E-H+N?`kLI8**K$*O&RamupuRU~^mztt$n%zYEo-O;O@JOIt~?Tjbss zJU5%|E*n7)CtEcIVWWO3B?tdjX{uRMJ$n-KYP5I_zE{b4yNa4CGv;&h)X=CeI&wBh zF(K4w>SC>Vnr|118E2t@Ddbk4vF%PfF_!1JO4@ zuFm

bE^LjHF_N8MWqcE-&Wd#w13?T1#Y$y?I2z*knc4mZscRA7*WArpfEFbhlP& z;Ei&P7j|!y@mQ|HCLp)FtiS*GX?8@e{H9i`O|jK}k}NvKZ! z4%&3j06Hr$Z!S=_LAHJ~9P%H#srDt;#$VD7<8ArzrqBCaW#`PUM2(`GAstbwi-BgB zT_hu^$Ep$fq3^Di{iwL1a$GA6$rrl)9_^WZA0l@VQRi=O+{t#TNv{|;Vq5}F_Zz%P)eQ9EzQ3$uE9M& z^up_^yC3^nF3O7HTCN|zjV0AH!po8@D4CR1j?fkD$$dK+@&*ul;@4d#-NeiVzwI#qv$)cn==GwWHT4u4VLcHU@V7SDXx_;$zPDvOFI&n}(^flzP zQ7ku~EBVR@dbae|T@j;)S@^5GDc{hK@S-lVwm&gQ&JAtN?Im~wI9uTB5F~UK!H#!0 zz!{y`xK*xB`woH1yN=1=CR8Da{7NzA1Tzpb=7wUE_y;>sLYc%WonXKx-T%Sn8;=(P zm=k6MV=~ENED*&eqB#T%ucATtH~juQ>N(0>J3Zc7GQwhPKgx%IHs!h!QvCB;!y6G3 zJuq+$;m5))n#SN)M?+bI@Q&Zq!G9nkJ~G!e{M(T0E(SOQX=NHrp1>Bj7&RP^N0QX$RiG& zZ$x(D(s_q{m_(78I2S*}!Bh|oSR^HKoI3f07^jdj9ebmDIENG`X{7IT7q>;|D?LXWrZkDM*Vs&~=6b?OUK zK=kUPx@=v%W9^v3<^v|vgY}{4$LAhfWgT1U%-7q|skf?tyvPZ+AL%NDe*!2vKA0XE zPN&%)N}$0Gu*O>3Y{l-{irqoB!rJeE1!sZ9+GDXkiZSrl;y(a!$0K8+QvNr + + + + + + + + + + + + diff --git a/frontend/public/images/identities/hackernews.svg b/frontend/public/images/identities/hackernews.svg new file mode 100644 index 0000000000..49d2897b20 --- /dev/null +++ b/frontend/public/images/identities/hackernews.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/frontend/public/images/identities/hubspot.svg b/frontend/public/images/identities/hubspot.svg new file mode 100644 index 0000000000..b79fe597c8 --- /dev/null +++ b/frontend/public/images/identities/hubspot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/images/identities/jira.png b/frontend/public/images/identities/jira.png new file mode 100644 index 0000000000000000000000000000000000000000..2486cc2a9515cd4b3ffb3bc812b99cbf104222b4 GIT binary patch literal 23181 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 XW4pU{sRlN!L*UP5vx8+J!z1cHFF^|Z literal 0 HcmV?d00001 diff --git a/frontend/public/images/identities/lfx.png b/frontend/public/images/identities/lfx.png new file mode 100644 index 0000000000000000000000000000000000000000..61bdc9739efb3bc3597aaa0f7ad4539f0b651a9a GIT binary patch literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!JOX?|TzxVN8O%}`Oj8(U-Dj9} zmtpoj5He3;FiQp@i!_iRglnD*Qe&A0Qat+(!|b~ZbM7)&CPCDfblLC&%@ivM@(X78 zW03Lh(wTo}Zy6<@`SCSSLoMiAl3}_shbB-(lBbJfNW|f{XHIf881T4Ww79gTe~DWM4fl?7iw literal 0 HcmV?d00001 diff --git a/frontend/public/images/identities/linkedin.png b/frontend/public/images/identities/linkedin.png new file mode 100644 index 0000000000000000000000000000000000000000..a4bcf501744174db5fc87fe8ebe34d958a633175 GIT binary patch literal 7088 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 literal 0 HcmV?d00001 diff --git a/frontend/public/images/identities/make.svg b/frontend/public/images/identities/make.svg new file mode 100644 index 0000000000..30a0f6cf59 --- /dev/null +++ b/frontend/public/images/identities/make.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/public/images/identities/n8n.svg b/frontend/public/images/identities/n8n.svg new file mode 100644 index 0000000000..c0d3e6f5de --- /dev/null +++ b/frontend/public/images/identities/n8n.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/public/images/integrations/reddit.svg b/frontend/public/images/identities/reddit.svg similarity index 100% rename from frontend/public/images/integrations/reddit.svg rename to frontend/public/images/identities/reddit.svg diff --git a/frontend/public/images/integrations/salesforce.png b/frontend/public/images/identities/salesforce.png similarity index 100% rename from frontend/public/images/integrations/salesforce.png rename to frontend/public/images/identities/salesforce.png diff --git a/frontend/public/images/integrations/segment.svg b/frontend/public/images/identities/segment.svg similarity index 100% rename from frontend/public/images/integrations/segment.svg rename to frontend/public/images/identities/segment.svg diff --git a/frontend/public/images/integrations/slack.png b/frontend/public/images/identities/slack.png similarity index 100% rename from frontend/public/images/integrations/slack.png rename to frontend/public/images/identities/slack.png diff --git a/frontend/public/images/integrations/snowflake.svg b/frontend/public/images/identities/snowflake.svg similarity index 100% rename from frontend/public/images/integrations/snowflake.svg rename to frontend/public/images/identities/snowflake.svg diff --git a/frontend/public/images/integrations/stackoverflow.png b/frontend/public/images/identities/stackoverflow.png similarity index 100% rename from frontend/public/images/integrations/stackoverflow.png rename to frontend/public/images/identities/stackoverflow.png diff --git a/frontend/public/images/identities/tnc.png b/frontend/public/images/identities/tnc.png new file mode 100644 index 0000000000000000000000000000000000000000..cf7ea3513c21bb16ef256051df7e4b0922cbdd4c GIT binary patch literal 567 zcmeAS@N?(olHy`uVBq!ia0vp^4?&oN8Ax*GDtQ2@gaDrq*Z=?j&%JQ^`6Y!VyAFSN zT>Si!^`Ng#5S1znQc=F2q$KT#>z4-Fk z?YD29zj^=d=g&JYUTr;b{@IHSKfj*+^Yi|TM>8+qz5D0a%kLj|^JW=GGcYht@^o%1m#|I^Sm+o~r8aJ@ocswlIcz5Trg4(GUUaz_s?Z4yY-~RenPq$p`no!`@($ex- zSw&@zyrSa6KOCH#&)q#dEbN_}4gu{DI@dp8LIKbUpprY@757(ueswM{ct@mpRei>n ziwt#TZTt7lm-_ne_|2d1Vq?tO^7W-omz(bmFSoLee;4C_Ln2P-ov>n}q~gO39Gs^) zINM!4BHTPIbes+uIUPzA6q+U|#MeDxL(hbQh?bVrmX^axDmuz4GGb(DiFB`6FnvSc zziZde7cahlZSC&3|7ty*6AbK~4gviI^y8U+VmLk`{}_MmzE~<3DaQg#2@IaDelF{r G5}E*M-w~Yv literal 0 HcmV?d00001 diff --git a/frontend/public/images/integrations/twitter-x-black.png b/frontend/public/images/identities/twitter.png similarity index 100% rename from frontend/public/images/integrations/twitter-x-black.png rename to frontend/public/images/identities/twitter.png diff --git a/frontend/public/images/identities/zapier.png b/frontend/public/images/identities/zapier.png new file mode 100644 index 0000000000000000000000000000000000000000..9b7640991d009f700d7a71053a260cef17f8a207 GIT binary patch literal 2392 zcmZve`9Bl>1IK5MwmH|_I^5P2t;ii}W6n&jR)$GM=@24D*w`GQT#1i1cd{gvoFx@C zwWWdsBQk+dV=T>p0B|G30uU*H%Lm_q;#0<0jwMHU!902Ts%3jk3OynYV&OCUE6lw^X= z7SP`bT5G}NI2i5$W5a+`2z(8Iw>~IJ1%XFEgeUOS0ClC{hCj%N0O#=_=>jOp0FBk) zv>BiWg33HF^9{sO00{%G5A}r7FC* zuRh`v@8NE-SEFMqwho|ZIBjdm4_Qjwp=0-!G%8@s#a_Fmd9xN=TB}*y;Am@{;dSfi zT3#qO<9j>V7!)JM)!1c=K?m6KLv2gN|0yx_4zIzH%=nssZS|O9c5CXqXd+tw!js@8 zx04OZ_@{j}3b{+IG73-iq}&-}OW8^7H5+6#2_i`##bs|0gxp^LE`ADQ*DML=ZFc1+ zqM2LT>&LZ>i5__t39(z~PcX~WuF2VVdU#k`Ob#?V#__cxvQ>p1dL<7S6;^YQIMJ^E!Wt0ekBYd@pR$g!}W0KW+0{%e#CmrHDQ&ep^I{&Km?Vi_>nQHA&mGC$rDaxrIcwB>wB)0{}b$x_aC_1JoZt3|!#;^vaHi6=5xzaUN zgAB>Z1X)wacIMdxF{fz}G)@z42SV=F6p`30S6cTCbzFR}noB%G!BiAso^p=muUf>A z>nBOh_KMwR$eIGNbzDKOc!nJgZXpzjOYK$3z~f*RP!n8zuWp95h`5C?^U{VA60;(u ziPBM>nC!RAAbfUIo3&V$t#9BUN;n0Ct+P6@>e401C-LigB!Z^-K2w&6L{f#A1pVA7 zV<#t8gD9s6C6+2kGAjfUiPoWz6^Bshie0G4imlt?>1fnW=%!2|lq$1Rn1?D9UcOy< z)Rm=q*d~NvB5NvRU1ztWwDY3b$MKs{&9k#(1M^E48&d|*&iC*FNE_o2v!CZ{{=Ulh z{GnZQ{jhs0A`i5~zplhsR-;chv>yA{IqyXXJ8d9X`cTjFIg9cuc6M7g0xa%(|8mh< zMXcS46g{&$7Kv@K$r;r3idd20GDIZ}kK|^>F1$3WVSJ3VQCKM$<{960%6c6zmK>HE zg^GfZ!Qy{%EiR&>^H^^bN2401Kov6Sr1h+>^JRXx3V6l@bb587| zPoqWVJTv}u!B85T#}q89x9Y4q?;X3#2ri>Xp|ER#9k$Ezq?enehg)AKTeS5IABduD zQd2UhWBeKFm{Imd6BUV#TIJtoe5_h5XQ}s`+d%H>E@Df8WPeP-uT(F8ZT__sf$xA^$& zHP!zlc-$m_scb&X0jX5^<;hj+_cA6%i4{})9MxJ5uCJ%FTj%FO^py=Oj)Sy8rOvht^DH6lf!A)Pc~c&A4k#Ax47fHLhlGR zH(0biYWUP=Ma|Hi!mA7BRQ4bhHMt@Ef$928u6MCUvl^jBqeT&}^6x)yPLj<&C`Qe_ z5c9SE^5QN0__k9SNZm3-QKy3FU9q083%&OZ!D^?~Yqi3S%Z_hp zzm#ud{Gf>$oN@ca@@T>=(`D3KR5nw~5ft}CFCjm}M-EQ%{9XM1MA99o=MgWwU(v{XmLvhF$x~r_j_j|bCAVy3VF?+Wewaqq8$ldj*g-?@VH*uaeFV^ zq*0$g_v&@GkEtZbykm0*%NhYq>%g_YVpA zC0u|Yy9(0Ip?+48VpfcbZtscUL=h+8*iVFlSc|k(+hAnpp8&cK0~vVOOD^4euM0_# z^ifVptjAyW#AKL6f15_14V%gxp4O*)rlP*K31i9cEaQu?H5ESFCh27Xm61=~j#w*t z4YrXKWByyMKE|^iXGR_s>h06Hq}ba{v}u2@62uPgjN=^fjsG97D3E*r literal 0 HcmV?d00001 diff --git a/frontend/src/config/identities/bigquery/config.ts b/frontend/src/config/identities/bigquery/config.ts new file mode 100644 index 0000000000..b5cf04d5e6 --- /dev/null +++ b/frontend/src/config/identities/bigquery/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const bigquery: IdentityConfig = { + key: 'bigquery', + name: 'BigQuery', + image: '/images/identities/bigquery.svg', + showInMembers: false, + showInOrganizations: false, +}; + +export default bigquery; diff --git a/frontend/src/config/identities/census/config.ts b/frontend/src/config/identities/census/config.ts new file mode 100644 index 0000000000..c77328214e --- /dev/null +++ b/frontend/src/config/identities/census/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const census: IdentityConfig = { + key: 'census', + name: 'Census', + image: '/images/identities/census.png', + showInMembers: false, + showInOrganizations: false, +}; + +export default census; diff --git a/frontend/src/config/identities/confluence/config.ts b/frontend/src/config/identities/confluence/config.ts new file mode 100644 index 0000000000..b73c81d718 --- /dev/null +++ b/frontend/src/config/identities/confluence/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const confluence: IdentityConfig = { + key: 'confluence', + name: 'Confluence', + image: '/images/identities/confluence.svg', + showInMembers: true, + showInOrganizations: false, +}; + +export default confluence; diff --git a/frontend/src/config/identities/crunchbase/config.ts b/frontend/src/config/identities/crunchbase/config.ts new file mode 100644 index 0000000000..f94e951761 --- /dev/null +++ b/frontend/src/config/identities/crunchbase/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const crunchbase: IdentityConfig = { + key: 'crunchbase', + name: 'Crunchbase', + image: '/images/identities/crunchbase.png', + showInMembers: false, + showInOrganizations: true, +}; + +export default crunchbase; diff --git a/frontend/src/config/identities/cvent/config.ts b/frontend/src/config/identities/cvent/config.ts new file mode 100644 index 0000000000..e4c1aba229 --- /dev/null +++ b/frontend/src/config/identities/cvent/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const cvent: IdentityConfig = { + key: 'cvent', + name: 'Cvent', + image: '/images/identities/cvent.png', + showInMembers: true, + showInOrganizations: false, +}; + +export default cvent; diff --git a/frontend/src/config/identities/devto/config.ts b/frontend/src/config/identities/devto/config.ts new file mode 100644 index 0000000000..8faca60c86 --- /dev/null +++ b/frontend/src/config/identities/devto/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const devto: IdentityConfig = { + key: 'devto', + name: 'DEV', + image: '/images/identities/devto.png', + showInMembers: true, + showInOrganizations: false, +}; + +export default devto; diff --git a/frontend/src/config/identities/discord/config.ts b/frontend/src/config/identities/discord/config.ts new file mode 100644 index 0000000000..e496623b53 --- /dev/null +++ b/frontend/src/config/identities/discord/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const discord: IdentityConfig = { + key: 'discord', + name: 'Discord', + image: '/images/identities/discord.png', + showInMembers: true, + showInOrganizations: false, +}; + +export default discord; diff --git a/frontend/src/config/identities/discourse/config.ts b/frontend/src/config/identities/discourse/config.ts new file mode 100644 index 0000000000..203a5f3be0 --- /dev/null +++ b/frontend/src/config/identities/discourse/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const discourse: IdentityConfig = { + key: 'discourse', + name: 'Discourse', + image: '/images/identities/discourse.png', + showInMembers: false, + showInOrganizations: false, +}; + +export default discourse; diff --git a/frontend/src/config/identities/facebook/config.ts b/frontend/src/config/identities/facebook/config.ts new file mode 100644 index 0000000000..4a256bd7cc --- /dev/null +++ b/frontend/src/config/identities/facebook/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const facebook: IdentityConfig = { + key: 'facebook', + name: 'Facebook', + image: '/images/identities/facebook.png', + showInMembers: false, + showInOrganizations: false, +}; + +export default facebook; diff --git a/frontend/src/config/identities/gerrit/config.ts b/frontend/src/config/identities/gerrit/config.ts new file mode 100644 index 0000000000..1d4ab41ee9 --- /dev/null +++ b/frontend/src/config/identities/gerrit/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const gerrit: IdentityConfig = { + key: 'gerrit', + name: 'Gerrit', + image: '/images/identities/gerrit.png', + showInMembers: true, + showInOrganizations: false, +}; + +export default gerrit; diff --git a/frontend/src/config/identities/git/config.ts b/frontend/src/config/identities/git/config.ts new file mode 100644 index 0000000000..f39f6f83af --- /dev/null +++ b/frontend/src/config/identities/git/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const git: IdentityConfig = { + key: 'git', + name: 'Git', + image: '/images/identities/git.png', + showInMembers: true, + showInOrganizations: false, +}; + +export default git; diff --git a/frontend/src/config/identities/github/config.ts b/frontend/src/config/identities/github/config.ts new file mode 100644 index 0000000000..91e7b7f126 --- /dev/null +++ b/frontend/src/config/identities/github/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const github: IdentityConfig = { + key: 'github', + name: 'GitHub', + image: '/images/identities/github.png', + showInMembers: true, + showInOrganizations: true, +}; + +export default github; diff --git a/frontend/src/config/identities/gitlab/config.ts b/frontend/src/config/identities/gitlab/config.ts new file mode 100644 index 0000000000..7e0bcd1d1f --- /dev/null +++ b/frontend/src/config/identities/gitlab/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const gitlab: IdentityConfig = { + key: 'gitlab', + name: 'GitLab', + image: '/images/identities/gitlab.png', + showInMembers: true, + showInOrganizations: false, +}; + +export default gitlab; diff --git a/frontend/src/config/identities/groupsio/config.ts b/frontend/src/config/identities/groupsio/config.ts new file mode 100644 index 0000000000..17ca32d2bf --- /dev/null +++ b/frontend/src/config/identities/groupsio/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const groupsio: IdentityConfig = { + key: 'groupsio', + name: 'Groups.io', + image: '/images/identities/groupsio.svg', + showInMembers: true, + showInOrganizations: false, +}; + +export default groupsio; diff --git a/frontend/src/config/identities/hackernews/config.ts b/frontend/src/config/identities/hackernews/config.ts new file mode 100644 index 0000000000..d106697755 --- /dev/null +++ b/frontend/src/config/identities/hackernews/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const hackernews: IdentityConfig = { + key: 'hackernews', + name: 'Hacker News', + image: '/images/identities/hackernews.svg', + showInMembers: true, + showInOrganizations: false, +}; + +export default hackernews; diff --git a/frontend/src/config/identities/hubspot/config.ts b/frontend/src/config/identities/hubspot/config.ts new file mode 100644 index 0000000000..7037ef87af --- /dev/null +++ b/frontend/src/config/identities/hubspot/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const hubspot: IdentityConfig = { + key: 'hubspot', + name: 'HubSpot', + image: '/images/identities/hubspot.svg', + showInMembers: false, + showInOrganizations: false, +}; + +export default hubspot; diff --git a/frontend/src/config/identities/identities.helpers.ts b/frontend/src/config/identities/identities.helpers.ts new file mode 100644 index 0000000000..0b9bf7d00b --- /dev/null +++ b/frontend/src/config/identities/identities.helpers.ts @@ -0,0 +1,21 @@ +import { lfIdentities } from '@/config/identities/index'; + +const useIdentitiesHelpers = () => { + const getPlatformsLabel = (platforms: string[]) => platforms + .filter((platform) => !['integration_or_enrichment', 'email', 'integration', 'unknown', 'delete'].includes(platform)) + .map((platform) => { + if (['enrichment', 'peopledatalabs'].includes(platform)) { + return ' Enrichment'; + } + if (platform === 'custom') { + return 'Manually added'; + } + return lfIdentities[platform]?.name || platform; + }).join(', '); + + return { + getPlatformsLabel, + }; +}; + +export default useIdentitiesHelpers; diff --git a/frontend/src/config/identities/index.ts b/frontend/src/config/identities/index.ts new file mode 100644 index 0000000000..383f9e0863 --- /dev/null +++ b/frontend/src/config/identities/index.ts @@ -0,0 +1,73 @@ +import bigquery from './bigquery/config'; +import census from './census/config'; +import confluence from './confluence/config'; +import crunchbase from './crunchbase/config'; +import cvent from './cvent/config'; +import devto from './devto/config'; +import discord from './discord/config'; +import discourse from './discourse/config'; +import facebook from './facebook/config'; +import gerrit from './gerrit/config'; +import git from './git/config'; +import github from './github/config'; +import gitlab from './gitlab/config'; +import groupsio from './groupsio/config'; +import hackernews from './hackernews/config'; +import hubspot from './hubspot/config'; +import jira from './jira/config'; +import lfx from './lfx/config'; +import linkedin from './linkedin/config'; +import make from './make/config'; +import n8n from './n8n/config'; +import reddit from './reddit/config'; +import salesforce from './salesforce/config'; +import segment from './segment/config'; +import slack from './slack/config'; +import snowflake from './snowflake/config'; +import stackoverflow from './stackoverflow/config'; +import tnc from './tnc/config'; +import twitter from './twitter/config'; +import zapier from './zapier/config'; + +export interface IdentityConfig { + key: string; // Unique key for the identity + name: string; // Display name of the identity + image: string; // Image URL for the identity + showInMembers: boolean; // If identity is used with contributors + showInOrganizations: boolean; // If identity is used with organizations +} + +export const lfIdentities: Record = { + bigquery, + census, + confluence, + crunchbase, + cvent, + devto, + discord, + discourse, + facebook, + gerrit, + git, + github, + gitlab, + groupsio, + hackernews, + hubspot, + jira, + lfx, + lfid: lfx, + linkedin, + make, + n8n, + reddit, + salesforce, + segment, + slack, + snowflake, + stackoverflow, + tnc, + training_cert: tnc, + twitter, + zapier, +}; diff --git a/frontend/src/config/identities/jira/config.ts b/frontend/src/config/identities/jira/config.ts new file mode 100644 index 0000000000..27e79fd72f --- /dev/null +++ b/frontend/src/config/identities/jira/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const jira: IdentityConfig = { + key: 'jira', + name: 'Jira', + image: '/images/identities/jira.png', + showInMembers: true, + showInOrganizations: false, +}; + +export default jira; diff --git a/frontend/src/config/identities/lfx/config.ts b/frontend/src/config/identities/lfx/config.ts new file mode 100644 index 0000000000..216647fb2e --- /dev/null +++ b/frontend/src/config/identities/lfx/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const lfx: IdentityConfig = { + key: 'lfx', + name: 'Linux Foundation ID', + image: '/images/identities/lfx.png', + showInMembers: true, + showInOrganizations: false, +}; + +export default lfx; diff --git a/frontend/src/config/identities/linkedin/config.ts b/frontend/src/config/identities/linkedin/config.ts new file mode 100644 index 0000000000..f8161bfba1 --- /dev/null +++ b/frontend/src/config/identities/linkedin/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const linkedin: IdentityConfig = { + key: 'linkedin', + name: 'LinkedIn', + image: '/images/identities/linkedin.png', + showInMembers: true, + showInOrganizations: true, +}; + +export default linkedin; diff --git a/frontend/src/config/identities/make/config.ts b/frontend/src/config/identities/make/config.ts new file mode 100644 index 0000000000..0943f58320 --- /dev/null +++ b/frontend/src/config/identities/make/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const make: IdentityConfig = { + key: 'make', + name: 'Make', + image: '/images/identities/make.svg', + showInMembers: false, + showInOrganizations: false, +}; + +export default make; diff --git a/frontend/src/config/identities/n8n/config.ts b/frontend/src/config/identities/n8n/config.ts new file mode 100644 index 0000000000..cc0886a723 --- /dev/null +++ b/frontend/src/config/identities/n8n/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const n8n: IdentityConfig = { + key: 'n8n', + name: 'n8n', + image: '/images/identities/n8n.svg', + showInMembers: false, + showInOrganizations: false, +}; + +export default n8n; diff --git a/frontend/src/config/identities/reddit/config.ts b/frontend/src/config/identities/reddit/config.ts new file mode 100644 index 0000000000..2a0cab04e7 --- /dev/null +++ b/frontend/src/config/identities/reddit/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const reddit: IdentityConfig = { + key: 'reddit', + name: 'Reddit', + image: '/images/identities/reddit.svg', + showInMembers: true, + showInOrganizations: false, +}; + +export default reddit; diff --git a/frontend/src/config/identities/salesforce/config.ts b/frontend/src/config/identities/salesforce/config.ts new file mode 100644 index 0000000000..c456e6cdef --- /dev/null +++ b/frontend/src/config/identities/salesforce/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const salesforce: IdentityConfig = { + key: 'salesforce', + name: 'Salesforce', + image: '/images/identities/salesforce.png', + showInMembers: false, + showInOrganizations: false, +}; + +export default salesforce; diff --git a/frontend/src/config/identities/segment/config.ts b/frontend/src/config/identities/segment/config.ts new file mode 100644 index 0000000000..72c95d8754 --- /dev/null +++ b/frontend/src/config/identities/segment/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const segment: IdentityConfig = { + key: 'segment', + name: 'Segment', + image: '/images/identities/segment.svg', + showInMembers: false, + showInOrganizations: false, +}; + +export default segment; diff --git a/frontend/src/config/identities/slack/config.ts b/frontend/src/config/identities/slack/config.ts new file mode 100644 index 0000000000..f7815c0a45 --- /dev/null +++ b/frontend/src/config/identities/slack/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const slack: IdentityConfig = { + key: 'slack', + name: 'Slack', + image: '/images/identities/slack.png', + showInMembers: true, + showInOrganizations: false, +}; + +export default slack; diff --git a/frontend/src/config/identities/snowflake/config.ts b/frontend/src/config/identities/snowflake/config.ts new file mode 100644 index 0000000000..f19bcc6555 --- /dev/null +++ b/frontend/src/config/identities/snowflake/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const snowflake: IdentityConfig = { + key: 'snowflake', + name: 'Snowflake', + image: '/images/identities/snowflake.svg', + showInMembers: false, + showInOrganizations: false, +}; + +export default snowflake; diff --git a/frontend/src/config/identities/stackoverflow/config.ts b/frontend/src/config/identities/stackoverflow/config.ts new file mode 100644 index 0000000000..194cf2d5c1 --- /dev/null +++ b/frontend/src/config/identities/stackoverflow/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const stackoverflow: IdentityConfig = { + key: 'stackoverflow', + name: 'Stack Overflow', + image: '/images/identities/stackoverflow.png', + showInMembers: true, + showInOrganizations: false, +}; + +export default stackoverflow; diff --git a/frontend/src/config/identities/tnc/config.ts b/frontend/src/config/identities/tnc/config.ts new file mode 100644 index 0000000000..2e98f2cc5d --- /dev/null +++ b/frontend/src/config/identities/tnc/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const tnc: IdentityConfig = { + key: 'tnc', + name: 'Training & Certification', + image: '/images/identities/tnc.png', + showInMembers: true, + showInOrganizations: false, +}; + +export default tnc; diff --git a/frontend/src/config/identities/twitter/config.ts b/frontend/src/config/identities/twitter/config.ts new file mode 100644 index 0000000000..87f7f704a5 --- /dev/null +++ b/frontend/src/config/identities/twitter/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const twitter: IdentityConfig = { + key: 'twitter', + name: 'X/Twitter', + image: '/images/identities/twitter.png', + showInMembers: true, + showInOrganizations: true, +}; + +export default twitter; diff --git a/frontend/src/config/identities/zapier/config.ts b/frontend/src/config/identities/zapier/config.ts new file mode 100644 index 0000000000..906d25a2a9 --- /dev/null +++ b/frontend/src/config/identities/zapier/config.ts @@ -0,0 +1,11 @@ +import { IdentityConfig } from '@/config/identities'; + +const zapier: IdentityConfig = { + key: 'zapier', + name: 'Zapier', + image: '/images/identities/zapier.png', + showInMembers: false, + showInOrganizations: false, +}; + +export default zapier; diff --git a/frontend/src/integrations/custom/cvent/config.js b/frontend/src/integrations/cvent/config.js similarity index 100% rename from frontend/src/integrations/custom/cvent/config.js rename to frontend/src/integrations/cvent/config.js diff --git a/frontend/src/integrations/custom/cvent/index.js b/frontend/src/integrations/cvent/index.js similarity index 100% rename from frontend/src/integrations/custom/cvent/index.js rename to frontend/src/integrations/cvent/index.js diff --git a/frontend/src/integrations/integrations-config.js b/frontend/src/integrations/integrations-config.js index 9a07d50f15..67a80176e6 100644 --- a/frontend/src/integrations/integrations-config.js +++ b/frontend/src/integrations/integrations-config.js @@ -15,13 +15,13 @@ import crunchbase from './crunchbase'; import git from './git'; import facebook from './facebook'; import n8n from './n8n'; -import lfx from './custom/lfx'; +import lfx from './lfx'; import groupsio from './groupsio'; import confluence from './confluence'; import gerrit from './gerrit'; import jira from './jira'; -import cvent from './custom/cvent'; -import tnc from './custom/tnc'; +import cvent from './cvent'; +import tnc from './tnc'; import gitlab from './gitlab'; class IntegrationsConfig { diff --git a/frontend/src/integrations/custom/lfx/config.js b/frontend/src/integrations/lfx/config.js similarity index 100% rename from frontend/src/integrations/custom/lfx/config.js rename to frontend/src/integrations/lfx/config.js diff --git a/frontend/src/integrations/custom/lfx/index.js b/frontend/src/integrations/lfx/index.js similarity index 100% rename from frontend/src/integrations/custom/lfx/index.js rename to frontend/src/integrations/lfx/index.js diff --git a/frontend/src/integrations/custom/tnc/config.js b/frontend/src/integrations/tnc/config.js similarity index 100% rename from frontend/src/integrations/custom/tnc/config.js rename to frontend/src/integrations/tnc/config.js diff --git a/frontend/src/integrations/custom/tnc/index.js b/frontend/src/integrations/tnc/index.js similarity index 100% rename from frontend/src/integrations/custom/tnc/index.js rename to frontend/src/integrations/tnc/index.js diff --git a/frontend/src/modules/contributor/components/details/identity/contributor-details-identity-item.vue b/frontend/src/modules/contributor/components/details/identity/contributor-details-identity-item.vue index 7584952132..e68daf39f6 100644 --- a/frontend/src/modules/contributor/components/details/identity/contributor-details-identity-item.vue +++ b/frontend/src/modules/contributor/components/details/identity/contributor-details-identity-item.vue @@ -8,9 +8,9 @@ - + @@ -41,20 +41,20 @@ {{ props.identity.value }}

- +

- Source: + Source:

@@ -74,7 +74,7 @@ > import LfIconOld from '@/ui-kit/icon/IconOld.vue'; import { Contributor, ContributorIdentity } from '@/modules/contributor/types/Contributor'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import LfTooltip from '@/ui-kit/tooltip/Tooltip.vue'; import LfButton from '@/ui-kit/button/Button.vue'; import LfDropdown from '@/ui-kit/dropdown/Dropdown.vue'; @@ -147,6 +146,8 @@ import { computed, ref } from 'vue'; import LfVerifiedIdentityBadge from '@/shared/modules/identities/components/verified-identity-badge.vue'; import { ReportDataType } from '@/shared/modules/report-issue/constants/report-data-type.enum'; import { useSharedStore } from '@/shared/pinia/shared.store'; +import { lfIdentities } from '@/config/identities'; +import useIdentitiesHelpers from '@/config/identities/identities.helpers'; const props = defineProps<{ identity: ContributorIdentity, @@ -157,13 +158,11 @@ const emit = defineEmits<{(e: 'edit'): void, (e: 'unmerge'): void }>(); const { hasPermission } = usePermissions(); const { setReportDataModal } = useSharedStore(); - const { deleteContributorIdentity } = useContributorStore(); +const { getPlatformsLabel } = useIdentitiesHelpers(); const hovered = ref(false); -const platform = (name: string) => CrowdIntegrations.getConfig(name); - const editingDisabled = computed(() => { if (['git'].includes(props.identity.platform)) { return false; From 69f5ff6bf1a9ca92dd1f6b657e75acb5d71def9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C5=A1per=20Grom?= Date: Tue, 14 Jan 2025 09:24:37 +0100 Subject: [PATCH 2/5] Migration to new config --- .../config/identities/identities.helpers.ts | 8 +++++ frontend/src/config/identities/index.ts | 36 +++++++++---------- .../modules/activity/activity-type-field.js | 4 +-- .../activityType/ActivityTypeFilter.vue | 11 +++--- .../contributor-details-identities.vue | 1 - .../contributor-details-header-profiles.vue | 5 +-- ...tributor-details-identity-add-dropdown.vue | 12 ++----- .../src/shared/helpers/attribute.helpers.ts | 10 +++--- .../platform/components/platform-img.vue | 4 +-- .../modules/platform/components/platform.vue | 3 +- 10 files changed, 50 insertions(+), 44 deletions(-) diff --git a/frontend/src/config/identities/identities.helpers.ts b/frontend/src/config/identities/identities.helpers.ts index 0b9bf7d00b..90bf248944 100644 --- a/frontend/src/config/identities/identities.helpers.ts +++ b/frontend/src/config/identities/identities.helpers.ts @@ -13,8 +13,16 @@ const useIdentitiesHelpers = () => { return lfIdentities[platform]?.name || platform; }).join(', '); + const uniqueKeys = () => [...new Set(Object.values(lfIdentities).map((identity) => identity.key))]; + + const memberIdentities = uniqueKeys().map((key) => lfIdentities[key]).filter((identity) => identity.showInMembers); + + const organizationIdentities = uniqueKeys().map((key) => lfIdentities[key]).filter((identity) => identity.showInOrganizations); + return { getPlatformsLabel, + memberIdentities, + organizationIdentities, }; }; diff --git a/frontend/src/config/identities/index.ts b/frontend/src/config/identities/index.ts index 383f9e0863..363f81355a 100644 --- a/frontend/src/config/identities/index.ts +++ b/frontend/src/config/identities/index.ts @@ -38,36 +38,36 @@ export interface IdentityConfig { } export const lfIdentities: Record = { - bigquery, - census, - confluence, - crunchbase, - cvent, - devto, + github, discord, + hackernews, + linkedin, + twitter, + slack, + devto, + reddit, + stackoverflow, discourse, - facebook, - gerrit, git, - github, - gitlab, groupsio, - hackernews, - hubspot, + confluence, + gerrit, jira, + cvent, lfx, + tnc, + gitlab, + crunchbase, + bigquery, + census, + facebook, + hubspot, lfid: lfx, - linkedin, make, n8n, - reddit, salesforce, segment, - slack, snowflake, - stackoverflow, - tnc, training_cert: tnc, - twitter, zapier, }; diff --git a/frontend/src/modules/activity/activity-type-field.js b/frontend/src/modules/activity/activity-type-field.js index 45f0bdd4e1..d0a543f64d 100644 --- a/frontend/src/modules/activity/activity-type-field.js +++ b/frontend/src/modules/activity/activity-type-field.js @@ -1,9 +1,9 @@ import JSONField from '@/shared/fields/json-field'; import { toSentenceCase } from '@/utils/string'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import { storeToRefs } from 'pinia'; import { useActivityTypeStore } from '@/modules/activity/store/type'; import appConfig from '@/config'; +import { lfIdentities } from '@/config/identities'; export default class ActivityTypeField extends JSONField { constructor(name, label, config = {}) { @@ -24,7 +24,7 @@ export default class ActivityTypeField extends JSONField { // (temporary fix for default activity types stored in custom ones) .filter(([k, v]) => (!!Object.keys(v || {}).length) && (!appConfig.isGitIntegrationEnabled ? k !== 'git' : true)) .map(([key, value]) => { - let platformName = CrowdIntegrations.getConfig(key)?.name; + let platformName = lfIdentities[key]?.name; if (!platformName) { platformName = key === 'other' ? 'Custom' : key; diff --git a/frontend/src/modules/activity/config/filters/activityType/ActivityTypeFilter.vue b/frontend/src/modules/activity/config/filters/activityType/ActivityTypeFilter.vue index 14cfd64da5..e6ec802325 100644 --- a/frontend/src/modules/activity/config/filters/activityType/ActivityTypeFilter.vue +++ b/frontend/src/modules/activity/config/filters/activityType/ActivityTypeFilter.vue @@ -17,6 +17,7 @@ import { useActivityTypeStore } from '@/modules/activity/store/type'; import { CrowdIntegrations } from '@/integrations/integrations-config'; import { getSegmentsFromProjectGroup } from '@/utils/segments'; import { useLfSegmentsStore } from '@/modules/lf/segments/store'; +import { lfIdentities } from '@/config/identities'; const props = defineProps<{ modelValue: string, @@ -24,7 +25,7 @@ const props = defineProps<{ data: any, }>(); -const emit = defineEmits<{(e: 'update:modelValue', value: string), (e: 'update:data', value: any),}>(); +const emit = defineEmits<{(e: 'update:modelValue', value: string): void, (e: 'update:data', value: any): void}>(); const activityTypeStore = useActivityTypeStore(); const { types } = storeToRefs(activityTypeStore); @@ -52,18 +53,18 @@ watch([types, activeIntegrations], ([typesValue, activeIntegrationsValue]) => { // eslint-disable-next-line @typescript-eslint/no-unused-vars .filter(([platform, _]) => activeIntegrationsValue.includes(platform)) .map(([platform, activityTypes]: [string, any]) => ({ - label: CrowdIntegrations.getConfig(platform)?.name ?? platform, + label: lfIdentities[platform]?.name ?? platform, options: Object.entries(activityTypes).map(([activityType, activityTypeData]) => ({ - label: `${activityTypeData.display.short.charAt(0).toUpperCase()}${activityTypeData.display.short.substring(1).toLowerCase()}`, + label: `${activityTypeData?.display.short.charAt(0).toUpperCase()}${activityTypeData?.display.short.substring(1).toLowerCase()}`, value: `${platform}:${activityType}`, })), })); const customOptions = Object.entries(typesValue.custom) .map(([platform, activityTypes]: [string, any]) => ({ - label: CrowdIntegrations.getConfig(platform)?.name ?? platform, + label: lfIdentities[platform]?.name ?? platform, options: Object.entries(activityTypes).map(([activityType, activityTypeData]) => ({ - label: `${activityTypeData.display.short.charAt(0).toUpperCase()}${activityTypeData.display.short.substring(1).toLowerCase()}`, + label: `${activityTypeData?.display.short.charAt(0).toUpperCase()}${activityTypeData?.display.short.substring(1).toLowerCase()}`, value: `${platform}:${activityType}`, })), })); diff --git a/frontend/src/modules/contributor/components/details/contributor-details-identities.vue b/frontend/src/modules/contributor/components/details/contributor-details-identities.vue index 1bd89c5532..2fdba8b906 100644 --- a/frontend/src/modules/contributor/components/details/contributor-details-identities.vue +++ b/frontend/src/modules/contributor/components/details/contributor-details-identities.vue @@ -108,7 +108,6 @@ const selectedIdentity = ref(null); const addIdentity = ref(false); const addIdentityTemplate = ref | null>(null); const editIdentity = ref | null>(null); -// const platform = (name: string) => CrowdIntegrations.getConfig(name); const unmerge = (identityId: string) => { if (identityId) { diff --git a/frontend/src/modules/contributor/components/details/header/contributor-details-header-profiles.vue b/frontend/src/modules/contributor/components/details/header/contributor-details-header-profiles.vue index 6d2198bd89..f4d320b3a0 100644 --- a/frontend/src/modules/contributor/components/details/header/contributor-details-header-profiles.vue +++ b/frontend/src/modules/contributor/components/details/header/contributor-details-header-profiles.vue @@ -15,7 +15,7 @@ class="flex items-center gap-1" >

- {{ platformData(platform)?.name }} profile + {{ lfIdentities[platform]?.name }} profile

@@ -57,7 +57,7 @@ opacity-0 invisible transition group-hover:visible group-hover:opacity-100 z-30

@@ -79,6 +79,7 @@ import LfTooltip from '@/ui-kit/tooltip/Tooltip.vue'; import useContributorHelpers from '@/modules/contributor/helpers/contributor.helpers'; import { contributorDetailsHeaderProfilePlatforms } from '@/modules/contributor/config/details-header-profile-platforms'; import { Contributor } from '@/modules/contributor/types/Contributor'; +import { lfIdentities } from '@/config/identities'; const props = defineProps<{ contributor: Contributor, diff --git a/frontend/src/modules/contributor/components/details/identity/contributor-details-identity-add-dropdown.vue b/frontend/src/modules/contributor/components/details/identity/contributor-details-identity-add-dropdown.vue index fb51250d7a..3d2a7ff81e 100644 --- a/frontend/src/modules/contributor/components/details/identity/contributor-details-identity-add-dropdown.vue +++ b/frontend/src/modules/contributor/components/details/identity/contributor-details-identity-add-dropdown.vue @@ -55,26 +55,20 @@ From 812def755582577daba73de1b40686f26a479f86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C5=A1per=20Grom?= Date: Thu, 16 Jan 2025 11:05:27 +0100 Subject: [PATCH 4/5] Organizations and config usages --- .../config/identities/crunchbase/config.ts | 2 + frontend/src/config/identities/index.ts | 6 + .../src/config/identities/zapier/config.ts | 9 + .../components/confluence-settings-drawer.vue | 4 +- .../config/integrations/confluence/config.ts | 1 + .../devto/components/devto-connect-drawer.vue | 5 +- .../src/config/integrations/devto/config.ts | 1 + .../src/config/integrations/discord/config.ts | 1 + .../components/discourse-settings-drawer.vue | 4 +- .../config/integrations/discourse/config.ts | 1 + .../components/gerrit-settings-drawer.vue | 4 +- .../src/config/integrations/gerrit/config.ts | 1 + .../git/components/git-settings-drawer.vue | 5 +- .../src/config/integrations/git/config.ts | 1 + .../src/config/integrations/github/config.ts | 1 + .../components/gitlab-settings-drawer.vue | 4 +- .../src/config/integrations/gitlab/config.ts | 1 + .../components/groupsio-settings-drawer.vue | 4 +- .../config/integrations/groupsio/config.ts | 1 + .../components/hackernews-settings-drawer.vue | 4 +- .../config/integrations/hackernews/config.ts | 1 + frontend/src/config/integrations/index.ts | 1 + .../integrations/integrations.helpers.ts | 20 + .../jira/components/jira-settings-drawer.vue | 4 +- .../src/config/integrations/jira/config.ts | 1 + .../components/linkedin-settings-drawer.vue | 4 +- .../config/integrations/linkedin/config.ts | 1 + .../components/reddit-settings-drawer.vue | 4 +- .../src/config/integrations/reddit/config.ts | 1 + .../src/config/integrations/slack/config.ts | 1 + .../stackoverflow-settings-drawer.vue | 4 +- .../integrations/stackoverflow/config.ts | 1 + .../components/twitter-settings-drawer.vue | 4 +- .../src/config/integrations/twitter/config.ts | 1 + frontend/src/integrations/bigquery/config.js | 7 - frontend/src/integrations/bigquery/index.js | 3 - frontend/src/integrations/census/config.js | 7 - frontend/src/integrations/census/index.js | 3 - .../src/integrations/crunchbase/config.js | 10 - frontend/src/integrations/crunchbase/index.js | 3 - .../hubspot/components/hubspot-connect.vue | 58 --- .../components/hubspot-property-map.vue | 120 ----- .../hubspot-readonly-attr-popover.vue | 89 ---- .../components/hubspot-settings-drawer.vue | 481 ------------------ frontend/src/integrations/hubspot/config.js | 26 - .../hubspot/hubspot.api.service.ts | 91 ---- frontend/src/integrations/hubspot/index.js | 3 - .../hubspot/types/HubspotEntity.ts | 4 - .../hubspot/types/HubspotLists.ts | 9 - .../hubspot/types/HubspotOnboard.ts | 9 - .../hubspot/types/HubspotProperty.ts | 10 - .../hubspot/types/MappableFields.ts | 4 - .../src/integrations/integrations-config.js | 1 - frontend/src/integrations/lfx/config.js | 11 - frontend/src/integrations/lfx/index.js | 3 - frontend/src/integrations/make/config.js | 9 - frontend/src/integrations/make/index.js | 3 - .../src/integrations/salesforce/config.js | 7 - frontend/src/integrations/salesforce/index.js | 3 - frontend/src/integrations/segment/config.js | 7 - frontend/src/integrations/segment/index.js | 3 - frontend/src/integrations/snowflake/config.js | 7 - frontend/src/integrations/snowflake/index.js | 3 - frontend/src/integrations/tnc/config.js | 8 - frontend/src/integrations/tnc/index.js | 3 - frontend/src/integrations/zapier/config.js | 22 - frontend/src/integrations/zapier/index.js | 3 - .../activityType/ActivityTypeFilter.vue | 7 +- .../config/filters/channel/ChannelFilter.vue | 6 +- .../config/filters/platform/config.ts | 8 +- .../config/filters/channel/ChannelFilter.vue | 4 +- .../config/filters/platform/config.ts | 10 +- .../components/integration-progress.vue | 4 +- .../integration-progress-notification.ts | 4 +- .../modules/integration/integration-store.js | 12 +- .../log-rendering/integrations-connect.ts | 6 +- .../log-rendering/integrations-reconnect.ts | 6 +- .../log-rendering/members-edit-identities.ts | 6 +- .../organizations-edit-identities.ts | 6 +- .../list/columns/member-list-emails.vue | 4 +- .../components/member-dropdown-content.vue | 19 - .../components/member-last-activity.vue | 6 +- .../components/member-unmerge-dialog.vue | 16 +- .../member/config/filters/activeOn/config.ts | 8 +- .../activityType/ActivityTypeFilter.vue | 14 +- .../config/filters/identities/config.ts | 10 +- .../organization-details-domain-item.vue | 7 +- .../email/organization-details-email-item.vue | 5 +- .../organization-details-header-profiles.vue | 12 +- ...nization-details-identity-add-dropdown.vue | 12 +- .../organization-details-identity-item.vue | 11 +- .../organization-attribute-source.vue | 11 +- .../identity/organization-identity-add.vue | 12 +- .../identity/organization-identity-edit.vue | 8 +- .../components/edit/organization-add.vue | 35 +- .../form/organization-form-identities.vue | 12 +- .../organization-dropdown-content.vue | 11 - .../organization-unmerge-dialog.vue | 16 +- .../helpers/organization.helpers.ts | 10 +- .../conversation-drawer-display.vue | 6 +- .../components/emails-vertical-list.vue | 23 +- .../components/identities-vertical-list.vue | 4 +- .../identities/config/useMemberIdentities.ts | 12 +- .../config/useOrganizationIdentities.ts | 26 +- .../modules/platform/components/platform.vue | 6 +- .../config/type/identity/identity.ts | 4 +- .../config/type/identity/type-identity.vue | 8 +- 107 files changed, 241 insertions(+), 1304 deletions(-) create mode 100644 frontend/src/config/identities/zapier/config.ts create mode 100644 frontend/src/config/integrations/integrations.helpers.ts delete mode 100644 frontend/src/integrations/bigquery/config.js delete mode 100644 frontend/src/integrations/bigquery/index.js delete mode 100644 frontend/src/integrations/census/config.js delete mode 100644 frontend/src/integrations/census/index.js delete mode 100644 frontend/src/integrations/crunchbase/config.js delete mode 100644 frontend/src/integrations/crunchbase/index.js delete mode 100644 frontend/src/integrations/hubspot/components/hubspot-connect.vue delete mode 100644 frontend/src/integrations/hubspot/components/hubspot-property-map.vue delete mode 100644 frontend/src/integrations/hubspot/components/hubspot-readonly-attr-popover.vue delete mode 100644 frontend/src/integrations/hubspot/components/hubspot-settings-drawer.vue delete mode 100644 frontend/src/integrations/hubspot/config.js delete mode 100644 frontend/src/integrations/hubspot/hubspot.api.service.ts delete mode 100644 frontend/src/integrations/hubspot/index.js delete mode 100644 frontend/src/integrations/hubspot/types/HubspotEntity.ts delete mode 100644 frontend/src/integrations/hubspot/types/HubspotLists.ts delete mode 100644 frontend/src/integrations/hubspot/types/HubspotOnboard.ts delete mode 100644 frontend/src/integrations/hubspot/types/HubspotProperty.ts delete mode 100644 frontend/src/integrations/hubspot/types/MappableFields.ts delete mode 100644 frontend/src/integrations/lfx/config.js delete mode 100644 frontend/src/integrations/lfx/index.js delete mode 100644 frontend/src/integrations/make/config.js delete mode 100644 frontend/src/integrations/make/index.js delete mode 100644 frontend/src/integrations/salesforce/config.js delete mode 100644 frontend/src/integrations/salesforce/index.js delete mode 100644 frontend/src/integrations/segment/config.js delete mode 100644 frontend/src/integrations/segment/index.js delete mode 100644 frontend/src/integrations/snowflake/config.js delete mode 100644 frontend/src/integrations/snowflake/index.js delete mode 100644 frontend/src/integrations/tnc/config.js delete mode 100644 frontend/src/integrations/tnc/index.js delete mode 100644 frontend/src/integrations/zapier/config.js delete mode 100644 frontend/src/integrations/zapier/index.js diff --git a/frontend/src/config/identities/crunchbase/config.ts b/frontend/src/config/identities/crunchbase/config.ts index 59bbc8bdcc..100a269c86 100644 --- a/frontend/src/config/identities/crunchbase/config.ts +++ b/frontend/src/config/identities/crunchbase/config.ts @@ -6,6 +6,8 @@ const crunchbase: IdentityConfig = { image: '/images/identities/crunchbase.png', organization: { urlPrefix: 'https://www.crunchbase.com/organization/', + handle: (identity) => identity.value, + url: (identity) => `https://www.crunchbase.com/organization/${identity.value}`, }, }; diff --git a/frontend/src/config/identities/index.ts b/frontend/src/config/identities/index.ts index 21b610a22d..8ee917e237 100644 --- a/frontend/src/config/identities/index.ts +++ b/frontend/src/config/identities/index.ts @@ -21,6 +21,8 @@ import slack from './slack/config'; import stackoverflow from './stackoverflow/config'; import tnc from './tnc/config'; import twitter from './twitter/config'; +import zapier from './zapier/config'; +import { OrganizationIdentity } from '@/modules/organization/types/Organization'; export interface IdentityConfig { key: string; // Unique key for the identity @@ -35,6 +37,9 @@ export interface IdentityConfig { }, organization?: { urlPrefix?: string; + placeholder?: string; + handle?: (identity: OrganizationIdentity) => string; + url?: (identity: OrganizationIdentity) => string; } } @@ -63,4 +68,5 @@ export const lfIdentities: Record = { lfid: lfx, n8n, training_cert: tnc, + zapier, }; diff --git a/frontend/src/config/identities/zapier/config.ts b/frontend/src/config/identities/zapier/config.ts new file mode 100644 index 0000000000..985a601d46 --- /dev/null +++ b/frontend/src/config/identities/zapier/config.ts @@ -0,0 +1,9 @@ +import { IdentityConfig } from '@/config/identities'; + +const zapier: IdentityConfig = { + key: 'zapier', + name: 'Zapier', + image: '/images/identities/zapier.png', +}; + +export default zapier; diff --git a/frontend/src/config/integrations/confluence/components/confluence-settings-drawer.vue b/frontend/src/config/integrations/confluence/components/confluence-settings-drawer.vue index e355856d41..50bb3efe9a 100644 --- a/frontend/src/config/integrations/confluence/components/confluence-settings-drawer.vue +++ b/frontend/src/config/integrations/confluence/components/confluence-settings-drawer.vue @@ -81,7 +81,7 @@ import useVuelidate from '@vuelidate/core'; import { computed, onMounted, reactive, ref, } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import confluence from '@/config/integrations/confluence/config'; import formChangeDetector from '@/shared/form/form-change'; import { mapActions } from '@/shared/vuex/vuex.helpers'; import useProductTracking from '@/shared/modules/monitoring/useProductTracking'; @@ -132,7 +132,7 @@ const isVisible = computed({ emit('update:modelValue', value); }, }); -const logoUrl = computed(() => CrowdIntegrations.getConfig('confluence').image); +const logoUrl = confluence.image; onMounted(() => { if (props.integration?.settings) { diff --git a/frontend/src/config/integrations/confluence/config.ts b/frontend/src/config/integrations/confluence/config.ts index ce20257df6..e5001b0822 100644 --- a/frontend/src/config/integrations/confluence/config.ts +++ b/frontend/src/config/integrations/confluence/config.ts @@ -11,6 +11,7 @@ const confluence: IntegrationConfig = { connectComponent: ConfluenceConnect, connectedParamsComponent: ConfluenceParams, dropdownComponent: ConfluenceDropdown, + showProgress: false, }; export default confluence; diff --git a/frontend/src/config/integrations/devto/components/devto-connect-drawer.vue b/frontend/src/config/integrations/devto/components/devto-connect-drawer.vue index e3cd6f2388..feeb0e12fc 100644 --- a/frontend/src/config/integrations/devto/components/devto-connect-drawer.vue +++ b/frontend/src/config/integrations/devto/components/devto-connect-drawer.vue @@ -195,13 +195,12 @@ import { defineProps, watch, } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import { required } from '@vuelidate/validators'; import useVuelidate from '@vuelidate/core'; import AppDrawer from '@/shared/drawer/drawer.vue'; import { mapActions } from '@/shared/vuex/vuex.helpers'; import AppFormItem from '@/shared/form/form-item.vue'; -// import elementChangeDetector from '@/shared/form/element-change'; +import devto from '@/config/integrations/devto/config'; import { IntegrationService } from '@/modules/integration/integration-service'; import useProductTracking from '@/shared/modules/monitoring/useProductTracking'; import { EventType, FeatureEventKey } from '@/shared/modules/monitoring/types/event'; @@ -218,7 +217,7 @@ const props = defineProps<{ grandparentId: string; }>(); -const logoUrl = ref(CrowdIntegrations.getConfig('devto').image); +const logoUrl = devto.image; const users = ref([]); const organizations = ref([]); const loading = ref(false); diff --git a/frontend/src/config/integrations/devto/config.ts b/frontend/src/config/integrations/devto/config.ts index cfed3cc66c..197e7db41a 100644 --- a/frontend/src/config/integrations/devto/config.ts +++ b/frontend/src/config/integrations/devto/config.ts @@ -9,6 +9,7 @@ const devto: IntegrationConfig = { description: 'Connect DEV to sync profile information and comments on articles.', connectComponent: DevtoConnect, connectedParamsComponent: DevtoParams, + showProgress: false, }; export default devto; diff --git a/frontend/src/config/integrations/discord/config.ts b/frontend/src/config/integrations/discord/config.ts index 8a096ab644..d4d5e925ba 100644 --- a/frontend/src/config/integrations/discord/config.ts +++ b/frontend/src/config/integrations/discord/config.ts @@ -9,6 +9,7 @@ const discord: IntegrationConfig = { description: 'Connect Discord to sync messages, threads, forum channels, and new joiners.', connectComponent: DiscordConnect, connectedParamsComponent: DiscordParams, + showProgress: false, }; export default discord; diff --git a/frontend/src/config/integrations/discourse/components/discourse-settings-drawer.vue b/frontend/src/config/integrations/discourse/components/discourse-settings-drawer.vue index 262282b036..2ebe96ab37 100644 --- a/frontend/src/config/integrations/discourse/components/discourse-settings-drawer.vue +++ b/frontend/src/config/integrations/discourse/components/discourse-settings-drawer.vue @@ -198,7 +198,7 @@ import { computed, defineEmits, defineProps, onMounted, reactive, ref, } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import discourse from '@/config/integrations/discourse/config'; import { helpers, required, url } from '@vuelidate/validators'; import useVuelidate from '@vuelidate/core'; import AppDrawer from '@/shared/drawer/drawer.vue'; @@ -329,7 +329,7 @@ const emit = defineEmits(['update:modelValue']); const { hasFormChanged, formSnapshot } = formChangeDetector(form); -const logoUrl = CrowdIntegrations.getConfig('discourse').image; +const logoUrl = discourse.image; const isVisible = computed({ get() { diff --git a/frontend/src/config/integrations/discourse/config.ts b/frontend/src/config/integrations/discourse/config.ts index a6bf02b2f8..9ec0fa7cc9 100644 --- a/frontend/src/config/integrations/discourse/config.ts +++ b/frontend/src/config/integrations/discourse/config.ts @@ -11,6 +11,7 @@ const discourse: IntegrationConfig = { connectComponent: DiscourseConnect, connectedParamsComponent: DiscourseParams, dropdownComponent: DiscourseDropdown, + showProgress: false, }; export default discourse; diff --git a/frontend/src/config/integrations/gerrit/components/gerrit-settings-drawer.vue b/frontend/src/config/integrations/gerrit/components/gerrit-settings-drawer.vue index c0492c2e4e..002f896d60 100644 --- a/frontend/src/config/integrations/gerrit/components/gerrit-settings-drawer.vue +++ b/frontend/src/config/integrations/gerrit/components/gerrit-settings-drawer.vue @@ -97,7 +97,7 @@ import useVuelidate from '@vuelidate/core'; import { computed, defineProps, onMounted, reactive, ref, } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import gerrit from '@/config/integrations/gerrit/config'; import formChangeDetector from '@/shared/form/form-change'; import { mapActions } from '@/shared/vuex/vuex.helpers'; import AppArrayInput from '@/shared/form/array-input.vue'; @@ -137,7 +137,7 @@ const isVisible = computed({ emit('update:modelValue', value); }, }); -const logoUrl = computed(() => CrowdIntegrations.getConfig('gerrit').image); +const logoUrl = gerrit.image; onMounted(() => { if (props.integration?.settings?.remote) { diff --git a/frontend/src/config/integrations/gerrit/config.ts b/frontend/src/config/integrations/gerrit/config.ts index 9f9232020a..6e05b2fcda 100644 --- a/frontend/src/config/integrations/gerrit/config.ts +++ b/frontend/src/config/integrations/gerrit/config.ts @@ -11,6 +11,7 @@ const gerrit: IntegrationConfig = { connectComponent: GerritConnect, connectedParamsComponent: GerritParams, dropdownComponent: GerritDropdown, + showProgress: false, }; export default gerrit; diff --git a/frontend/src/config/integrations/git/components/git-settings-drawer.vue b/frontend/src/config/integrations/git/components/git-settings-drawer.vue index 92af8cd181..f8d0513bb3 100644 --- a/frontend/src/config/integrations/git/components/git-settings-drawer.vue +++ b/frontend/src/config/integrations/git/components/git-settings-drawer.vue @@ -69,7 +69,7 @@ import useVuelidate from '@vuelidate/core'; import { computed, onMounted, reactive, ref, } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import git from '@/config/integrations/git/config'; import AppArrayInput from '@/shared/form/array-input.vue'; import formChangeDetector from '@/shared/form/form-change'; import { mapActions } from '@/shared/vuex/vuex.helpers'; @@ -113,7 +113,8 @@ const isVisible = computed({ emit('update:modelValue', value); }, }); -const logoUrl = computed(() => CrowdIntegrations.getConfig('git').image); + +const logoUrl = git.image; onMounted(() => { if (props.integration?.settings?.remotes?.length) { diff --git a/frontend/src/config/integrations/git/config.ts b/frontend/src/config/integrations/git/config.ts index 2c3f3da56a..b56faa540c 100644 --- a/frontend/src/config/integrations/git/config.ts +++ b/frontend/src/config/integrations/git/config.ts @@ -11,6 +11,7 @@ const git: IntegrationConfig = { connectComponent: GitConnect, dropdownComponent: GitDropdown, connectedParamsComponent: GitParams, + showProgress: false, }; export default git; diff --git a/frontend/src/config/integrations/github/config.ts b/frontend/src/config/integrations/github/config.ts index ef0a6854f0..7c1f02d2ec 100644 --- a/frontend/src/config/integrations/github/config.ts +++ b/frontend/src/config/integrations/github/config.ts @@ -11,6 +11,7 @@ const github: IntegrationConfig = { connectComponent: GithubConnect, dropdownComponent: GithubDropdown, connectedParamsComponent: GithubParams, + showProgress: true, }; export default github; diff --git a/frontend/src/config/integrations/gitlab/components/gitlab-settings-drawer.vue b/frontend/src/config/integrations/gitlab/components/gitlab-settings-drawer.vue index f76e354282..477525984b 100644 --- a/frontend/src/config/integrations/gitlab/components/gitlab-settings-drawer.vue +++ b/frontend/src/config/integrations/gitlab/components/gitlab-settings-drawer.vue @@ -194,7 +194,7 @@ import { computed, onMounted, ref, watch, } from 'vue'; import Message from '@/shared/message/message'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import gitlab from '@/config/integrations/gitlab/config'; import { LfService } from '@/modules/lf/segments/lf-segments-service'; import { useRouter } from 'vue-router'; import { required } from '@vuelidate/validators'; @@ -279,7 +279,7 @@ const groupedProjects = computed(() => allProjects.value.reduce((acc, project) = }, {})); // Static gitlab details -const gitlabDetails = computed(() => CrowdIntegrations.getConfig('gitlab')); +const gitlabDetails = gitlab; // Form const form = ref>( diff --git a/frontend/src/config/integrations/gitlab/config.ts b/frontend/src/config/integrations/gitlab/config.ts index 63102e66af..398fdbad97 100644 --- a/frontend/src/config/integrations/gitlab/config.ts +++ b/frontend/src/config/integrations/gitlab/config.ts @@ -13,6 +13,7 @@ const gitlab: IntegrationConfig = { connectedParamsComponent: GitlabParams, actionComponent: GitlabAction, statusComponent: GitlabStatus, + showProgress: false, }; export default gitlab; diff --git a/frontend/src/config/integrations/groupsio/components/groupsio-settings-drawer.vue b/frontend/src/config/integrations/groupsio/components/groupsio-settings-drawer.vue index 3fbe367df5..d3882446a1 100644 --- a/frontend/src/config/integrations/groupsio/components/groupsio-settings-drawer.vue +++ b/frontend/src/config/integrations/groupsio/components/groupsio-settings-drawer.vue @@ -210,7 +210,7 @@ import { ref, reactive, onMounted, computed, } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import groupsio from '@/config/integrations/groupsio/config'; import { required, email } from '@vuelidate/validators'; import useVuelidate from '@vuelidate/core'; import AppDrawer from '@/shared/drawer/drawer.vue'; @@ -411,7 +411,7 @@ const emit = defineEmits(['update:modelValue']); const { hasFormChanged, formSnapshot } = formChangeDetector(form); -const logoUrl = CrowdIntegrations.getConfig('groupsio').image; +const logoUrl = groupsio.image; const isVisible = computed({ get() { diff --git a/frontend/src/config/integrations/groupsio/config.ts b/frontend/src/config/integrations/groupsio/config.ts index bbafc980b8..a8f414bbcc 100644 --- a/frontend/src/config/integrations/groupsio/config.ts +++ b/frontend/src/config/integrations/groupsio/config.ts @@ -11,6 +11,7 @@ const groupsio: IntegrationConfig = { connectComponent: GroupsioConnect, connectedParamsComponent: GroupsioParams, dropdownComponent: GroupsioDropdown, + showProgress: false, }; export default groupsio; diff --git a/frontend/src/config/integrations/hackernews/components/hackernews-settings-drawer.vue b/frontend/src/config/integrations/hackernews/components/hackernews-settings-drawer.vue index fb88c807da..92eb041071 100644 --- a/frontend/src/config/integrations/hackernews/components/hackernews-settings-drawer.vue +++ b/frontend/src/config/integrations/hackernews/components/hackernews-settings-drawer.vue @@ -121,7 +121,7 @@ - - diff --git a/frontend/src/integrations/hubspot/components/hubspot-property-map.vue b/frontend/src/integrations/hubspot/components/hubspot-property-map.vue deleted file mode 100644 index e59926a177..0000000000 --- a/frontend/src/integrations/hubspot/components/hubspot-property-map.vue +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - diff --git a/frontend/src/integrations/hubspot/components/hubspot-readonly-attr-popover.vue b/frontend/src/integrations/hubspot/components/hubspot-readonly-attr-popover.vue deleted file mode 100644 index 7605c2c659..0000000000 --- a/frontend/src/integrations/hubspot/components/hubspot-readonly-attr-popover.vue +++ /dev/null @@ -1,89 +0,0 @@ - - - - - diff --git a/frontend/src/integrations/hubspot/components/hubspot-settings-drawer.vue b/frontend/src/integrations/hubspot/components/hubspot-settings-drawer.vue deleted file mode 100644 index 20c816481b..0000000000 --- a/frontend/src/integrations/hubspot/components/hubspot-settings-drawer.vue +++ /dev/null @@ -1,481 +0,0 @@ - - - - - - - diff --git a/frontend/src/integrations/hubspot/config.js b/frontend/src/integrations/hubspot/config.js deleted file mode 100644 index 2f04c1aab7..0000000000 --- a/frontend/src/integrations/hubspot/config.js +++ /dev/null @@ -1,26 +0,0 @@ -import HubspotConnect from './components/hubspot-connect.vue'; - -export default { - name: 'HubSpot', - backgroundColor: '#FFFFFF', - borderColor: '#FFFFFF', - description: 'Create a 2-way sync with HubSpot.', - image: - '/images/integrations/hubspot.svg', - connectComponent: HubspotConnect, - enabled: true, - url: (username) => null, - scale: true, - chartColor: '#FF712E', - showProfileLink: true, - activityDisplay: { - showLinkToUrl: true, - }, - conversationDisplay: { - replyContent: (conversation) => ({ - icon: 'ri-reply-line', - copy: 'reply', - number: conversation.activityCount - 1, - }), - }, -}; diff --git a/frontend/src/integrations/hubspot/hubspot.api.service.ts b/frontend/src/integrations/hubspot/hubspot.api.service.ts deleted file mode 100644 index c771d94fa8..0000000000 --- a/frontend/src/integrations/hubspot/hubspot.api.service.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { AuthService } from '@/modules/auth/services/auth.service'; -import authAxios from '@/shared/axios/auth-axios'; -import { MappableFields } from '@/integrations/hubspot/types/MappableFields'; -import { HubspotOnboard } from '@/integrations/hubspot/types/HubspotOnboard'; -import { HubspotLists } from '@/integrations/hubspot/types/HubspotLists'; - -export class HubspotApiService { - static getMappableFields(): Promise { - const tenantId = AuthService.getTenantId(); - - return authAxios.get( - `/tenant/${tenantId}/hubspot-mappable-fields`, - ) - .then((response) => response.data); - } - - static updateAttributes(): Promise { - const tenantId = AuthService.getTenantId(); - return authAxios.post( - `/tenant/${tenantId}/hubspot-update-properties`, - ) - .then((response) => response.data); - } - - static finishOnboard(data: HubspotOnboard): Promise { - const tenantId = AuthService.getTenantId(); - - return authAxios.post( - `/tenant/${tenantId}/hubspot-onboard`, - data, - ) - .then((response) => response.data); - } - - static syncMember(memberId: string): Promise { - const tenantId = AuthService.getTenantId(); - - return authAxios.post( - `/tenant/${tenantId}/hubspot-sync-member`, - { - memberId, - }, - ) - .then((response) => response.data); - } - - static stopSyncMember(memberId: string): Promise { - const tenantId = AuthService.getTenantId(); - - return authAxios.post( - `/tenant/${tenantId}/hubspot-stop-sync-member`, - { - memberId, - }, - ) - .then((response) => response.data); - } - - static syncOrganization(organizationId: string): Promise { - const tenantId = AuthService.getTenantId(); - - return authAxios.post( - `/tenant/${tenantId}/hubspot-sync-organization`, - { - organizationId, - }, - ) - .then((response) => response.data); - } - - static stopSyncOrganization(organizationId: string): Promise { - const tenantId = AuthService.getTenantId(); - - return authAxios.post( - `/tenant/${tenantId}/hubspot-stop-sync-organization`, - { - organizationId, - }, - ) - .then((response) => response.data); - } - - static getLists(): Promise { - const tenantId = AuthService.getTenantId(); - - return authAxios.get( - `/tenant/${tenantId}/hubspot-get-lists`, - ) - .then((response) => response.data); - } -} diff --git a/frontend/src/integrations/hubspot/index.js b/frontend/src/integrations/hubspot/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/hubspot/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/hubspot/types/HubspotEntity.ts b/frontend/src/integrations/hubspot/types/HubspotEntity.ts deleted file mode 100644 index b6539c7f38..0000000000 --- a/frontend/src/integrations/hubspot/types/HubspotEntity.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum HubspotEntity { - MEMBERS= 'members', - ORGANIZATIONS = 'organizations' -} diff --git a/frontend/src/integrations/hubspot/types/HubspotLists.ts b/frontend/src/integrations/hubspot/types/HubspotLists.ts deleted file mode 100644 index 18f4221327..0000000000 --- a/frontend/src/integrations/hubspot/types/HubspotLists.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface HubspotList { - id: string; - name: string; -} - -export interface HubspotLists { - members: HubspotList[]; - organizations: HubspotList[]; -} diff --git a/frontend/src/integrations/hubspot/types/HubspotOnboard.ts b/frontend/src/integrations/hubspot/types/HubspotOnboard.ts deleted file mode 100644 index 4d6da16dd2..0000000000 --- a/frontend/src/integrations/hubspot/types/HubspotOnboard.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { HubspotEntity } from '@/integrations/hubspot/types/HubspotEntity'; - -export interface HubspotOnboard{ - enabledFor: HubspotEntity[]; - attributesMapping: { - [HubspotEntity.MEMBERS]?: Record; - [HubspotEntity.ORGANIZATIONS]?: Record; - }; -} diff --git a/frontend/src/integrations/hubspot/types/HubspotProperty.ts b/frontend/src/integrations/hubspot/types/HubspotProperty.ts deleted file mode 100644 index 9c7a55347b..0000000000 --- a/frontend/src/integrations/hubspot/types/HubspotProperty.ts +++ /dev/null @@ -1,10 +0,0 @@ -export interface HubspotProperty { - label: string; - name: string; - type: string; -} - -export interface HubspotProperties { - members: HubspotProperty[]; - organizations: HubspotProperty[]; -} diff --git a/frontend/src/integrations/hubspot/types/MappableFields.ts b/frontend/src/integrations/hubspot/types/MappableFields.ts deleted file mode 100644 index 9b25aaa022..0000000000 --- a/frontend/src/integrations/hubspot/types/MappableFields.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface MappableFields { - members: Record, - organizations: Record, -} diff --git a/frontend/src/integrations/integrations-config.js b/frontend/src/integrations/integrations-config.js index 67a80176e6..c445619a55 100644 --- a/frontend/src/integrations/integrations-config.js +++ b/frontend/src/integrations/integrations-config.js @@ -10,7 +10,6 @@ import stackoverflow from './stackoverflow'; import reddit from './reddit'; import linkedin from './linkedin'; import zapier from './zapier'; -import crunchbase from './crunchbase'; // import make from './make'; import git from './git'; import facebook from './facebook'; diff --git a/frontend/src/integrations/lfx/config.js b/frontend/src/integrations/lfx/config.js deleted file mode 100644 index d8aba988d1..0000000000 --- a/frontend/src/integrations/lfx/config.js +++ /dev/null @@ -1,11 +0,0 @@ -export default { - name: 'Linux Foundation ID', - image: '/images/integrations/custom/lfx.png', - enabled: true, - chartColor: '#003764', - url: () => null, - placeholder: 'Linux Foundation ID', - supportUrl: - 'https://jira.linuxfoundation.org/plugins/servlet/desk/portal/4?requestGroup=54', - hideCustomIntegration: true, -}; diff --git a/frontend/src/integrations/lfx/index.js b/frontend/src/integrations/lfx/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/lfx/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/make/config.js b/frontend/src/integrations/make/config.js deleted file mode 100644 index f6bf9e6f1c..0000000000 --- a/frontend/src/integrations/make/config.js +++ /dev/null @@ -1,9 +0,0 @@ -export default { - enabled: false, - name: 'Make', - backgroundColor: '#FFFFFF', - borderColor: '#FFFFFF', - description: - "We're currently working on this integration.", - image: '/images/integrations/make.svg', -}; diff --git a/frontend/src/integrations/make/index.js b/frontend/src/integrations/make/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/make/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/salesforce/config.js b/frontend/src/integrations/salesforce/config.js deleted file mode 100644 index 133b741d4f..0000000000 --- a/frontend/src/integrations/salesforce/config.js +++ /dev/null @@ -1,7 +0,0 @@ -export default { - name: 'Salesforce', - description: 'Create a 2-way sync with your Salesforce CRM.', - image: - '/images/integrations/salesforce.png', - enterprise: true, -}; diff --git a/frontend/src/integrations/salesforce/index.js b/frontend/src/integrations/salesforce/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/salesforce/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/segment/config.js b/frontend/src/integrations/segment/config.js deleted file mode 100644 index 28cd14af1b..0000000000 --- a/frontend/src/integrations/segment/config.js +++ /dev/null @@ -1,7 +0,0 @@ -export default { - name: 'Segment', - description: 'Connect Segment to get a full view of your customer journey.', - image: - '/images/integrations/segment.svg', - enterprise: true, -}; diff --git a/frontend/src/integrations/segment/index.js b/frontend/src/integrations/segment/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/segment/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/snowflake/config.js b/frontend/src/integrations/snowflake/config.js deleted file mode 100644 index 42d19ccfbf..0000000000 --- a/frontend/src/integrations/snowflake/config.js +++ /dev/null @@ -1,7 +0,0 @@ -export default { - name: 'Snowflake', - description: 'Create a 2-way sync with your Snowflake data warehouse.', - image: - '/images/integrations/snowflake.svg', - enterprise: true, -}; diff --git a/frontend/src/integrations/snowflake/index.js b/frontend/src/integrations/snowflake/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/snowflake/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/tnc/config.js b/frontend/src/integrations/tnc/config.js deleted file mode 100644 index 603eae8421..0000000000 --- a/frontend/src/integrations/tnc/config.js +++ /dev/null @@ -1,8 +0,0 @@ -export default { - name: 'Training & Certification', - image: '/images/integrations/custom/tnc.png', - enabled: true, - chartColor: '#9FD0CB', - placeholder: 'Linux Foundation ID', - url: () => null, -}; diff --git a/frontend/src/integrations/tnc/index.js b/frontend/src/integrations/tnc/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/tnc/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/integrations/zapier/config.js b/frontend/src/integrations/zapier/config.js deleted file mode 100644 index d11794c574..0000000000 --- a/frontend/src/integrations/zapier/config.js +++ /dev/null @@ -1,22 +0,0 @@ -export default { - enabled: true, - name: 'Zapier', - backgroundColor: '#FFFFFF', - borderColor: '#FFFFFF', - description: 'Use Zapier to connect LFX with 5,000+ apps.', - image: - 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRjwkLT9PbSES0VK7HH2KbXxWdH8oc7k7oIJA&s', - url: () => null, - chartColor: '#FF9676', - showProfileLink: true, - activityDisplay: { - showLinkToUrl: true, - }, - conversationDisplay: { - replyContent: (conversation) => ({ - icon: 'ri-reply-line', - copy: 'reply', - number: conversation.activityCount - 1, - }), - }, -}; diff --git a/frontend/src/integrations/zapier/index.js b/frontend/src/integrations/zapier/index.js deleted file mode 100644 index e81a18f3ed..0000000000 --- a/frontend/src/integrations/zapier/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import config from './config'; - -export default config; diff --git a/frontend/src/modules/activity/config/filters/activityType/ActivityTypeFilter.vue b/frontend/src/modules/activity/config/filters/activityType/ActivityTypeFilter.vue index e6ec802325..602992f325 100644 --- a/frontend/src/modules/activity/config/filters/activityType/ActivityTypeFilter.vue +++ b/frontend/src/modules/activity/config/filters/activityType/ActivityTypeFilter.vue @@ -14,10 +14,10 @@ import { } from '@/shared/modules/filters/types/filterTypes/MultiSelectFilterConfig'; import { CustomFilterConfig } from '@/shared/modules/filters/types/filterTypes/CustomFilterConfig'; import { useActivityTypeStore } from '@/modules/activity/store/type'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import { getSegmentsFromProjectGroup } from '@/utils/segments'; import { useLfSegmentsStore } from '@/modules/lf/segments/store'; import { lfIdentities } from '@/config/identities'; +import useIntegrationsHelpers from '@/config/integrations/integrations.helpers'; const props = defineProps<{ modelValue: string, @@ -30,10 +30,9 @@ const activityTypeStore = useActivityTypeStore(); const { types } = storeToRefs(activityTypeStore); const store = useStore(); +const { getActiveIntegrations } = useIntegrationsHelpers(); -const activeIntegrations = computed(() => CrowdIntegrations.mappedEnabledConfigs( - store, -).filter((integration) => integration.status).map((integration) => integration.platform)); +const activeIntegrations = computed(() => getActiveIntegrations().map((integration) => integration.key)); const lsSegmentsStore = useLfSegmentsStore(); const { selectedProjectGroup } = storeToRefs(lsSegmentsStore); diff --git a/frontend/src/modules/activity/config/filters/channel/ChannelFilter.vue b/frontend/src/modules/activity/config/filters/channel/ChannelFilter.vue index 7543bd16c4..ffd9a437f3 100644 --- a/frontend/src/modules/activity/config/filters/channel/ChannelFilter.vue +++ b/frontend/src/modules/activity/config/filters/channel/ChannelFilter.vue @@ -11,10 +11,10 @@ import { MultiSelectFilterConfig, MultiSelectFilterOptionGroup, } from '@/shared/modules/filters/types/filterTypes/MultiSelectFilterConfig'; import { CustomFilterConfig } from '@/shared/modules/filters/types/filterTypes/CustomFilterConfig'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import { extractRepoNameFromUrl } from '@/utils/string'; import { useActivityStore } from '@/modules/activity/store/pinia'; import { storeToRefs } from 'pinia'; +import { lfIdentities } from '@/config/identities'; const props = defineProps<{ modelValue: string, @@ -22,7 +22,7 @@ const props = defineProps<{ data: any, }>(); -const emit = defineEmits<{(e: 'update:modelValue', value: string), (e: 'update:data', value: any),}>(); +const emit = defineEmits<{(e: 'update:modelValue', value: string): void, (e: 'update:data', value: any): void}>(); const form = computed({ get: () => props.modelValue, @@ -39,7 +39,7 @@ const { activityChannels } = storeToRefs(activityStore); watch(() => activityChannels.value, () => { data.value.options = Object.entries(activityChannels.value).map(([platform, channels]): MultiSelectFilterOptionGroup => ({ - label: CrowdIntegrations.getConfig(platform)?.name ?? platform, + label: lfIdentities[platform]?.name ?? platform, options: channels.map((channel) => ({ value: channel, label: platform === 'github' ? extractRepoNameFromUrl(channel) : channel, diff --git a/frontend/src/modules/activity/config/filters/platform/config.ts b/frontend/src/modules/activity/config/filters/platform/config.ts index 49e5523b88..6f55af5d73 100644 --- a/frontend/src/modules/activity/config/filters/platform/config.ts +++ b/frontend/src/modules/activity/config/filters/platform/config.ts @@ -4,8 +4,8 @@ import { MultiSelectFilterOptions, MultiSelectFilterValue, } from '@/shared/modules/filters/types/filterTypes/MultiSelectFilterConfig'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import { itemLabelRendererByType } from '@/shared/modules/filters/config/itemLabelRendererByType'; +import { lfIdentities } from '@/config/identities'; const platform: MultiSelectFilterConfig = { id: 'platform', @@ -16,9 +16,9 @@ const platform: MultiSelectFilterConfig = { options: [ { options: [ - ...(CrowdIntegrations.enabledConfigs.map((platform) => ({ - label: (platform as any).name, - value: platform.platform, + ...(Object.values(lfIdentities).map((identity) => ({ + label: identity.name, + value: identity.key, }))), { label: 'Other', diff --git a/frontend/src/modules/conversation/config/filters/channel/ChannelFilter.vue b/frontend/src/modules/conversation/config/filters/channel/ChannelFilter.vue index 8b239da528..7e23d769cb 100644 --- a/frontend/src/modules/conversation/config/filters/channel/ChannelFilter.vue +++ b/frontend/src/modules/conversation/config/filters/channel/ChannelFilter.vue @@ -11,10 +11,10 @@ import { SelectFilterConfig, SelectFilterOptionGroup, } from '@/shared/modules/filters/types/filterTypes/SelectFilterConfig'; import { CustomFilterConfig } from '@/shared/modules/filters/types/filterTypes/CustomFilterConfig'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import { extractRepoNameFromUrl } from '@/utils/string'; import { useActivityStore } from '@/modules/activity/store/pinia'; import { storeToRefs } from 'pinia'; +import { lfIdentities } from '@/config/identities'; const props = defineProps<{ modelValue: string, @@ -39,7 +39,7 @@ const { activityChannels } = storeToRefs(activityStore); watch(() => activityChannels.value, () => { data.value.options = Object.entries(activityChannels.value).map(([platform, channels]): SelectFilterOptionGroup => ({ - label: CrowdIntegrations.getConfig(platform)?.name ?? platform, + label: lfIdentities[platform]?.name ?? platform, options: channels.map((channel) => ({ value: channel, label: platform === 'github' ? extractRepoNameFromUrl(channel) : channel, diff --git a/frontend/src/modules/conversation/config/filters/platform/config.ts b/frontend/src/modules/conversation/config/filters/platform/config.ts index 49e5523b88..f269fe9d6f 100644 --- a/frontend/src/modules/conversation/config/filters/platform/config.ts +++ b/frontend/src/modules/conversation/config/filters/platform/config.ts @@ -4,8 +4,8 @@ import { MultiSelectFilterOptions, MultiSelectFilterValue, } from '@/shared/modules/filters/types/filterTypes/MultiSelectFilterConfig'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import { itemLabelRendererByType } from '@/shared/modules/filters/config/itemLabelRendererByType'; +import { lfIdentities } from '@/config/identities'; const platform: MultiSelectFilterConfig = { id: 'platform', @@ -16,10 +16,10 @@ const platform: MultiSelectFilterConfig = { options: [ { options: [ - ...(CrowdIntegrations.enabledConfigs.map((platform) => ({ - label: (platform as any).name, - value: platform.platform, - }))), + ...Object.values(lfIdentities).map((identity) => ({ + label: identity.name, + value: identity.key, + })), { label: 'Other', value: 'other', diff --git a/frontend/src/modules/integration/components/integration-progress.vue b/frontend/src/modules/integration/components/integration-progress.vue index 32ea5fe807..0c9c88c822 100644 --- a/frontend/src/modules/integration/components/integration-progress.vue +++ b/frontend/src/modules/integration/components/integration-progress.vue @@ -36,7 +36,7 @@ import LfSpinner from '@/ui-kit/spinner/Spinner.vue'; import { IntegrationProgress, IntegrationProgressPart } from '@/modules/integration/types/IntegrationProgress'; import { computed } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIntegrations } from '@/config/integrations'; const props = defineProps<{ progress: IntegrationProgress | null, @@ -55,7 +55,7 @@ const showProgress = computed(() => { if (!props.progress) { return false; } - return CrowdIntegrations.getConfig(props.progress.platform)?.showProgress || false; + return lfIntegrations[props.progress.platform]?.showProgress || false; }); const parts = computed(() => { diff --git a/frontend/src/modules/integration/helpers/integration-progress-notification.ts b/frontend/src/modules/integration/helpers/integration-progress-notification.ts index 9e23a3d0c0..b73fec5b67 100644 --- a/frontend/src/modules/integration/helpers/integration-progress-notification.ts +++ b/frontend/src/modules/integration/helpers/integration-progress-notification.ts @@ -2,10 +2,10 @@ import { createVNode, h } from 'vue'; import AppIntegrationProgress from '@/modules/integration/components/integration-progress.vue'; import AppIntegrationProgressWrapper from '@/modules/integration/components/integration-progress-wrapper.vue'; import { ElNotification } from 'element-plus'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIntegrations } from '@/config/integrations'; export const showIntegrationProgressNotification = (platform, segmentId) => { - const label = CrowdIntegrations.getConfig(platform)?.name; + const label = lfIntegrations[platform]?.name; const defaultSlot = ({ progress }) => { const integrationProgress = (progress || []).find((p) => p.platform === platform); const text = h('p', { diff --git a/frontend/src/modules/integration/integration-store.js b/frontend/src/modules/integration/integration-store.js index d2e5693887..1b4da41890 100644 --- a/frontend/src/modules/integration/integration-store.js +++ b/frontend/src/modules/integration/integration-store.js @@ -1,10 +1,10 @@ import { IntegrationService } from '@/modules/integration/integration-service'; import Errors from '@/shared/error/errors'; import { router } from '@/router'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import { isCurrentDateAfterGivenWorkingDays } from '@/utils/date'; import { showIntegrationProgressNotification } from '@/modules/integration/helpers/integration-progress-notification'; import Message from '../../shared/message/message'; +import { lfIntegrations } from '@/config/integrations'; export const ERROR_BANNER_WORKING_DAYS_DISPLAY = 3; @@ -32,23 +32,17 @@ export default { findByPlatform: (state, getters) => (platform) => getters.array.find((w) => w.platform === platform), list: (state) => Object.keys(state.byId).reduce((acc, key) => { - const integrationJsonData = CrowdIntegrations.getConfig( - state.byId[key].platform, - ); acc[key] = { ...state.byId[key], - ...integrationJsonData, + ...lfIntegrations[state.byId[key].platform], }; return acc; }, {}), listByPlatform: (state) => Object.keys(state.byId).reduce((acc, key) => { - const integrationJsonData = CrowdIntegrations.getConfig( - state.byId[key].platform, - ); acc[state.byId[key].platform] = { ...state.byId[key], - ...integrationJsonData, + ...lfIntegrations[state.byId[key].platform], }; return acc; }, {}), diff --git a/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-connect.ts b/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-connect.ts index c024dd4715..c318db1cf4 100644 --- a/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-connect.ts +++ b/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-connect.ts @@ -1,18 +1,18 @@ import { LogRenderingConfig } from '@/modules/lf/config/audit-logs/log-rendering/index'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIdentities } from '@/config/identities'; const integrationsConnect: LogRenderingConfig = { label: 'Integration connected', changes: () => null, description: (log) => { - const integration = CrowdIntegrations.getConfig(log.newState?.platform || log.oldState?.platform); + const integration = lfIdentities[log.newState?.platform || log.oldState?.platform]; if (integration) { return `Integration: ${integration.name}`; } return ''; }, properties: (log) => { - const integration = CrowdIntegrations.getConfig(log.newState?.platform || log.oldState?.platform); + const integration = lfIdentities[log.newState?.platform || log.oldState?.platform]; if (integration) { return [{ label: 'Integration', diff --git a/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-reconnect.ts b/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-reconnect.ts index fe4a2a5201..15c15ec57b 100644 --- a/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-reconnect.ts +++ b/frontend/src/modules/lf/config/audit-logs/log-rendering/integrations-reconnect.ts @@ -1,18 +1,18 @@ import { LogRenderingConfig } from '@/modules/lf/config/audit-logs/log-rendering/index'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIdentities } from '@/config/identities'; const integrationsReconnect: LogRenderingConfig = { label: 'Integration re-connected', changes: () => null, description: (log) => { - const integration = CrowdIntegrations.getConfig(log.newState?.platform || log.oldState?.platform); + const integration = lfIdentities[log.newState?.platform || log.oldState?.platform]; if (integration) { return `Integration: ${integration.name}`; } return ''; }, properties: (log) => { - const integration = CrowdIntegrations.getConfig(log.newState?.platform || log.oldState?.platform); + const integration = lfIdentities[log.newState?.platform || log.oldState?.platform]; if (integration) { return [{ label: 'Integration', diff --git a/frontend/src/modules/lf/config/audit-logs/log-rendering/members-edit-identities.ts b/frontend/src/modules/lf/config/audit-logs/log-rendering/members-edit-identities.ts index faeab19920..887410c466 100644 --- a/frontend/src/modules/lf/config/audit-logs/log-rendering/members-edit-identities.ts +++ b/frontend/src/modules/lf/config/audit-logs/log-rendering/members-edit-identities.ts @@ -1,5 +1,5 @@ import { LogRenderingConfig } from '@/modules/lf/config/audit-logs/log-rendering/index'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIdentities } from '@/config/identities'; const membersEditIdentities: LogRenderingConfig = { label: 'Profile identities updated', @@ -11,7 +11,7 @@ const membersEditIdentities: LogRenderingConfig = { Object.keys(log.oldState).forEach((platform) => { log.oldState[platform].forEach((identity) => { if (!log.newState[platform] || log.newState[platform].length === 0 || !log.newState[platform].includes(identity)) { - removals.push(`${CrowdIntegrations.getConfig(platform)?.name || platform} username: ${identity}`); + removals.push(`${lfIdentities[platform]?.name || platform} username: ${identity}`); } }); }); @@ -20,7 +20,7 @@ const membersEditIdentities: LogRenderingConfig = { Object.keys(log.newState).forEach((platform) => { log.newState[platform].forEach((identity) => { if (!log.oldState[platform] || !log.oldState[platform].includes(identity)) { - additions.push(`${CrowdIntegrations.getConfig(platform)?.name || platform} username: ${identity}`); + additions.push(`${lfIdentities[platform]?.name || platform} username: ${identity}`); } }); }); diff --git a/frontend/src/modules/lf/config/audit-logs/log-rendering/organizations-edit-identities.ts b/frontend/src/modules/lf/config/audit-logs/log-rendering/organizations-edit-identities.ts index de68323805..79446358e7 100644 --- a/frontend/src/modules/lf/config/audit-logs/log-rendering/organizations-edit-identities.ts +++ b/frontend/src/modules/lf/config/audit-logs/log-rendering/organizations-edit-identities.ts @@ -1,5 +1,5 @@ import { LogRenderingConfig } from '@/modules/lf/config/audit-logs/log-rendering/index'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIdentities } from '@/config/identities'; const organizationsEditIdentities: LogRenderingConfig = { label: 'Organization identities updated', @@ -27,8 +27,8 @@ const organizationsEditIdentities: LogRenderingConfig = { }); return { - additions: (additions || []).map((p) => `${CrowdIntegrations.getConfig(p.platform)?.name || p.platform}: ${p.name}`), - removals: (removals || []).map((p) => `${CrowdIntegrations.getConfig(p.platform)?.name || p.platform}: ${p.name}`), + additions: (additions || []).map((p) => `${lfIdentities[p.platform]?.name || p.platform}: ${p.name}`), + removals: (removals || []).map((p) => `${lfIdentities[p.platform]?.name || p.platform}: ${p.name}`), changes: [], }; }, diff --git a/frontend/src/modules/member/components/list/columns/member-list-emails.vue b/frontend/src/modules/member/components/list/columns/member-list-emails.vue index fabd492d5f..38df7fdf99 100644 --- a/frontend/src/modules/member/components/list/columns/member-list-emails.vue +++ b/frontend/src/modules/member/components/list/columns/member-list-emails.vue @@ -115,7 +115,7 @@ import { Member } from '@/modules/member/types/Member'; import { computed } from 'vue'; import useMemberIdentities from '@/shared/modules/identities/config/useMemberIdentities'; import memberOrder from '@/shared/modules/identities/config/identitiesOrder/member'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIdentities } from '@/config/identities'; const props = defineProps<{ member: Member @@ -160,7 +160,7 @@ const getPlatformLabel = (platforms: string[]) => platforms if (platform === 'enrichment') { return 'Enrichment'; } - return CrowdIntegrations.getConfig(platform)?.name || platform; + return lfIdentities[platform]?.name || platform; }).join(', '); const trackEmailClick = () => { diff --git a/frontend/src/modules/member/components/member-dropdown-content.vue b/frontend/src/modules/member/components/member-dropdown-content.vue index 0c1c01ffec..afb31b7c36 100644 --- a/frontend/src/modules/member/components/member-dropdown-content.vue +++ b/frontend/src/modules/member/components/member-dropdown-content.vue @@ -229,25 +229,6 @@ const memberStore = useMemberStore(); const { hasPermission } = usePermissions(); -// const isSyncingWithHubspot = computed( -// () => props.member.attributes?.syncRemote?.hubspot || false, -// ); - -// const isHubspotConnected = computed(() => { -// const hubspot = CrowdIntegrations.getMappedConfig('hubspot', store); -// const enabledFor = hubspot.settings?.enabledFor || []; -// -// return ( -// hubspot.status === 'done' && enabledFor.includes(HubspotEntity.MEMBERS) -// ); -// }); -// -// const isHubspotDisabledForMember = computed( -// () => (props.member.identities || []).filter((i) => i.type === 'email').length === 0, -// ); - -// const isHubspotActionDisabled = computed(() => !isHubspotConnected.value || isHubspotDisabledForMember.value); - const isFindingGitHubDisabled = computed(() => ( !!props.member.username?.github )); diff --git a/frontend/src/modules/member/components/member-last-activity.vue b/frontend/src/modules/member/components/member-last-activity.vue index ad1a9b48ba..bc92d4d67f 100644 --- a/frontend/src/modules/member/components/member-last-activity.vue +++ b/frontend/src/modules/member/components/member-last-activity.vue @@ -25,8 +25,8 @@ diff --git a/frontend/src/modules/organization/components/edit/identity/organization-identity-add.vue b/frontend/src/modules/organization/components/edit/identity/organization-identity-add.vue index 7890a06493..dfd9ff3090 100644 --- a/frontend/src/modules/organization/components/edit/identity/organization-identity-add.vue +++ b/frontend/src/modules/organization/components/edit/identity/organization-identity-add.vue @@ -24,8 +24,8 @@

@@ -37,11 +37,11 @@ />

- {{ platform(identity.platform)?.orgUrlPrefix || platform(identity.platform)?.urlPrefix }} + {{ lfIdentities[identity.platform]?.organization?.urlPrefix }}

@@ -102,7 +102,6 @@ import { computed, reactive, ref } from 'vue'; import LfButton from '@/ui-kit/button/Button.vue'; import LfIconOld from '@/ui-kit/icon/IconOld.vue'; import LfInput from '@/ui-kit/input/Input.vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import Message from '@/shared/message/message'; import pluralize from 'pluralize'; import useVuelidate from '@vuelidate/core'; @@ -118,6 +117,7 @@ import { Platform } from '@/shared/modules/platform/types/Platform'; import LfOrganizationDetailsIdentityAddDropdown from '@/modules/organization/components/details/identity/organization-details-identity-add-dropdown.vue'; import { required } from '@vuelidate/validators'; +import { lfIdentities } from '@/config/identities'; const props = defineProps<{ modelValue: boolean, @@ -160,8 +160,6 @@ const isModalOpen = computed({ }, }); -const platform = (platform: string) => CrowdIntegrations.getConfig(platform); - const addIdentities = () => { sending.value = true; updateOrganization(props.organization.id, { diff --git a/frontend/src/modules/organization/components/edit/identity/organization-identity-edit.vue b/frontend/src/modules/organization/components/edit/identity/organization-identity-edit.vue index 31b8070659..23b84afc0e 100644 --- a/frontend/src/modules/organization/components/edit/identity/organization-identity-edit.vue +++ b/frontend/src/modules/organization/components/edit/identity/organization-identity-edit.vue @@ -28,11 +28,11 @@ />

- {{ platform?.orgUrlPrefix || platform?.urlPrefix }} + {{ platform?.organization?.urlPrefix }}

@@ -62,7 +62,6 @@ import { computed, reactive, ref } from 'vue'; import LfButton from '@/ui-kit/button/Button.vue'; import LfIconOld from '@/ui-kit/icon/IconOld.vue'; import LfInput from '@/ui-kit/input/Input.vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import Message from '@/shared/message/message'; import { required } from '@vuelidate/validators'; import useVuelidate from '@vuelidate/core'; @@ -73,6 +72,7 @@ import { } from '@/modules/organization/types/Organization'; import { useOrganizationStore } from '@/modules/organization/store/pinia'; import { Platform } from '@/shared/modules/platform/types/Platform'; +import { lfIdentities } from '@/config/identities'; const props = defineProps<{ modelValue: OrganizationIdentity | null, @@ -125,7 +125,7 @@ const isModalOpen = computed({ }, }); -const platform = computed(() => CrowdIntegrations.getConfig(form.platform)); +const platform = computed(() => lfIdentities[form.platform]); const updateIdentity = () => { const identities = props.organization.identities.map((i: OrganizationIdentity) => { diff --git a/frontend/src/modules/organization/components/edit/organization-add.vue b/frontend/src/modules/organization/components/edit/organization-add.vue index 2e51fcde92..405f9e3a28 100644 --- a/frontend/src/modules/organization/components/edit/organization-add.vue +++ b/frontend/src/modules/organization/components/edit/organization-add.vue @@ -52,20 +52,24 @@
- + @@ -100,7 +104,6 @@ import LfButton from '@/ui-kit/button/Button.vue'; import LfIconOld from '@/ui-kit/icon/IconOld.vue'; import LfInput from '@/ui-kit/input/Input.vue'; import LfField from '@/ui-kit/field/Field.vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import LfTooltip from '@/ui-kit/tooltip/Tooltip.vue'; import useVuelidate from '@vuelidate/core'; import { required } from '@vuelidate/validators'; @@ -118,6 +121,8 @@ import { OrganizationApiService } from '@/modules/organization/services/organiza import Message from '@/shared/message/message'; import Errors from '@/shared/error/errors'; import AppLfSubProjectsListDropdown from '@/modules/admin/modules/projects/components/lf-sub-projects-list-dropdown.vue'; +import useIdentitiesHelpers from '@/config/identities/identities.helpers'; +import { lfIdentities } from '@/config/identities'; const props = defineProps<{ modelValue: boolean, @@ -133,19 +138,11 @@ const isModalOpen = computed({ const router = useRouter(); const { selectedProjectGroup } = storeToRefs(useLfSegmentsStore()); +const { organizationIdentities } = useIdentitiesHelpers(); -type OrganizationAddIdentity = OrganizationIdentity & { - image: string, - prefix: string, - placeholder: string, -} - -const platformList: OrganizationAddIdentity[] = Object.entries(CrowdIntegrations.organizationIdentities) - .map(([key, config]: [string, any]) => ({ - prefix: config.orgUrlPrefix ?? config.urlPrefix, - placeholder: config.placeholder, - image: config.image, - platform: key as Platform, +const platformList: OrganizationIdentity[] = organizationIdentities + .map((config) => ({ + platform: config.key as Platform, type: OrganizationIdentityType.USERNAME, value: '', verified: true, @@ -156,7 +153,7 @@ interface OrganizationAddForm { subproject: string; name: string; website: string; - identities: OrganizationAddIdentity[]; + identities: OrganizationIdentity[]; } const form = reactive({ @@ -177,7 +174,7 @@ const rules = { required, }, identities: { - required: (value: OrganizationAddIdentity[]) => value.some((i) => i.value.length), + required: (value: OrganizationIdentity[]) => value.some((i) => i.value.length), }, }; diff --git a/frontend/src/modules/organization/components/form/organization-form-identities.vue b/frontend/src/modules/organization/components/form/organization-form-identities.vue index 51acb28047..7662532c2b 100644 --- a/frontend/src/modules/organization/components/form/organization-form-identities.vue +++ b/frontend/src/modules/organization/components/form/organization-form-identities.vue @@ -5,11 +5,11 @@ :key="key" class="border-b border-gray-200 last:border-none pt-5 pb-6" > -
+
@@ -66,8 +66,8 @@ import { computed, ref, watch, reactive, } from 'vue'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; import { OrganizationIdentityType } from '../../types/Organization'; +import { lfIdentities } from '@/config/identities'; const emit = defineEmits(['update:modelValue', 'unmerge']); @@ -145,10 +145,6 @@ watch( { deep: true }, ); -function findPlatform(platform) { - return CrowdIntegrations.getConfig(platform); -} - function editingDisabled(platform) { return model.value.filter((i) => i.platform === platform).length < 2; } diff --git a/frontend/src/modules/organization/components/organization-dropdown-content.vue b/frontend/src/modules/organization/components/organization-dropdown-content.vue index 83573fc94e..e6334dcc9e 100644 --- a/frontend/src/modules/organization/components/organization-dropdown-content.vue +++ b/frontend/src/modules/organization/components/organization-dropdown-content.vue @@ -191,17 +191,6 @@ const organizationStore = useOrganizationStore(); const { hasPermission } = usePermissions(); -// const isSyncingWithHubspot = (organization: Organization) => organization.attributes?.syncRemote?.hubspot || false; -// -// const isHubspotConnected = computed(() => { -// const hubspot = CrowdIntegrations.getMappedConfig('hubspot', store); -// const enabledFor = hubspot.settings?.enabledFor || []; -// return ( -// hubspot.status === 'done' -// && enabledFor.includes(HubspotEntity.ORGANIZATIONS) -// ); -// }); - const doManualAction = async ({ loadingMessage, actionFn, diff --git a/frontend/src/modules/organization/components/organization-unmerge-dialog.vue b/frontend/src/modules/organization/components/organization-unmerge-dialog.vue index 8ee613d84f..8356cf34bb 100644 --- a/frontend/src/modules/organization/components/organization-unmerge-dialog.vue +++ b/frontend/src/modules/organization/components/organization-unmerge-dialog.vue @@ -112,10 +112,10 @@ class="text-gray-900 text-lg leading-5 mr-2 ri-window-line" /> { .map((i) => parseIdentityValues(i)); }); -const platformDetails = (platform) => CrowdIntegrations.getConfig(platform); - const fetchPreview = (identity) => { if (fetchingPreview.value) { return; diff --git a/frontend/src/modules/organization/helpers/organization.helpers.ts b/frontend/src/modules/organization/helpers/organization.helpers.ts index 4f757f6f31..40d8ee032b 100644 --- a/frontend/src/modules/organization/helpers/organization.helpers.ts +++ b/frontend/src/modules/organization/helpers/organization.helpers.ts @@ -1,7 +1,7 @@ import moment from 'moment'; import { Organization, OrganizationIdentityType } from '@/modules/organization/types/Organization'; import organizationOrder from '@/shared/modules/identities/config/identitiesOrder/organization'; -import { CrowdIntegrations } from '@/integrations/integrations-config'; +import { lfIdentities } from '@/config/identities'; const useOrganizationHelpers = () => { const displayName = (organization: Organization) => organization.attributes?.name?.default || organization.displayName; @@ -27,12 +27,8 @@ const useOrganizationHelpers = () => { }) .map((i) => ({ ...i, - handle: CrowdIntegrations.getConfig(i.platform)?.organization?.identityHandle?.({ - identityHandle: i.value, - }) || '', - url: CrowdIntegrations.getConfig(i.platform)?.organization?.identityLink?.({ - identityHandle: i.value, - }) || '', + handle: lfIdentities[i.platform]?.organization?.handle?.(i) || '', + url: lfIdentities[i.platform]?.organization?.url?.(i) || '', })); const emails = (organization: Organization) => { diff --git a/frontend/src/shared/modules/conversation/components/conversation-drawer-display.vue b/frontend/src/shared/modules/conversation/components/conversation-drawer-display.vue index 6644b90dbf..15c1782470 100644 --- a/frontend/src/shared/modules/conversation/components/conversation-drawer-display.vue +++ b/frontend/src/shared/modules/conversation/components/conversation-drawer-display.vue @@ -8,7 +8,7 @@ > - diff --git a/frontend/src/modules/conversation/components/conversation-details.vue b/frontend/src/modules/conversation/components/conversation-details.vue index 658cd2cd0a..9c8d454791 100644 --- a/frontend/src/modules/conversation/components/conversation-details.vue +++ b/frontend/src/modules/conversation/components/conversation-details.vue @@ -157,7 +157,6 @@ - diff --git a/frontend/src/modules/conversation/components/conversation-item.vue b/frontend/src/modules/conversation/components/conversation-item.vue index 65dfaf64c6..bc87a8b0a6 100644 --- a/frontend/src/modules/conversation/components/conversation-item.vue +++ b/frontend/src/modules/conversation/components/conversation-item.vue @@ -101,7 +101,6 @@