From ec90b832c39c398679cdcad91d0680b436e8b29d Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Sun, 29 Dec 2019 19:07:47 -0500 Subject: [PATCH 01/15] help section typos fix --- src/layouts/help/HelpLayout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layouts/help/HelpLayout.tsx b/src/layouts/help/HelpLayout.tsx index 65054e0..f74ae6b 100644 --- a/src/layouts/help/HelpLayout.tsx +++ b/src/layouts/help/HelpLayout.tsx @@ -26,7 +26,7 @@ class HelpLayout extends React.Component { content:
You need to go to project settings - pricing and set up possible plans there.
}, { - question: "Is there a fee each product purchase?", + question: "Are there any fees?", content:
Yes, there are 5% withdrawal fee for all users & developers (excluding payment fee for currencies such as BitCoin)
} ]; From a4d0cb62fcbab9f183cb0f073009bc701eafab32 Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Sat, 4 Jan 2020 10:32:25 -0500 Subject: [PATCH 02/15] added gtag --- public/index.html | 70 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/public/index.html b/public/index.html index c0c268c..1560d76 100644 --- a/public/index.html +++ b/public/index.html @@ -1,27 +1,57 @@ - - - - + + + + - - + + GitCom - - - - - - -
-
- + + + +
+
+ + + + + + + + From add8432187c94a062801c4f26f03c2edeb1e8abe Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Sat, 4 Jan 2020 11:23:04 -0500 Subject: [PATCH 03/15] user balance deposits --- .../invoice/single/create/NewInvoice.tsx | 4 +-- .../single/view/content/InvoiceContent.tsx | 28 +++++++++++++++++-- src/layouts/account/billing/BillingLayout.tsx | 26 ++++++++++++++++- src/layouts/index/IndexLayout.tsx | 5 ++-- 4 files changed, 55 insertions(+), 8 deletions(-) diff --git a/src/components/entity/invoice/single/create/NewInvoice.tsx b/src/components/entity/invoice/single/create/NewInvoice.tsx index 4f38cf9..5a5e8dd 100644 --- a/src/components/entity/invoice/single/create/NewInvoice.tsx +++ b/src/components/entity/invoice/single/create/NewInvoice.tsx @@ -48,7 +48,7 @@ class NewInvoice extends React.Component { showInvoiceModal: false, selectedCurrency: null, - currencyAmount: 0, + currencyAmount: this.props.defaultAmount, isLoaded: false, isButtonPressed: false, invoice: null @@ -185,7 +185,7 @@ class NewInvoice extends React.Component { footer={null} > - {this.state.invoice ? : null} + {this.state.invoice ? : null} {this.props.modalLabel}} diff --git a/src/components/entity/invoice/single/view/content/InvoiceContent.tsx b/src/components/entity/invoice/single/view/content/InvoiceContent.tsx index 719aea4..e9cf977 100644 --- a/src/components/entity/invoice/single/view/content/InvoiceContent.tsx +++ b/src/components/entity/invoice/single/view/content/InvoiceContent.tsx @@ -4,18 +4,21 @@ import {Button, Icon, notification, Row, Tag} from "antd"; import {handleApiError} from "../../../../../../classes/notification/errorHandler/errorHandler"; import copy from 'copy-to-clipboard'; import moment from "moment"; +import {CurrencyType} from "../../../../../../client/models"; interface IProps { - invoice: InvoiceModel|null + invoice: InvoiceModel|null, + showHelpLabel: boolean } interface IState { isLoaded: boolean, - invoice: InvoiceModel|null + invoice: InvoiceModel|null, } class InvoiceContent extends React.Component { public static defaultProps = { + showHelpLabel: false, invoice: null }; @@ -65,6 +68,23 @@ class InvoiceContent extends React.Component { }); } + getHelpLabel(currencyType: CurrencyType, amount: any = 0) { + switch (currencyType) { + case "Usd": + return `Please send ${amount} US$ to the PayPal email address provided below:`; + case "BitCoin": + case "Waves": + case "LiteCoin": + case "Ethereum": + return `Please send ${amount} ${currencyType} to the ${currencyType} address provided below:`; + case "Erc20Token": + return `Please send ${amount} Erc20 (Ethereum tokens) to the Ethereum address provided below:`; + case "WavesToken": + return `Please send ${amount} Erc20 (Ethereum tokens) to the Ethereum address provided below:`; + } + return ""; + } + render() { if (!this.state.isLoaded) { return ; @@ -91,6 +111,10 @@ class InvoiceContent extends React.Component { return
+ { + this.props.showHelpLabel ? +

{this.getHelpLabel(invoice.currency_type!, invoice.amount!)}

: null + } Address: {invoice.wallet!.address} From e7ccb76e7e422297dbf34ed9edf32cc1dd364b06 Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Sun, 5 Jan 2020 19:30:21 -0500 Subject: [PATCH 04/15] minor fixes --- src/layouts/account/subscription/SubscriptionLayout.tsx | 2 +- src/layouts/entity/project/page/ProjectPage.tsx | 4 ++-- .../project/pricing/edit/EditProjectPricingLayout.tsx | 2 +- src/layouts/entity/project/view/ProjectPage.tsx | 6 ++---- src/layouts/index/IndexLayout.tsx | 2 +- 5 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/layouts/account/subscription/SubscriptionLayout.tsx b/src/layouts/account/subscription/SubscriptionLayout.tsx index b5fdf4a..1365da6 100644 --- a/src/layouts/account/subscription/SubscriptionLayout.tsx +++ b/src/layouts/account/subscription/SubscriptionLayout.tsx @@ -34,7 +34,7 @@ class SubscriptionLayout extends React.Component { diff --git a/src/layouts/entity/project/page/ProjectPage.tsx b/src/layouts/entity/project/page/ProjectPage.tsx index 9b6fc75..b4df11f 100644 --- a/src/layouts/entity/project/page/ProjectPage.tsx +++ b/src/layouts/entity/project/page/ProjectPage.tsx @@ -109,8 +109,8 @@ class ProjectPage extends React.Component {

Repository

- - + +
diff --git a/src/layouts/entity/project/pricing/edit/EditProjectPricingLayout.tsx b/src/layouts/entity/project/pricing/edit/EditProjectPricingLayout.tsx index c15386c..b173899 100644 --- a/src/layouts/entity/project/pricing/edit/EditProjectPricingLayout.tsx +++ b/src/layouts/entity/project/pricing/edit/EditProjectPricingLayout.tsx @@ -1,6 +1,6 @@ import React from "react"; import FullPageWithSideBar from "../../../../../components/layout/simple/fullpagewithsidebar/FullPageWithSidebar"; -import {Button, Col, Divider, Icon, Row} from "antd"; +import {Col, Divider, Icon, Row} from "antd"; import PricingBlock from "../../../../../components/entity/product/pricing_block/single/PricingBlock"; import {ProjectModel, ProjectProduct} from "../../../../../client/bindings"; import {handleApiError} from "../../../../../classes/notification/errorHandler/errorHandler"; diff --git a/src/layouts/entity/project/view/ProjectPage.tsx b/src/layouts/entity/project/view/ProjectPage.tsx index 357a35e..3f169d5 100644 --- a/src/layouts/entity/project/view/ProjectPage.tsx +++ b/src/layouts/entity/project/view/ProjectPage.tsx @@ -7,8 +7,6 @@ import BoardCard from "../../../../components/entity/board/single/card/BoardCart import PermissionCheckLink from "../../../../components/link/withChecks/PermissionCheckLink"; import AuthCheck from "../../../../components/check/auth_check/AuthCheck"; import AddToLibrary from "../../../../components/entity/my_library/single/action/AddToLibrary"; -import {Link} from "react-router-dom"; -import PermissionCheck from "../../../../components/check/permission_check/single/PermissionCheck"; interface IProps { match: { @@ -119,8 +117,8 @@ class ProjectPage extends React.Component {

Repository

- - + +
diff --git a/src/layouts/index/IndexLayout.tsx b/src/layouts/index/IndexLayout.tsx index 699dd0e..223fe57 100644 --- a/src/layouts/index/IndexLayout.tsx +++ b/src/layouts/index/IndexLayout.tsx @@ -8,7 +8,7 @@ class IndexLayout extends React.Component { return (

GitCom

-

Community-Driven open source monetization platform

+

Community-Driven open source marketplace

From 7cc84749a8bc0ac489e6bd339ced4cd7d1b33b2f Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Sun, 5 Jan 2020 19:58:20 -0500 Subject: [PATCH 05/15] added home section --- src/layouts/home/main/HomeMainLayout.tsx | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/layouts/home/main/HomeMainLayout.tsx b/src/layouts/home/main/HomeMainLayout.tsx index ed1278c..7c9648b 100644 --- a/src/layouts/home/main/HomeMainLayout.tsx +++ b/src/layouts/home/main/HomeMainLayout.tsx @@ -1,5 +1,6 @@ import React from 'react'; import FullPageWithSideBar from "../../../components/layout/simple/fullpagewithsidebar/FullPageWithSidebar"; +import {Link} from "react-router-dom"; interface IProps { } @@ -16,7 +17,24 @@ class HomeMainLayout extends React.Component { render() { return
- Home layout +

Home layout

+ Welcome to the GitCom platform! +
+ If you're a user: +

+ Add projects that you like to your library, then your monthly subscription will be distributed + across your favorite projects. +

+ +
+ + If you're a developer: +

+ Go to integrations and connect your GitHub or GitLab account + then you can import your projects and set up project boards and pricing plans + (can be found on project page)! +

+
; } From 7c415edbddf9b6b8cfece0bb8047c7bfe899db2c Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Wed, 8 Jan 2020 19:55:23 -0500 Subject: [PATCH 06/15] Developer quickstart page --- public/img/quickstart/screenshot_1.jpg | Bin 0 -> 17912 bytes public/img/quickstart/screenshot_2.jpg | Bin 0 -> 47537 bytes src/Routes.tsx | 5 ++ src/app.css | 5 ++ src/layouts/app/AppLayout.tsx | 2 +- .../developer/DeveloperQuickstartLayout.tsx | 63 ++++++++++++++++++ 6 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 public/img/quickstart/screenshot_1.jpg create mode 100644 public/img/quickstart/screenshot_2.jpg create mode 100644 src/layouts/quickstart/developer/DeveloperQuickstartLayout.tsx diff --git a/public/img/quickstart/screenshot_1.jpg b/public/img/quickstart/screenshot_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c3a0b9af91052303125be6a2b3483070d5c496f2 GIT binary patch literal 17912 zcmeHu1z4R)w&2AjxCAG-yE_C6?(XjH65I*yPVnIF1b24}kl;>&J1j|hdXnk%OwYdA zx9|IQi%ZqE`S|!q=!C_Ec*NLw`MAFt z0ebfA89XdJ4gvxWH#s3W_rIMUI{}E0z_6gtK!6Ydz=%K~h(M3s0Ia7<0)u?5?(Yd0 z6bJ+i9O8+I3G`d~od*B{1_1>Jdt3y-fIKN8fFL}vZkE0OF7O29{)GJ!A$t1*8JG+- z?g#WwK&tj183jh7&kcVh`~{eNAx0>f?=J}cAOh`V5N#y$1K}@#!0E|Es(;=hc2Y%# zx4$y;r)}c$;y&fHOK_Z#erDV{y0_0#UB;YlP+(Bq?AGTude1zTpEx*I5Xq`JlwsxU zta>iz{mnd(%yB_3)lgS;?&xeIz1xV~=jtq_&F`N7ypAW>ms=dCXJ|auoN;M0M|<}6 z?u~PdukW3zH*BXeTb6sPYR@yh#=N*!Ja`(f?;M)yoFlWh`M#SqWhdoZRAA2Ae5*nk zB{dNLubi!KoicN=%#FAo0D#ls(0LO5W(@nzyx(y%+YF;+h(gj><#Umi zf znPK%x<^(4&nVIxGn^jIX&?e5;+t06_QyMuY3ypeku1LH5-N}y-q{iHCxBac_HEt$x zn8WV%dxxg$GixmRmRSPM(IfYeO1C9$J^%n$fBE{M@03^jspj(4L~j_vZM&+vn`#+T zIiI=Y!eANpjMjG4%$i1&+9Qcie&iv|8SqN93^$!)E0bK96OVlRqtCy?-YkM9502y{~-V7$<{BHQ8^Be^Tg#|1IbM6ra;qJiGxwQo}J+ga1V3SFCRx72)N@JK7qw zO|SD!1oX5#@9yK2N*~{^H2z5YZUe2p>!hvtntWZEtF>tPO1Ohuzc6XIL87GEm?k4> zA-qd<>O+in#hvxS8N2fzjr>LdD*2Ix`ZY3h0uI02mG3=>_2H(s4c?2KZ&qhi=2n(z zmyg)TS9i@67f_p~vgqfRwOG2|V>(Ab>_0d#NB&Dka_v8Q0)4{}fmZ$0f|6^zcwG@W z*rb*BhA*E%Lna<*V_i63|C1X3!BDWqF}Ej|$~W^sL;DQ6fO!CKk5KI^(rXekCb1*Kw9lTlApTB`$znj@c*^;WFy_Jji!$*?WY@z*|a*W zOFFR*O&GiWvXXxz0{vm=Leb~m><;=V<#k7wd!^r{46DvdyO*5V|I~YbQ~$mEL+8GA zWp~+|+t&TN#?QbnI}IGh`)8?tzMFHDQe>{%Bt*jGX)-VAO+kTL5Wb^5uZ1cYLMf|v^-}-!#py~$a%Eou?@X5`@kiFOdMmYslp$7WEu||rChJVfv)49_ zxA499nF5J6KU)3?{$nJs-?Vs<+>FJ17eg9t?K^%tVAyBs{G|6I@<$sTSW({vh?#!_ zew6$#<7$Fd!>!8pv*r4Juv#|2Xpy3nfzJ0pGfPA|50D=VEf|cs4 z_11=)W6m;{n5)cI{+p=p%_Cr^_J2q7zvA`3r27cylAhGWIx08-_Key2=*X*se3mGD zTX+k|%xz*_maZ(Ta!Yeqpp;{fbxpj5x)IOun0{K=*AfrNyO5gBF8wW4eUBB=3(OQa zsE*S@11%-Z00)gEKOXg11AzS*{|VlQuZn__J8;ti}!GK@BVJJn_#wef}Cttyf0PQfEk zmd2u`h=Lx%`V(P~oM%=eJ>A_Ru2$Eg@m1ue)x9Gwb9$wR!KOjx?qVWEh`*SIP${J~ z#;naIdFp0q6GpMwV5f5aCRQiTtV>KoLRJ4; zPL3*pYRbi^N5I+Cw=Q{F#(QYz?ftbsDF^u>u6*25J`IgUAzeI~yp*xesRCD;%bFV>uvsyOsSy)VaV78B zqX#ue*Hd=#noh0RHKF=Vy&U@ArNhpTw!K2V%;zxoE>u1c)krdl+i)yJ->2GVLC=4K zKBlT)k`T$sk>gp%tS%}_OeA#AbWc3dy5}`NXyPHxe{W(AIp;%*iJs5B8%k0vOz!8V zxAOYaBOnl575O6GRSFEAC~kUM>B>r^-e~Z&yTN6n(I)f*iw`guGN^gC=KC*ub?G;l znH^-=%D`WmSE)ZHN<9JsN|-G%9a$t-7ir6}>O!JjT($(jOM|MYw7{iRWVRmxJ=U$0 z1X9Uwgq#tbeBlVgZ`7iSdzt;*+zB$xUVIs!&$ugsh5<`)x35coi1{9*pBLr%nj*6Y z!J#4)2T0evTE7SDJm|OPc=T)u8fdS4kLwf3V`>Pa15D@_2r4yo6vfDPr_&)X1^Tl_ zThnEFIg>oOJ=Z%0F+TvU0lrMi=R8#%A2 zgLP9z{g7>oXOD#oSD-keqvgQp3%v`7waIa*tF=M20DZ-v%q1oVIXm=)vRAv!jqEUK zAF1GB7k-=j|Et=;IqFaYdhiyDo z#MxCG9#V%^cR-vRsM`J%UYeJ8nqz3$Sn)1tqqa0qUK3YdBf)o6OdYB#>#=38aiyNVR+S=U`AnKu86LHI5xE(rJ%tW)dBPYVgpifS_6a9xR|%3@`$zFF@~crlg|%RfbF z5A*r!-WmE{e_v)E1l3;J3H!gk%rs-9a6Bud6eY*et`5LhmX3~jGyFdAv&AETV6)G3 z(sFFikhg3c_&2@tw9za0Ds32rD8hP2R6DhyvP?zGjqNf5K{n(A%1Uzilz2mC4C4-Z zQAhS65{xR};X3C#{c1}~S}NT+UY=RS52&!Tgtct2_z>pC(2`56>+0$Zo5&|AgBF?F z^tmGq4OLZ=cB6WXezuD(F@tiS1~}PgS*{L;yL1mxV4Enc^Jy+n3_Dt?C|T5NnxfWG zdnGueDwWBvgV>VlErM+4{ zTikpcwgV$7gz4_4-0ad5xavAWu0uezs%4g@w`}Aw#g40TMpCoW-%>^jfx}y=Nypw~ zX}p-!Il#MX#40%86jd8lC73iu;c2Lo!>O3O92oS{d<%B+eR1Erg&oxGeIbkm83IeA z#0aNxjg-(!jvAEJA{6qHjA1qHwH_t1C%J58(t)V%HeNd!=Uu@%J?W5>NNhO2`)asv z&!;%HiKu%}Q)H3>)%9b^rfE=pMD@4=)zmivspOZw$5#bL-LtFf^lw`O7)jy$NZ0x~ zHM-72z4zJDgf)YA37>~a)sDVq8V#(2b*M@(pFf9j-d78*m8&SM%EMCGPbnDNZ`rhN)Q{wWHqD9B#k=k}`qr>VegZJ{VH zNuUSM*n(U2Z+~Eo>P>9o-Z6w)fDJfZc{>#~gwu(Yux#;10Q5sm0~)lvRjj#&C^cK)5}TdeHAA-VBOoxJnynD7>>@j|4w|hW>#~w?!P#gW`f%t)Q z=@S_*pU+XfpW;Krz9e#i4NjzVe6h-)8q?NNe&lHvNJ`zfA?bz zn{R4RMLke`Oc zahhRr$?o~91f$7~a;&_np-%>6C2gJx;MJ3)M#=ttgc82skYUf#m1i zc>UJJ_4YHx^T|aYSqAy7#;QBc%4F!f5zl86@Ca{}=vTXmd*7-@=+6v!t%P67U(>v1 z&2CDwhl}kR#3UCYk6)`uOd!N({uG~)$61%>qAW}CIyp#s_0W>@GlxtIb8f&0;Eu6~ zgSJ!B6Jw&8z95Z&C>qiI=}6<*@pO2dC%G-$+kdB<*R;oo{;JSia27jhLl81nB`u(g zb&$OTWi4oOw4a}mTqn%EX=6Kn#zHFg#=I?1 zOt32Wp7Vh4TE^9Q$d<#PXTHB|7*sv-Bk^XFHqu20oo?QlF$}gihKGi&s za%DRkPuF8XR*qG<5Y}zwM#L9FZK{z>mm~3#KrTyI-I67bKeQfO?E#!TmdIEeX7jb^ zdtjoVnA0PHu+zhqJv>1x*#Uw0C@otn&O*#uf5mo7GBHF|utrjR_==^3=R-YGt7xEQ zSa5WKnryZsGYyvQ!Gq&<5miVj>SltF@4{@SFi}iInR+gtV)FOtbj{W88g+{Q)bT;d z@C>*Hzd~u9o|>gmBwtb4XiaBiCY#chJymSjX%}tWwrDo%xgx*dEh^={&lO;lDxv00V&lg93v=K!HJkJw4(-J>UaC5s{*i@#$s3Vi;c9 z=1d@<5HQN==n~TLDR}#2Rds^%+t_uW;>qjjS5Ff8y{+u}?Xe$<7w`xGL>-aCt^J3y z_028Q|G3frbS3{Y_SP?sn?GTkcHO{T_f@=TO<#Yom9f3TjD**UsG9TD)RfL`Ip!A? z0T;o{lvEkKOn4J(yl*wnysE5RPBv}{TJXFbfm5+$?tz#!#}d{>a?D>-`kYI?P%F#5 zxUn&pTnotA)OjcfbmMKbd(e~;wiJ(F`?^PYAL^<+FE%Nz&b7!hnDsmt#j!VuFe92r<>TKBWZINS`W`4cI`hp z0(&?65Y8fVP)=A4d#3ECc~vuemq%|W{g{gItkyb6+JU_Hm|i3a9XH>OcWs3TN^8u97NpeD5%W zIMVYZg|_!Z_`(Jw^8RG z0V`!ygPZ%8uKN$=_lxhvDLc0Vn1Zo^x(>{5r43H`?7?*qQ*KH+v@%Bn!^53?1DS<2 z-{;PZWcsVW+<*S==q0lYEh)Av(JC+mJ}2}Y@1gR&_HN1DT+l;~qRFSbnVLs{q#L&I zM3u}o(UDps9ujO`Ihr3bkD+&TJwIjF+tBMi^0j-!nh<@1F^e$88w@>YLV}L~o$aI< zd8phJc|tl#kheGt?y@>Dg>uTJwjj%09j|fy8t$a21Nh`91@Sd1?h1Lm&*3~wD(FPJ zHJm%JFN>QSH1R(L@i$Jzc$f)+k6X@ue92V<^9a~5J31VO)aMsF;iprcc;Gf8H4*kU zrh$M}zKVH8!ygE^P3Hv(RXAoc-?5(}D1QW8Uh$spo!KjMd4NSC3r7^xNopTIINy)L zg=3#C%|$G$*e*5aihfMS^g*>}j=$3+4QZjy>X%JBwxpu8CaF&mMXlG^dw~ksA~|^@17XjJ=P-&Vc#8pe>_=L)~dPIGY;J zrNL}|F0|=-6em+F9LEbLrEUH0RC%L;!@;oDnRz`i1G#VOxNpSk7S+ps&699klJ%pw zNSQu%yY1AxTj-Z}{>8&+R9C0Sx5O?&AH&4q^K~~;Kg|S;1!!mTlkZW|Ua&-1kA)Y% zmWdiOKp9-Bu|HJOfKTFyAVpJZHE=>T?7P18U$b@C*@Cc6AbXAlMjPPCGEixP6;NV%O41M`wqlUv_R!H} zxUqpn3*U`k&n7%jd?0prp3Y|C8Wt<2v?;x3(yT@(9 zL{TD`dV{9vz_&@ttO}f_@?Y5&GNqNJ0VrHooE@S@#rDBGuysr~4+^)PT_>H42vcdL z6~!4ui3(|Q3Ca5D=%c*EF~D22uuMp|X6Fbgczwz-(Tpa}yFj7xC{%ciqHG2Yju~?! zW?YR=u@->Ri6OKYW5C2gy1ejR{0(Bjvt2h7DyUeHAmT(s^q4`0fXk_~ngz#q?ch>c zeQi4lJc}F=gc04L+bToV8%0A|r*{TL+1#4MGm+l2+rP->HPjal$7C{@$oZ)#ta)Y2 zk}MqM2rGVl`@tx+07fjY?jBe$l=&=u9>ASD0h4QhIQ|G|bOyEaNQ?q`MR+85OqdZm z3UrTl9=RtyCfdm$JXC(L;aCpht1hBx>t#xU^@TJ?@qy46#d?rz!Z-IFw|6-rtEl_4 zbT1})$axswWDuF+H3Ro0`*6>Xlf11-Oxkp&{(^9J20o+Z2BEHuWs_@DK^wZt{2q1* zk&tNoZi&am-8JH<5=MA;O1c>y0UABVWVP#KOs3rfqjXJ0Dm_b{WK6dB=nI$kl#;^v{#oe6aW|#G^ zs@SG5@d-1I01>_yr&`;xMEXFT426X3EtpiCE3UFhS6UD00BS!o$F!3|-DMU#fv&Bo zeRqM?uoPn{@e&dP6Y8l=eKql0*kr_XLWtq&p^hfR zAzLabiTtlzu}%9CK**?Chv$MxELV|BS`a^Q*h;}j0FOc7mt?9iQw~nGHflloB}JV< zQ*3Y7BMzcOgA)ne$T$T;y5P`9r5>nj^l*E261L5*mT}}71`cj& zIAF-^=x#@S-5EPnD03)3MvEy=zSdgGeh$}}-{i9;iEKkONvt&@&7GDo&>10aJh{jz zo2<0*Nn>v&!TE(rimTts%XS;ccCGbzuK6!(FdBVaFdj6Dwyr4Bv>2t67Q$+IP5v7C zk=P8TqLmi`T;nZ>ko>~!gar$_%B;TVOHJywZAAG6EfHAxvtM!>B)v>vl+?f@{oU8m zi;HIyrsAw7eI4#2(kb>XRP50FcBm-)GKwy^r((J}v@ljnAM=VMH|ktp z&_5m;iR06R*HAZswGOD=N`@vaCcZ}G(GB$!UTBPap{SDFBp6=dW&wx@Z*#hBZ0IrF z?4U**`@qzYS&E^!Pl&!8z)A%o-^_Ikfuu5iOC}6A-BqF5Mj}lfTsYiy)Xlh@%NS)W z&v^YDH=$JBsEjn4&~6tiia*nevGHzh|HX9XC$z7*TL3f)nM@Y{&qdZ8akY8y9--)l z*SME2G{!oJ2=_pH@p86U>!s+I;?EA5(Ekab67QB8^V0#DDY9^R!~(|c@-lDQ>!cY% zFpS+8v#mva>+?bkOYt$>T2ym3=h1*w7ImEFX{7ux@M(Y3F^OrUAc^O4L6jNEONuqe z%{LUsQR?%s0z?wRe9_RE>oSsA!O)9vaBey?CHsUh{`3_@?i4Eq&S#1_c=Z*EHETw@ z7-4(7&7}eygGt@5k<(%TV`eq!`BH{*3`@EXzg*-lJSy&>}xoS6S5lGn;n<|q$8s*(axhPP2h z_e+u-G@zW>!?ZF7d&1VD28kgn!hj*~_h^LN;5KG!RL^XPV^t`i2j0LFm8oN57;QGa5ckV&#WORV#x!pDiG030w#KjB)`Vhcc>KCIwz}w$s7WZhCG`O zs6mWCOcO&00h%n`N8gt3C=<_O<8lO=0)=z!Bit+OSkvf9dm#aemuY0a71K6)l^LJb z3%v_K5TLP@G}31U8xpe7HHpO2bi~znv)g~SI;Mp4AU(7GAbZ*15xM;$#gYaHqn#_b z<8F?C`YW|jfG~_9I!Z{*lJL%KYNf5Wlzaa_0+e(RHdkUH-*P-Z#iZV1QXe*{Pnxi% z&tB0NYUzFB8vg$fnYY#+Ob{$7QwHT?1!uK_$A@Vk=GITi_hD9c@MeLX*yV6fBlwwD zbzmzLrs&LKewb>bV3jBGe)5RMu})1~usnY_i0U<$8X_5YQY0OE@j}*|T~Y#+*rr&$ z*|CbJt9Pz_Z&^>1$MwyC<%ZxzJf6IdGw6X9$MF?Sz{V%^9A7$qGmwM1z0C2MJx?vS zM?i#EdZD-w4AoIiAwW6sia5w`P;}fSoE`77e3tk0ovtJ}4M^x1$_HU>?z6}?a_*AP zBP%m!3h>v`}g)}AR%Rwy*O*di7JWe~&c&f{hhrOaUWc7yDK`0}#iU3Wyj$$^*{Wjui} zS;fHTnB{K@#JKa617Hs@8#~*g-6_ZbU6|peSdp6e z0@)bx`=uNbrdl?NmKT;{4DJjBq)N-2OuyVzl9m;$_JN96R&6@auva-V+nii!4?DJ7 zVHcp@)=Rk*8nEQ_`a4aUv9CUW`-tnW-f7{AVpa-uUt-EB(@51)u*)y@teLwO} z@Wy~EWk;8JUmTLnDI*OZ>&8TjhQzzp6sg0}U#u92!XXW5EwWi>y#?P=I^%?^@v%Ju)Pwsrc}G@C@xr4W$VJ-moKTIeQ3{H4 zUrMcIMeq=!c|e2bAGxR0`Wi_K4xsCCCl|XIy&R?rMu**7L5fD0D17Npn1xfc^4wKf zFiZw%fBq8H5)SVs>#e8s-TR_h5Zk@PK<3Z0r8+SRXPWDvk-Eh$87lV>24IQv9*X9` zqi%zQK#`w|IgMSx6OBSdb>}B(;V~W76FBusO5=oY#v$Xttkx@wIUUnZ86e|W&V1Hw z1LgNo*PMN6E8{*WrEB+QtIE>xMVW1J;CeRsa@)})S`t!m;;xlu35Pr2D*%cvP)&hE zvDC|9bWA_|h%V?J_q zI~_O5ASVP;VL);OCo(W_MrZD%MdTB)5^Mwj4VF>oQ>h?D2#47d?E%)03-wYkpn%qh z!Xk2#z;pd;`)4rC*!#F*hX61N7gJPuaUvxSzBxqL-fjvNVlifS*_F^u!s_gRFz6JB zfauJyXC^=%R3~F!3M~zV1g*%NI(^$6dOw9WdkZ`Z92a#LHKF-)*$w?3w(VZ9uj4qyUV|?bFmXbD%l!C>7@`4KSH)#)X>rB3uhUvc?-{293w zr;Z!!xWRaa2-edgB~yAfCygIFnb#~7q<%aO=3(ixvz-s&_R5qv1YuBCroZDHiI2Nc zwn1bwGopl0PO;LrVMb&}%fS&RUZ(7vd$UNC7eniXh%W#yoWIPv;>2*GbMWc-9>e~? zwaY|FkM9omk#z6rhnQryO931BBDlTaKA?^eXGF$M8>qsfWlv93rH25I&;NL&^c=;L zK>-8e`|r)XPEwz4x!Dl`-!8c!LBPR(`x)EQ+j<~Kpig()s4o$a2^hZKZ=>+pg3&SY zduQRvL`7G2*!Wa@yVnK=0^$WcWcV?H%tm|$Q|Km)u?g%~@UI0S0S0!ECjs7ux=&Qg zVH4n*EsZMN6T`WJOrmS-kUq!`9+Z~|ktKLF6klepk;ueMcB&EWoz0DX^hL3eG|V^O zC?#(-Uc5=3!J$a=B=R*yE1seR%D81r;gzB6R^e4>nq$7ACaN_IsWX4xYQDH2Ne4KO zfju`VPq-%O#Aek?=|ciTR+7c!`2j%;NOZ~12DLT;GUA(DONOlYQ2EfnFj=ujf}-)G zVqT`m1js_AwLriKba-x)2=q5%7+c=y2-{>v#H=+RVmYNE61E1;I_PSk(bzOr;lz`! z>o4W2OcZ*0kp+V&UR6@0%@+!7GQJ`)*_7^*U}calgN!4Blw?VUYLsp=;)gbp^dB7x zk?hZOU;riAnCA!4@r>uMq5RjMETPE!OI(3#JpBm2@f__>Ft$h#gR8G8+N4`K@azRh z;*p?@@fuOkh?a@XdHRiUchW+~JIye~z=?qdJQdEE$cuu(7V^6?K;lUliUV#b$>!%i zl&R(GChe8w-G`#=oJW{q5(?d|e9gx0g%3TN3pNS6Tbzb&B+P~N@lmXmjy$xi=Popc6ad_}ZYTz|o_kJfND-Zfd%NX=sw zt+V*-Tx4#`rWIAYpeVPHLM-M_vsBdsP>}LF{J^|9MVMuqVVv}SNWnVw9KJlcjGUn|we<_Sz#W+x1`62uNgFA}Pk5}lc6 zCeu^F#6Cqz*GkosemS9hjB|eOyzmGJu@=Td7V$2uW|@aMP3BLwWN8S8GaY`NQi47H zc9$wF=vGR9We$A1fJ{X=**>=@PGf7@XPC6UV%x~!5kNj-e`GJLO3HGw-4Pbg((*o^ zA@l5=?~r&9nL;7k^ZpHa)Aw1q{R14yI*5!|5=HhVaSn=iuRJ_7z3GFkCE(XRSXu<) z$aW%hG-VO}NMVoN96!u;9)6aTBspYp%!VSD0tK5HvpphEyB$^rvH zN+BXK8sG+DzHS#39h#$^z+S|c8yS~pvddd7(!zB0PLF~v2t~f*%Pc(aNAU4y$aGj4 z1O}xRq>+iR@$us=nAC-jBE52pVIXD?$cHal&c^HzAc+IdqPtWk#jn~(%`G#M8LpFM zM~IN}9~Chr6Ny9HgwDq9v>FWZkZWKQeghxd?o^?yaa0L0}rc$~Vucwx2#HrnZ?2&<6e-?UE=# zga|6&RZQA&0MaT#D;2;Bf&Z!<*dSZSwcuL= zF%F7{uLJlkXiGXTp8GFxE307>AarrjSH6?#*F$Bw3B?=&2 z74PcUDw3hfmjEibeg!LgvK~Ej@d{pcavO+*LE%d|9B7e?Sxq~hadttVy~su8@@r&o za3JZ=&mhm%G!c!W~(t%?cA#`0ia%-)zZFVZn5`Ym;2BvdQGE zeXLyk(+Ce0L=;(}qzW?Gq}droNSy@syfUd`COL{K9vb24znK(`s9DRqRY^BSopvNT z@rVynQnEjYEao&2F1D|JQ2JW4?E{t1_SUOQ^M|^p$Hwl_CkZbYa#7ab;HI}$;-)YJ zLX1bKJ`)9vIS9xLjUbDNA?IEYmqr(-c?4{4PW9TzM^J@BptF&f?od#4=fqTEim~$2 zVyVQF`e}+e7@UkXQb1Lo>}MWvK%E?T5J!+sY~PhCmr7`pB}z~4y*JalmLlsx&q2`( zlMSU8{v{~5!*9vbb|oDJ@`w)g6pXPnkqgK? zI`c@XDt1OVRU8V?jDmzs*Y$S>G#S*)LRID!@|R0EkOq1XbJ(?pIvkl+Vtz9iTNBOR z-0~5BI;^PHjvpSO(@+j3sj>+gR&6r>O~ z+i9YClfBb65Iw&){!v)cK6-_4=}5ealM+5b38`8_bl%*MJuL>WAWhU0EeBdP5k!5+&E14okZ_(4#i6#5%QbWxuC>^if7r2=gj zFTHq2ibAcma%f8;it#t1sLY7A-RUlp&6mWQth6hATT|BQ!Di1Tm(t?$9BA@WC$(wj zUXJ=_hY?r$*U=^PBF%TIql@c9S?E$fk;3Ze|B>Whhc6|W8_iF{H0ed#%Zc8nkA9$! a6Q*Ao=0qRSOF#c-B-Hvx0C?o%!v6yG=8(t$ literal 0 HcmV?d00001 diff --git a/public/img/quickstart/screenshot_2.jpg b/public/img/quickstart/screenshot_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f216c4c18e8a1ec51b710ba12ab75cbfe16ed355 GIT binary patch literal 47537 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 S;!AS4^Vx;Z<3I5JzX + {/* Quickstart pages */} + + + {/* External auth routes */} diff --git a/src/app.css b/src/app.css index 75d96b9..d35ed8c 100644 --- a/src/app.css +++ b/src/app.css @@ -130,6 +130,11 @@ p, b { padding: 0 25px; } +.image-rounded { + border-radius: 5px; + border: 2px solid gray; +} + @media only screen and (min-width: 767px) { .desktop-zero-height { height: 0; diff --git a/src/layouts/app/AppLayout.tsx b/src/layouts/app/AppLayout.tsx index e8c8534..2356245 100644 --- a/src/layouts/app/AppLayout.tsx +++ b/src/layouts/app/AppLayout.tsx @@ -47,7 +47,7 @@ class AppLayout extends React.Component { {this.props.children}
- GitCom 2019 + GitCom 2019-2020
diff --git a/src/layouts/quickstart/developer/DeveloperQuickstartLayout.tsx b/src/layouts/quickstart/developer/DeveloperQuickstartLayout.tsx new file mode 100644 index 0000000..e2ed81e --- /dev/null +++ b/src/layouts/quickstart/developer/DeveloperQuickstartLayout.tsx @@ -0,0 +1,63 @@ +import React from "react"; +import {Button, Card, Col, Icon, Row} from "antd"; +import FullContainerPage from "../../../components/layout/simple/fullpage/FullContainerPage"; + +class DeveloperQuickstartLayout extends React.Component { + render() { + return + + + + +

GitCom developer quickstart

+ GitCom is a platform that can help you to monetize your open source projects + +
+ + +
+ +
+ Here are 4 steps that can help you get started +

+ 1. Sign in into your + account +
+ 2. Go to integrations + page and connect your GitHub or GitLab account +

+
+
+ 3. Select repositories that you would like to monetize and import them into the platform +
+
+
+ 4. That's it! Thank you. We'll reach out to you when one of your projects will receive + their first donation +
+ + In the meantime, you can + join our Discord server + to be able to discuss platform upcoming features and improvement ideas +

+
+ How funding works + + + + + } +} + +export default DeveloperQuickstartLayout; \ No newline at end of file From 3a890f4998d8d2dd6e2823319491ebc94a8c9634 Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Wed, 8 Jan 2020 20:02:32 -0500 Subject: [PATCH 07/15] Developer quickstart: updated content --- .../developer/DeveloperQuickstartLayout.tsx | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/layouts/quickstart/developer/DeveloperQuickstartLayout.tsx b/src/layouts/quickstart/developer/DeveloperQuickstartLayout.tsx index e2ed81e..b86eeae 100644 --- a/src/layouts/quickstart/developer/DeveloperQuickstartLayout.tsx +++ b/src/layouts/quickstart/developer/DeveloperQuickstartLayout.tsx @@ -18,7 +18,7 @@ class DeveloperQuickstartLayout extends React.Component {
- Here are 4 steps that can help you get started + Here are 4 steps that can help you get started

1. Sign in into your account @@ -43,7 +43,7 @@ class DeveloperQuickstartLayout extends React.Component { height: "150px" }} className={"image-rounded"}/>

- 4. That's it! Thank you. We'll reach out to you when one of your projects will receive + 4. That's it! Thank you. We'll reach out to you when one of your projects will receive their first donation
@@ -52,7 +52,22 @@ class DeveloperQuickstartLayout extends React.Component { to be able to discuss platform upcoming features and improvement ideas

- How funding works + +

How funding works

+ + There are a few ways how your projects can get funding: + +

+
+ 1. Selling subscription or using open core model - you can setup pricing plans for your + open source projects and users will be able to subscribe and pay on monthly basis or purchase + licence - that's up to you. +
+ 2. Subscription distribution - your projects can receive part of user monthly subscription + (from any user, distributed across projects that user liked) +
+ 3. Donation +

From 781dbef7282714c94cd88f5637d8b63b82688835 Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Wed, 8 Jan 2020 20:35:18 -0500 Subject: [PATCH 08/15] typo fix --- src/layouts/quickstart/developer/DeveloperQuickstartLayout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layouts/quickstart/developer/DeveloperQuickstartLayout.tsx b/src/layouts/quickstart/developer/DeveloperQuickstartLayout.tsx index b86eeae..a3dbbb9 100644 --- a/src/layouts/quickstart/developer/DeveloperQuickstartLayout.tsx +++ b/src/layouts/quickstart/developer/DeveloperQuickstartLayout.tsx @@ -10,7 +10,7 @@ class DeveloperQuickstartLayout extends React.Component {

GitCom developer quickstart

- GitCom is a platform that can help you to monetize your open source projects + GitCom is a platform that can help you monetize your open source projects From 876708a916cbe48825e639a8a68eed5b16ff93d1 Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Fri, 10 Jan 2020 19:34:03 -0500 Subject: [PATCH 09/15] updated deps --- package.json | 4 +-- yarn.lock | 91 +++++++++++++++++++++++++++++++--------------------- 2 files changed, 56 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index bca5afe..d3211af 100644 --- a/package.json +++ b/package.json @@ -3,14 +3,14 @@ "version": "0.10.0", "private": true, "dependencies": { - "@azure/ms-rest-js": "^2.0.1", + "@azure/ms-rest-js": "^2.0.5", "@types/jest": "24.0.15", "@types/node": "12.0.8", "@types/react": "16.8.20", "@types/react-dom": "16.8.4", "@types/react-facebook-login": "^4.1.0", "@types/react-router-dom": "^4.3.4", - "antd": "^3.19.5", + "antd": "^3.26.6", "autorest": "^2.0.4283", "copy-to-clipboard": "^3.2.0", "moment": "^2.24.0", diff --git a/yarn.lock b/yarn.lock index 55209e4..5859575 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30,10 +30,10 @@ resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-2.1.1.tgz#7b9c08dffd4f5d41db667d9dbe5e0107d0bd9a4a" integrity sha512-jCH+k2Vjlno4YWl6g535nHR09PwCEmTBKAG6VqF+rhkrSPRLfgpU2maagwbZPLjaHuU5Jd1DFQ2KJpQuI6uG8w== -"@azure/ms-rest-js@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@azure/ms-rest-js/-/ms-rest-js-2.0.4.tgz#1a1e0e3b2315619d675ebc04c4e8e0d98ce8aa2b" - integrity sha512-nSOPt6st0RtxclYBQV65qXZpvMDqiDQssktvB/SMTAJ5bIytSPtBmlttTTigO5qHvwQcfzzpQE0sMceK+dJ/IQ== +"@azure/ms-rest-js@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@azure/ms-rest-js/-/ms-rest-js-2.0.5.tgz#7ac1043b7b8c99bb8c5b09ada96b858b02db8e75" + integrity sha512-zj9/JOSsbaJleZz9k9RXKJMBPA2NBUgsus5iZxGlhK+pDeb8M2ps+lkKhJSwLnlTUj5CvrcN3PZDF2b2nSYCQQ== dependencies: "@types/node-fetch" "^2.3.7" "@types/tunnel" "0.0.1" @@ -1806,10 +1806,10 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -antd@^3.19.5: - version "3.25.3" - resolved "https://registry.yarnpkg.com/antd/-/antd-3.25.3.tgz#284cbf83cf5ab6c26dffb6066576f202ea60af50" - integrity sha512-qTegXllFsswzfSUyZHS8hebfUSqJ7uriDRcbE4Iwsa+/+IioHwDqha8cSzdbqrUqdjnozVV2vFDiGvRrI5fwEA== +antd@^3.26.6: + version "3.26.6" + resolved "https://registry.yarnpkg.com/antd/-/antd-3.26.6.tgz#7e583e11e757679ca6d2fda0bc418a177f5d3653" + integrity sha512-GgDiGjY/DooqpPxcWSMk8Xhj6hF1KuyIHzFZ/BgjpaXF+Ca9MKHch8Vmo5yuUPiXekbaOyoKaZj8g/Z2Tr3Lxg== dependencies: "@ant-design/create-react-context" "^0.2.4" "@ant-design/icons" "~2.1.1" @@ -1822,18 +1822,19 @@ antd@^3.19.5: css-animation "^1.5.0" dom-closest "^0.2.0" enquire.js "^2.1.6" + is-mobile "^2.1.0" lodash "^4.17.13" moment "^2.24.0" omit.js "^1.0.2" prop-types "^15.7.2" raf "^3.4.1" rc-animate "^2.10.2" - rc-calendar "~9.15.5" + rc-calendar "~9.15.7" rc-cascader "~0.17.4" rc-checkbox "~2.1.6" rc-collapse "~1.11.3" - rc-dialog "~7.5.2" - rc-drawer "~3.0.0" + rc-dialog "~7.6.0" + rc-drawer "~3.1.1" rc-dropdown "~2.4.1" rc-editor-mention "^1.1.13" rc-form "^2.4.10" @@ -1841,7 +1842,7 @@ antd@^3.19.5: rc-mentions "~0.4.0" rc-menu "~7.5.1" rc-notification "~3.3.1" - rc-pagination "~1.20.5" + rc-pagination "~1.20.11" rc-progress "~2.5.0" rc-rate "~2.5.0" rc-resize-observer "^0.1.0" @@ -1849,7 +1850,7 @@ antd@^3.19.5: rc-slider "~8.7.1" rc-steps "~3.5.0" rc-switch "~1.9.0" - rc-table "~6.9.4" + rc-table "~6.10.5" rc-tabs "~9.7.0" rc-time-picker "~3.7.1" rc-tooltip "~3.7.3" @@ -1857,7 +1858,7 @@ antd@^3.19.5: rc-tree-select "~2.9.1" rc-trigger "^2.6.2" rc-upload "~2.9.1" - rc-util "^4.10.0" + rc-util "^4.16.1" react-lazy-load "^3.0.13" react-lifecycles-compat "^3.0.4" react-slick "~0.25.2" @@ -5395,6 +5396,11 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" +is-mobile@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-mobile/-/is-mobile-2.1.0.tgz#4c0cab72f3358dd9986007389b30729fae80da0b" + integrity sha512-M5OhlZwh+aTlmRUvDg0Wq3uWVNa+w4DyZ2SjbrS+BhSLu9Po+JXHendC305ZEu+Hh7lywb19Zu4kYXu3L1Oo8A== + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -8412,10 +8418,10 @@ rc-animate@^3.0.0-rc.1: rc-util "^4.5.0" react-lifecycles-compat "^3.0.4" -rc-calendar@~9.15.5: - version "9.15.8" - resolved "https://registry.yarnpkg.com/rc-calendar/-/rc-calendar-9.15.8.tgz#6a3dbc2716c5297b46c8442dc2c748a17346111d" - integrity sha512-x3zVaZSRX7FkRNKw7nz3tutwrlIrU1aqMn5GtRUmlf84GnXLtd9fuuydxeNkFWfcHry3BPSto7+r9TK2al0h+g== +rc-calendar@~9.15.7: + version "9.15.9" + resolved "https://registry.yarnpkg.com/rc-calendar/-/rc-calendar-9.15.9.tgz#7a3457ee10f27b9972a755fe6415ef352f01a97a" + integrity sha512-XOPzJlXYmLFIcwalXmzxKZrrAMD6dEPLRVoHG3wbBpErqjE8ugnXVjm9yXgtQh3Ho3Imhmt+KO0WGLv5T4WuAA== dependencies: babel-runtime "6.x" classnames "2.x" @@ -8461,23 +8467,23 @@ rc-collapse@~1.11.3: react-lifecycles-compat "^3.0.4" shallowequal "^1.1.0" -rc-dialog@~7.5.2: - version "7.5.13" - resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-7.5.13.tgz#ad3bdc668381e77977b6c4689a2b9e2687961a70" - integrity sha512-tmubIipW/qoCmRlHHV8tpepDaFhuhk+SeSFSyRhNKW4mYgflsEYQmYWilyCJHy6UzKl84bSyFvJskhc1z1Hniw== +rc-dialog@~7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-7.6.0.tgz#6467b75f5b60038129bf2e1b003b264281949c09" + integrity sha512-N48vBPW8I53WycFHI4KXhuTUkB4mx+hixq1a9tcFMLoE7EhkAjbHvs0vGg+Bh/uFg5V00jmZBgQOIEbhcNal/A== dependencies: babel-runtime "6.x" rc-animate "2.x" - rc-util "^4.8.1" + rc-util "^4.16.1" -rc-drawer@~3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-3.0.2.tgz#1c42b2b7790040344f8f05f1d132b1ef0e97b783" - integrity sha512-oPScGXB/8/ov9gEFLxPH8RBv/9jLTZboZtyF/GgrrnCAvbFwUxXdELH6n6XIowmuDKKvTGIMgZdnao0T46Yv3A== +rc-drawer@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-3.1.1.tgz#25389488f3516b2af1f053eaf2574e3135ea265a" + integrity sha512-gx3W2KaeZHeZVKBwpZiHWgOR12CmER8VRGLeiTQq1E0hmKGNUXMvwV3DPulPTqOaOtcdFPCE3Dlf6mZfq6ANlQ== dependencies: babel-runtime "^6.26.0" classnames "^2.2.6" - rc-util "^4.11.2" + rc-util "^4.16.1" react-lifecycles-compat "^3.0.4" rc-dropdown@~2.4.1: @@ -8590,10 +8596,10 @@ rc-notification@~3.3.1: rc-animate "2.x" rc-util "^4.0.4" -rc-pagination@~1.20.5: - version "1.20.11" - resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-1.20.11.tgz#ff8ccbf422e229b0e36039bd33b5c9b619d74ad2" - integrity sha512-2wKO5kO+ELx1/zlqTY8TwGBruzofi+1BcZ7Z4xalMlLbDMTuUU4FDljbBBP/n9D2llK+NtgWA619PMBhInozZw== +rc-pagination@~1.20.11: + version "1.20.12" + resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-1.20.12.tgz#1ac7928f7a9d303d22e324c0c9a6e691756cf40c" + integrity sha512-V1pL0d4nTW00+8b0qS8t12jawmaP14RKT+jFdc32SD76MO3N2kBE/B/zZWPnJHjHTcs0EVhgQC4b2Vgiyy1OJA== dependencies: babel-runtime "6.x" classnames "^2.2.6" @@ -8678,10 +8684,10 @@ rc-switch@~1.9.0: prop-types "^15.5.6" react-lifecycles-compat "^3.0.4" -rc-table@~6.9.4: - version "6.9.5" - resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-6.9.5.tgz#b7394c3780d4ad2398d08d2059aba454f195273f" - integrity sha512-STL6387A/izVh6r9F1WDiIIZ0QeubCdTgIlzMeGTSl/bXhB0VqjAZEikvoijPoauTjJIkIzVuQEIDjOhAWbpkQ== +rc-table@~6.10.5: + version "6.10.11" + resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-6.10.11.tgz#fffe9c1b56de49f04d75bab3e28458e8c7a22f33" + integrity sha512-YcTlpO4RKlcM7Mio2FjcUOqRUyGU4edtOBG4x5kwZNHwZdfBm7m6VQuyQ/i6qec5S67EP86wiFbmKU54Z2HtFQ== dependencies: classnames "^2.2.5" component-classes "^1.2.6" @@ -8809,7 +8815,7 @@ rc-upload@~2.9.1: prop-types "^15.5.7" warning "4.x" -rc-util@^4.0.4, rc-util@^4.1.1, rc-util@^4.10.0, rc-util@^4.11.2, rc-util@^4.13.0, rc-util@^4.15.3, rc-util@^4.3.0, rc-util@^4.4.0, rc-util@^4.5.0, rc-util@^4.5.1, rc-util@^4.6.0, rc-util@^4.8.1: +rc-util@^4.0.4, rc-util@^4.1.1, rc-util@^4.13.0, rc-util@^4.15.3, rc-util@^4.3.0, rc-util@^4.4.0, rc-util@^4.5.0, rc-util@^4.5.1, rc-util@^4.6.0: version "4.15.7" resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.15.7.tgz#8380b05765952d08dd9fdb836e19dda437cceab7" integrity sha512-9pn2NU7IafaP0Hbtll7Ufu9eF9odDOMGMI/WD9lgD4yrm3xR4yCAWZ0cqQGIhKMqdkg3I7et7/dTekrftMeqJQ== @@ -8820,6 +8826,17 @@ rc-util@^4.0.4, rc-util@^4.1.1, rc-util@^4.10.0, rc-util@^4.11.2, rc-util@^4.13. react-lifecycles-compat "^3.0.4" shallowequal "^1.1.0" +rc-util@^4.16.1: + version "4.18.1" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.18.1.tgz#5a6312503cd5366ef0bede021dce42d373f404a8" + integrity sha512-3aRHG32ZvqBymtJUGoQnbZS+XANzO6XTiFEFAYI3BfuxESEazopAy0kBwcAI6BlLHsW1oLiy3ysE9uYwylh2ag== + dependencies: + add-dom-event-listener "^1.1.0" + babel-runtime "6.x" + prop-types "^15.5.10" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.1.0" + rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" From 9771a2987acb5e4c07cf4b1ed4ed549665d3e1c2 Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Sat, 11 Jan 2020 13:56:45 -0500 Subject: [PATCH 10/15] changed header login link to button --- src/layouts/app/AppLayout.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/layouts/app/AppLayout.tsx b/src/layouts/app/AppLayout.tsx index 2356245..847f866 100644 --- a/src/layouts/app/AppLayout.tsx +++ b/src/layouts/app/AppLayout.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Link } from 'react-router-dom'; import styles from './styles.module.css'; -import {Icon, Layout, Menu, notification} from 'antd'; +import {Button, Icon, Layout, Menu, notification} from 'antd'; const { Header, Footer } = Layout; @@ -15,7 +15,11 @@ class AppLayout extends React.Component { } render() { - let loginOrHomeLink = Log in; + let loginOrHomeLink = + + ; if (window.App.isAuthorized()) { loginOrHomeLink = Home From 92ce6266bf02fd4605660d3f0e6e17911b8d99fc Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Sat, 11 Jan 2020 19:19:27 -0500 Subject: [PATCH 11/15] misc updates & removed unused project layout --- .../card/ExternalRepoCard.tsx | 0 .../external/repo/card/RepoCard.tsx | 20 +++ .../entity/project/page/ProjectPage.tsx | 141 ------------------ .../entity/project/view/ProjectPage.tsx | 3 + .../external/default/ExternalRepoLayout.tsx | 2 +- 5 files changed, 24 insertions(+), 142 deletions(-) rename src/components/external/{repo => external_repo}/card/ExternalRepoCard.tsx (100%) create mode 100644 src/components/external/repo/card/RepoCard.tsx delete mode 100644 src/layouts/entity/project/page/ProjectPage.tsx diff --git a/src/components/external/repo/card/ExternalRepoCard.tsx b/src/components/external/external_repo/card/ExternalRepoCard.tsx similarity index 100% rename from src/components/external/repo/card/ExternalRepoCard.tsx rename to src/components/external/external_repo/card/ExternalRepoCard.tsx diff --git a/src/components/external/repo/card/RepoCard.tsx b/src/components/external/repo/card/RepoCard.tsx new file mode 100644 index 0000000..0a46b87 --- /dev/null +++ b/src/components/external/repo/card/RepoCard.tsx @@ -0,0 +1,20 @@ +import React from "react"; + +interface IProps { +} + +interface IState {} + +class RepoCard extends React.Component { + componentDidMount(): void { + + } + + render() { + return
+ repo card2 +
+ } +} + +export default RepoCard; \ No newline at end of file diff --git a/src/layouts/entity/project/page/ProjectPage.tsx b/src/layouts/entity/project/page/ProjectPage.tsx deleted file mode 100644 index b4df11f..0000000 --- a/src/layouts/entity/project/page/ProjectPage.tsx +++ /dev/null @@ -1,141 +0,0 @@ -import React from "react"; -import FullPageWithSideBar from "../../../../components/layout/simple/fullpagewithsidebar/FullPageWithSidebar"; -import {handleApiError} from "../../../../classes/notification/errorHandler/errorHandler"; -import {Button, Card, Col, Divider, Icon, Row} from "antd"; -import {BoardModel, ProjectModel} from "../../../../client/bindings"; -import BoardCard from "../../../../components/entity/board/single/card/BoardCart"; -import PermissionCheckLink from "../../../../components/link/withChecks/PermissionCheckLink"; - -interface IProps { - match: { - params: { - owner: string, - alias: string - } - } -} - -interface IState { - isLoaded: boolean, - project: ProjectModel|null, - boards: BoardModel[]|null -} - -class ProjectPage extends React.Component { - constructor(props: IProps) { - super(props); - this.state = { - isLoaded: false, - project: null, - boards: null - }; - } - - componentDidMount(): void { - this.getProjectInfo(); - } - - getProjectFullName() { - return this.props.match.params.owner + "/" + this.props.match.params.alias; - } - - getProjectInfo(): void { - window.App.apiClient.getProjectByAlias(this.props.match.params.owner, this.props.match.params.alias) - .then((result) => - this.processGetProjectInfo(result._response)) - .catch((error) => handleApiError(error.response)); - } - - processGetProjectInfo(response: any) { - let json = JSON.parse(response.bodyAsText); - - this.setState({ - isLoaded: true, - project: json.data.project - }); - - this.getProjectBoards(); - } - - getProjectBoards(): void { - window.App.apiClient.getProjectBoards(this.state.project!.guid!) - .then((result) => - this.processGetBoardsResponse(result._response)) - .catch((error) => handleApiError(error.response)); - } - - processGetBoardsResponse(response: any) { - let json = JSON.parse(response.bodyAsText); - - this.setState({ - boards: json.data.boards - }); - } - - render() { - if (!this.state.isLoaded || !this.state.project) { - return -

Loading project info

- -
; - } - - let project: ProjectModel = this.state.project; - - return -

{project.name}

-

{project.description}

- - - - - - -

Details

-
- Created at: {project.created_at} - Last updated at: {project.updated_at} -
- - - {/* TODO: extract into repository card */} - -

Repository

- -
- - -
-
- - - - - -

Boards

- - - {this.state.boards === null ? : null} - {this.state.boards != null && this.state.boards.length === 0 ?
- No boards for this project -

- {/* TODO: check permissions */} -
: null} - {this.state.boards != null && this.state.boards.map((board: BoardModel, i: number) => { - return - - ; - })} -
- ; - } -} - -export default ProjectPage; diff --git a/src/layouts/entity/project/view/ProjectPage.tsx b/src/layouts/entity/project/view/ProjectPage.tsx index 3f169d5..4901e18 100644 --- a/src/layouts/entity/project/view/ProjectPage.tsx +++ b/src/layouts/entity/project/view/ProjectPage.tsx @@ -7,6 +7,7 @@ import BoardCard from "../../../../components/entity/board/single/card/BoardCart import PermissionCheckLink from "../../../../components/link/withChecks/PermissionCheckLink"; import AuthCheck from "../../../../components/check/auth_check/AuthCheck"; import AddToLibrary from "../../../../components/entity/my_library/single/action/AddToLibrary"; +import RepoCard from "../../../../components/external/repo/card/RepoCard"; interface IProps { match: { @@ -125,6 +126,8 @@ class ProjectPage extends React.Component { + +

Boards

diff --git a/src/layouts/repos/external/default/ExternalRepoLayout.tsx b/src/layouts/repos/external/default/ExternalRepoLayout.tsx index 53a98cb..1d62239 100644 --- a/src/layouts/repos/external/default/ExternalRepoLayout.tsx +++ b/src/layouts/repos/external/default/ExternalRepoLayout.tsx @@ -2,7 +2,7 @@ import React from "react"; import FullPageWithSideBar from "../../../../components/layout/simple/fullpagewithsidebar/FullPageWithSidebar"; import {Col, Icon, notification, Row} from "antd"; import {handleApiError} from "../../../../classes/notification/errorHandler/errorHandler"; -import ExternalRepoCard from "../../../../components/external/repo/card/ExternalRepoCard"; +import ExternalRepoCard from "../../../../components/external/external_repo/card/ExternalRepoCard"; interface IProps { match: { From 0a9ff3a82826ff467f48d6d23578d17da91aacc1 Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Sat, 11 Jan 2020 19:36:41 -0500 Subject: [PATCH 12/15] repository card added to project page --- src/client/bindings.ts | 11 +++++- .../external/repo/card/RepoCard.tsx | 39 ++++++++++++++++--- .../entity/project/view/ProjectPage.tsx | 12 +----- 3 files changed, 45 insertions(+), 17 deletions(-) diff --git a/src/client/bindings.ts b/src/client/bindings.ts index e7ee678..c96043e 100644 --- a/src/client/bindings.ts +++ b/src/client/bindings.ts @@ -1,4 +1,4 @@ -import {CurrencyType, CurrencyType1, CurrencyType3, EntityType} from "./models"; +import {CurrencyType, CurrencyType1, CurrencyType3, EntityType, User} from "./models"; export class ProjectModel { guid?: string; @@ -156,3 +156,12 @@ export interface WithdrawalRequest { paid?: boolean; created_at?: string; } + +export interface Repository { + guid?: string; + creator?: User; + title?: string; + repo_url?: string; + origin_id?: string; + created_at?: string; +} diff --git a/src/components/external/repo/card/RepoCard.tsx b/src/components/external/repo/card/RepoCard.tsx index 0a46b87..4032af0 100644 --- a/src/components/external/repo/card/RepoCard.tsx +++ b/src/components/external/repo/card/RepoCard.tsx @@ -1,19 +1,48 @@ import React from "react"; +import {ProjectModel} from "../../../../client/bindings"; +import {Button, Card, Icon, Row} from "antd"; +import {handleApiError} from "../../../../classes/notification/errorHandler/errorHandler"; interface IProps { + project: ProjectModel, } -interface IState {} +interface IState { + isLoaded: boolean, + repository_url: string +} class RepoCard extends React.Component { - componentDidMount(): void { + constructor(props: IProps) { + super(props); + this.state = { + isLoaded: false, + repository_url: "#" + } + } + componentDidMount(): void { + window.App.apiClient.getRepo(this.props.project.repository_guid!) + .then((res) => { + let json = JSON.parse(res._response.bodyAsText); + console.log(json.data.repository); + this.setState({ + isLoaded: true, + repository_url: json.data.repository.repo_url + }); + }) + .catch((error) => handleApiError(error.response)); } render() { - return
- repo card2 -
+ return +

Repository

+ + + + + +
} } diff --git a/src/layouts/entity/project/view/ProjectPage.tsx b/src/layouts/entity/project/view/ProjectPage.tsx index 4901e18..55f5229 100644 --- a/src/layouts/entity/project/view/ProjectPage.tsx +++ b/src/layouts/entity/project/view/ProjectPage.tsx @@ -114,20 +114,10 @@ class ProjectPage extends React.Component {
- {/* TODO: extract into repository card */} - -

Repository

- - - - - -
+
- -

Boards

From ee8d7203db172e86c6795461f547b68fa7be0de9 Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Sat, 11 Jan 2020 19:45:59 -0500 Subject: [PATCH 13/15] added stars count to project page & small refactor --- src/layouts/entity/project/view/ProjectPage.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/layouts/entity/project/view/ProjectPage.tsx b/src/layouts/entity/project/view/ProjectPage.tsx index 55f5229..f5a078e 100644 --- a/src/layouts/entity/project/view/ProjectPage.tsx +++ b/src/layouts/entity/project/view/ProjectPage.tsx @@ -1,7 +1,7 @@ import React from "react"; import FullPageWithSideBar from "../../../../components/layout/simple/fullpagewithsidebar/FullPageWithSidebar"; import {handleApiError} from "../../../../classes/notification/errorHandler/errorHandler"; -import {Button, Card, Col, Divider, Icon, Row} from "antd"; +import {Button, Col, Divider, Icon, Row} from "antd"; import {BoardModel, ProjectModel} from "../../../../client/bindings"; import BoardCard from "../../../../components/entity/board/single/card/BoardCart"; import PermissionCheckLink from "../../../../components/link/withChecks/PermissionCheckLink"; @@ -89,7 +89,7 @@ class ProjectPage extends React.Component {

{project.name}

{project.description}

- {/* TODO: add likes count */} + From 362f559536a6c24c9be074ef0e95225b253b35d1 Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Sat, 11 Jan 2020 20:04:48 -0500 Subject: [PATCH 14/15] sign in to support / project page layout updated --- .../invoice/single/create/NewInvoice.tsx | 1 + .../entity/project/view/ProjectPage.tsx | 52 +++++++++++++------ 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/components/entity/invoice/single/create/NewInvoice.tsx b/src/components/entity/invoice/single/create/NewInvoice.tsx index 5a5e8dd..695b636 100644 --- a/src/components/entity/invoice/single/create/NewInvoice.tsx +++ b/src/components/entity/invoice/single/create/NewInvoice.tsx @@ -134,6 +134,7 @@ class NewInvoice extends React.Component { .then((result) => this.processPostInvoice(result._response)) .catch((error) => { + this.setState({isButtonPressed: false}); console.error(error); this.handleApiError(error.response) }); diff --git a/src/layouts/entity/project/view/ProjectPage.tsx b/src/layouts/entity/project/view/ProjectPage.tsx index f5a078e..97e8f89 100644 --- a/src/layouts/entity/project/view/ProjectPage.tsx +++ b/src/layouts/entity/project/view/ProjectPage.tsx @@ -1,13 +1,15 @@ import React from "react"; import FullPageWithSideBar from "../../../../components/layout/simple/fullpagewithsidebar/FullPageWithSidebar"; import {handleApiError} from "../../../../classes/notification/errorHandler/errorHandler"; -import {Button, Col, Divider, Icon, Row} from "antd"; +import {Button, Card, Col, Divider, Icon, Row} from "antd"; import {BoardModel, ProjectModel} from "../../../../client/bindings"; import BoardCard from "../../../../components/entity/board/single/card/BoardCart"; import PermissionCheckLink from "../../../../components/link/withChecks/PermissionCheckLink"; import AuthCheck from "../../../../components/check/auth_check/AuthCheck"; import AddToLibrary from "../../../../components/entity/my_library/single/action/AddToLibrary"; import RepoCard from "../../../../components/external/repo/card/RepoCard"; +import {Link} from "react-router-dom"; +import NewInvoice from "../../../../components/entity/invoice/single/create/NewInvoice"; interface IProps { match: { @@ -88,21 +90,39 @@ class ProjectPage extends React.Component { return

{project.name}

{project.description}

- - - - - - - - + + +
+ + + +
+
+ +
+
+ { + window.App.isAuthorized() ? + :

+ + + to support this project +

+ } +
From a555f2e56e5071d7a1c76ac0fe16a18896c44a68 Mon Sep 17 00:00:00 2001 From: Max Kovalenko Date: Sat, 11 Jan 2020 20:37:54 -0500 Subject: [PATCH 15/15] v0.11.0-rc1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d3211af..8e92880 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gitcom-front", - "version": "0.10.0", + "version": "0.11.0", "private": true, "dependencies": { "@azure/ms-rest-js": "^2.0.5",