From efed2753538bf4446147b0614ef4ea20f8ae3b8f Mon Sep 17 00:00:00 2001 From: Gaurav Kumar Date: Sat, 26 Apr 2025 16:40:32 +0530 Subject: [PATCH] vida --- .../vpspack/Visa_application.zip | Bin 0 -> 26507 bytes .../editstepper.component.html | 21 +- .../editstepper.component.ts | 106 +++- .../Visa_application.component.html | 3 - .../Visa_application.component.ts | 88 --- .../SiteBuilderGrid/SiteTree.service.ts | 4 +- .../fnd/SiteTreeBuilder/WireframesUi 2.zip | Bin 0 -> 17583 bytes .../wireframe-renderer.component.html | 118 +++- .../wireframe-renderer.component.scss | 26 + .../wireframe-renderer.component.ts | 546 ++++++++++++++---- .../tree-visualizer.component.html | 38 +- .../tree-visualizer.component.scss | 159 +++++ .../tree-visualizer.component.ts | 46 +- 13 files changed, 933 insertions(+), 222 deletions(-) create mode 100644 visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/vpspack/Visa_application.zip create mode 100644 visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/SiteTreeBuilder/WireframesUi 2.zip diff --git a/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/vpspack/Visa_application.zip b/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/vpspack/Visa_application.zip new file mode 100644 index 0000000000000000000000000000000000000000..aea0074db4d35c608283aff6d8b2bdd221784cc5 GIT binary patch literal 26507 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 Z2*Xua1BjIkl!E1f@HIaJLsvM62LR{@i$eea literal 0 HcmV?d00001 diff --git a/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/vpspack/Visa_application/VisaOrderWorkflow/editstepper.component.html b/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/vpspack/Visa_application/VisaOrderWorkflow/editstepper.component.html index bdafd0d..ac8395b 100644 --- a/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/vpspack/Visa_application/VisaOrderWorkflow/editstepper.component.html +++ b/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/vpspack/Visa_application/VisaOrderWorkflow/editstepper.component.html @@ -368,8 +368,27 @@
Customer Details:

Name: {{ rowSelected.name }}

-

Phone: {{ rowSelected.phone }}

+

Active: {{ rowSelected.active }}

+

Visa Entry Type: {{ rowSelected.visa_entry_typename }}

+

Visa Duration: {{ rowSelected.visa_durationname }}

+

Visa Processing: {{ rowSelected.visa_processingname }}

+

Travel Start Date: {{ rowSelected.travel_start_date }}

+

Travel End Date: {{ rowSelected.travel_end_date }}

+

Passport Number: {{ rowSelected.passport_number }}

+

Passport Issue Date: {{ rowSelected.passport_issue_date }}

+

Passport Expiry Date: {{ rowSelected.passport_expiry_date }}

Email: {{ rowSelected.email }}

+

Phone Number: {{ rowSelected.phone_number }}

+

Birth Place: {{ rowSelected.birth_place }}

+

Date of Birth: {{ rowSelected.date_of_birth }}

+

Gender: {{ rowSelected.gendername }}

+

Profession: {{ rowSelected.profession }}

+

Visa Cost: {{ rowSelected.visa_cost }}

+

Referrer: {{ rowSelected.referrername }}

+

Nationality: {{ rowSelected.nationalityname }}

+

Supplier: {{ rowSelected.suppliername }}

+

Agent: {{ rowSelected.agentname }}

+
diff --git a/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/vpspack/Visa_application/VisaOrderWorkflow/editstepper.component.ts b/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/vpspack/Visa_application/VisaOrderWorkflow/editstepper.component.ts index 0e3560c..7b5a175 100644 --- a/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/vpspack/Visa_application/VisaOrderWorkflow/editstepper.component.ts +++ b/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/vpspack/Visa_application/VisaOrderWorkflow/editstepper.component.ts @@ -112,8 +112,26 @@ export class EditstepperComponent implements OnInit { supplier: [null], agent: [null], - + }); + + + this.getallvisa_entry_type(); + + this.getallvisa_duration(); + + this.getallvisa_processing(); + + this.getallgender(); + + this.getallreferrer(); + + this.getallnationality(); + + this.getallsupplier(); + + this.getallagent(); + } // Change to Horizontal Layout @@ -207,6 +225,8 @@ export class EditstepperComponent implements OnInit { this.toastr.error("Not Added"); } }); + this.rowSelected = this.entryForm.value; + setTimeout(() => { this.ngOnInit(); }, 500); @@ -330,11 +350,51 @@ export class EditstepperComponent implements OnInit { } } + updategender(gender: string): void { + this.entryForm.get('gender').setValue(gender); + } + + updategenderEdit(gender: string): void { this.rowSelected.gender = gender } + + + + + rsModaldescription = false; + goToReplaceStringdescription(row) { + this.rowSelected = row; this.rsModaldescription = true; + } + + + + selectvisa_entry_type; + getallvisa_entry_type() { + this.mainService.getAllvisa_entry_type().subscribe(data => { + this.selectvisa_entry_type = data; + console.log(data); + }, (error) => { console.log(error); }); + } + + selectvisa_duration; + getallvisa_duration() { + this.mainService.getAllvisa_duration().subscribe(data => { + this.selectvisa_duration = data; + console.log(data); + }, (error) => { console.log(error); }); + } + + selectvisa_processing; + getallvisa_processing() { + this.mainService.getAllvisa_processing().subscribe(data => { + this.selectvisa_processing = data; + console.log('visa processing ', data); + }, (error) => { console.log(error); }); + } + isValidemail(email: string): boolean { const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; return emailPattern.test(email); @@ -349,13 +409,14 @@ export class EditstepperComponent implements OnInit { - updategender(gender: string): void { - this.entryForm.get('gender').setValue(gender); + selectgender; + getallgender() { + this.mainService.getAllgender().subscribe(data => { + this.selectgender = data; + console.log(data); + }, (error) => { console.log(error); }); } - updategenderEdit(gender: string): void { this.rowSelected.gender = gender } - - //currency field start @@ -366,4 +427,37 @@ export class EditstepperComponent implements OnInit { this.rowSelected.visa_cost = this.rowSelected.visa_cost?.replace(/,/g, ''); } //currency field end + + selectreferrer; + getallreferrer() { + this.mainService.getAllreferrer().subscribe(data => { + this.selectreferrer = data; + console.log(data); + }, (error) => { console.log(error); }); + } + + selectnationality; + getallnationality() { + this.mainService.getAllnationality().subscribe(data => { + this.selectnationality = data; + console.log(data); + }, (error) => { console.log(error); }); + } + + selectsupplier; + getallsupplier() { + this.mainService.getAllsupplier().subscribe(data => { + this.selectsupplier = data; + console.log(data); + }, (error) => { console.log(error); }); + } + + selectagent; + getallagent() { + this.mainService.getAllagent().subscribe(data => { + this.selectagent = data; + console.log(data); + }, (error) => { console.log(error); }); + } + } diff --git a/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/vpspack/Visa_application/Visa_application.component.html b/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/vpspack/Visa_application/Visa_application.component.html index 704f659..0914ffc 100644 --- a/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/vpspack/Visa_application/Visa_application.component.html +++ b/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/vpspack/Visa_application/Visa_application.component.html @@ -19,9 +19,6 @@ ADD - { console.log(error); if (error.status >= 200 && error.status <= 299) { @@ -463,9 +378,6 @@ export class Visa_applicationComponent implements OnInit { // updateaction - gotositebuilder() { - this.router.navigate(["/cns-portal/SiteBuilder"]); - } } diff --git a/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/SiteTreeBuilder/SiteBuilderGrid/SiteTree.service.ts b/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/SiteTreeBuilder/SiteBuilderGrid/SiteTree.service.ts index 27bf0b8..287877f 100644 --- a/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/SiteTreeBuilder/SiteBuilderGrid/SiteTree.service.ts +++ b/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/SiteTreeBuilder/SiteBuilderGrid/SiteTree.service.ts @@ -8,7 +8,7 @@ import { environment } from 'src/environments/environment'; }) export class SiteTreeservice { private baseURL = "SiteTree/SiteTree"; - private dlfbaseURL = environment.builderUrl+"/entityBuilder"; + private dlfbaseURL = environment.builderUrl + "/entityBuilder"; private nodeURL = environment.nodeUrl; @@ -52,7 +52,7 @@ export class SiteTreeservice { } createHtmlPages(data: any, projId: number): Observable { - return this.apiRequest.post(`sureops/createFile?projId=` + projId, data); + return this.apiRequest.post(`sureops/deploy?projId=` + projId, data); } diff --git a/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/SiteTreeBuilder/WireframesUi 2.zip b/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/SiteTreeBuilder/WireframesUi 2.zip new file mode 100644 index 0000000000000000000000000000000000000000..4831ce7ae4e55ccdc96d0bfd6673ef319054b50c GIT binary patch literal 17583 zcmb4~V{k9c!tG<*wryj_|76Fuy<^+9lO5Z(ZQHhO-shaU=e}>9Z+EIz_f$>Q>Tj!O z=C@k@Hz*hy(7&#?>{!iz-~8VJ9*77?&BDRN)WN{o#8Jh9QAHUZ2-3#t+sySJ{cCo1 zg9QQxdjbXm`nQGrzpbEvpnyg))Bc~8R{{_a-G5uT{>PWz!NkVc#KFXY!N}Iy&eq1n z#)-kn@!u=Wh{2fuNB_0bmClw8-k5XuiPGYHfEfiz#=6c84uMpCoA%fQJT-Mb+CXkt zEteAOf}-3@Ye(o}5U(F7*{v8Hq`!AOoz*CC0@p8)LylkDrg}skL79%{B^B)zp6O_6 z>+F0XY6IEjN+q&cJ@4lwEzPU$X%PzJC5Ei%ck+cK@DO88DT5@_fqYu9d!FeHu+0@Y zHnm-D9HG7h!=CnO4dl2*V@b|Fg9mqf`)A8Ul452ZrEeB2{D<-^pMT!ynKv@i#_XxcN4<_aQ9?a4G1|? z92G{JYq<_>Y5B853vA~`Jvhk*Ac4i_CT}GDQW`n%WJZxcZDRnug zJh3Y13y=`_v4d#cCYnRWH9n#qD_3<~*bxE;cZM6@*`e-Wf_|j~Zj;xwvJx0^15Ftw z%eF(U<18}`WE4EAT}a6(60yG?Sx??-XZGJ7l?(4}3B+Pw)khs>M~#3fm^$e<)~SA| zf4V#|p>*l8LVV~9Hu4hb6-c$C@ z&;LlZGo$4cbUUB<9|le)n~XOmsXR`YwkeberED@{do`&S^GoeKF(wDhKfhNyj~nuz z?kKvD5d2oTcz(a6gASEC8U;`oVDu*P-s9e38Z+mZB$6ST;w5qMo(By~-#w?71qn-% zAd8N*ZU6@x7!1EhIdibJZKrSa0uBSAVU81rwreY3$A}gAY^olYDu%|yHLUZ_BQJbl&(N8V|?N?kr4_p6c!2uXhnxm(gD-BO|&v90Ye_GAz znEa|^fveH`df!>~K9qnXFDQ=|fP<|bd@(d5A%$m$Dxiq8`{{KGqI;-2NCK4CJ44+oP!Y|{ckwnm z&!DKFV-@>CVTY4Rf(npCAKvx`Ae$OT*VmF5Wrs+!O#?0snNi0|Pl-AlAv24})(iy6 z0?euYo@xr8Vxl)^@LGSE<`=c;IMIu9{A$QI5A@!}l?dHdf73WJy`emlMYAAWbc@i7$3OC>siffg0-Ncjzp;&BR;mM=3 zaAFN`jVZhcbKAh7Qf0fIuU7Nvuppb{7el6hIA#y`ex~;P^!&U*y68^=We|`%)`FZO z6{5Tuf@VizKhuitc_SzeDno*uAB-NEw(WgNqFm4dbKid3v+ONa+TPYP1K&BFwyE85UfvUrz8*3wc2mM{=NPn(lhelCkCmMlM*qM^%Y z*-oE+veUn3%8s;~oejQFuUdI*{V5<7BH0-giX<1;rqRO@n2YJHfM- zXRo4EmDF2Ry_PoPU54twaU}e%SS;!gULP7oZIVi??prf*g~L15o>+>mcj)wa3f&3( zEv0B678F$oXk(U|D-+RiD2X2)(QjZ-+E{95X9a|Yp+iY&B>nED6nmr=bx5leLDHga z)2W%?-0`e!m?7Zzal1W*=3RAPTyey2(R!v*gLjcgnR@O+%b6xZiL{w{e&m`1j4GN_ zEd0rAN!zuecwO^igVDor=HcFD)TiJMH2@JYMb_)xMBrZ~Lg5oX`s=_{*au<3XR7V3jn328pg__Wpd|M%! zh_g(JM57K63525%kqa zU<4t##UcagH{C-UwxR_~)}KxEPa}h>GO?1yW(ebuHaO;)q|~}~<{LAyP9la*mwW{Z z-Q%02jGFO-OzU2_%!*a9wUzV3jo;qVZ!z)-`I#jBygB2WNyO?Fy2tQ(df2I2+v+z^ zvF6HRqKB}8M@7KGk~VE((wFb&f+6-MEu^iTnDoEW0BKl?yAM~Y1ra3^YR}b-lbAk$ zLc=aDE}h}iS0hKi z5gyQwhH6=BE$b+p`|O0c{uxc)E^MV4C+ zEV*-2nb`Ea)8qW-*+FaF>PO_$XB?7om|FJjeFqy3V&lTq)>f#gqYD)zf2_>Yl*7f1 zV|y;5(!-`f;d?G(V~J&+_!1icy?8qi8<8_t3gFGAGew}ORIq*ak?8mH4zUXP+gi17 zCZ!%e)W)zVhC~`Z9b~3S^N_4Sl~3HPDQa_R5=Z$l)&_9x19kEgqA_o5*D4>4u0nDs zkYxlSDBg15P!5gv#))p%M8dVn;e-)CCuaKuV96k8gQkgFDVt_4T^D%12C?PbmJveC zykScm)kttK<$2F6URadT3c2!PPROE`lWvI3NQDIo71GICB2!l^`6%RNtF%;!RH+n2 zN&RfYBqflE@exD*^In#?4)f2Rciywcuc1541$ebT1ACV~tx+r^0SROc>vi4JQ+_tN zmQ%W2n58Rh@`Sl6c?ww1&$uiZ%e22`GqO{|QY1HzfSaxC4pTfW=HlTUa^g1|l=QH-h|0t$y+e~~}$87Ew>Te!fzWvoWoOAX73fa-yRWo%&Jzi2-Ktf(;! z7GnW3{esv3HSF+9`h{ba3@k$$5_PnYDMKjC3iu~^LZ8cZoN7U2CUTw_kNeLS1<1EN zFZ#lvwES_vA#|Klq{8>mqLhm|0qrOk84GFPWwO)hithx|h?(Ndg^Kytuo(Ki zZna+7n6DYlCld^(jI}1hM?~~jqQxYF9{qY_gkIg5UcF~bvNLfqkSkdhh^a=Ghk%WC zt87&SddqHaV$~A*v$W6RCs@6y>-~bXVG0aDEIHZeU3@#QaPa9qNtCJgPh|YtDz{>P zlpZM6tSp3}o-UoL&zJhA6+!W$beHisYZ{Kx;33j$#;!SOn4WDkrAO8BOZ=Q!e*<(e zZDUpL#V`p#5~U0^xpDAYA894g-4pp8%EHrL;zJ4M4L<1H=%L;oeiFWcA(L%ap^;E# z0>8#qiZoRh!@rqgk%)0iW#zKkw=aA#BmuvvwB8}FEXmdVt*rXkN}1q{9Z!l1KcB(R z6!hadeHHh z#SW2(7an%tGQf8sT-a!+2i^ZsPoUk34Nk=+NYJhmPn~ z^M<=Zl3ZHx36A^BBi+%tv3^(CVr5dN>iHtYp}gL8X~k-dO0ols(h%9_nUPw5C6GGD zdC6-=C#x4aF6qPm>M;dLf)OiLx6(5YTlL|Z?_g(c*3?kJ=C7zB|^C6XLR60RL zLX^0{WWkIvrK}C=zWvLvSRJvIyXS8KFN};u>H9lA=mVP*jmp4_-_i!%ZVAHO(cm2+h#6vK11TunNZnn86Kt(?c;McBFs~wk2^!P(Rw;0^ z(2sfHt8?mTh4#9?)ovQ)-d6)Z;}~`|c@pTNd8L&&q%`wS^++)eLTN6+9iTB@?Gd1f zh<^MBIs?fTA><(qN>R!fg3jf37L32zvGhctN2G^y5V=q&+Lse88;9jAa$&et2E5_5 zo?R+@ga69&kwKBfW1UVHbP3RtqMUSF)kB;nNQt==&~h4TzG}4bPfoPxuKAe>UxU_h zr+y5cLnXI(nj9=y)J#S=-Gv-BTa?KD&D^ehAet+!>lL#BX7)LC8Sh{nX*`?x`fP9T z7>W6IOHiJQ+3a@=M^kZLTr7z)6ZQ14>^PRxoyhP~E!>c?;FuaQC!H_D+QYF^#qysg z@!c8sc4+QH`>mR~7RLrKg|%`;3T{{kDsfPv5b#d8JU2_`D@qTHBDyR+EuM!7S8~SP zSDA@O1s`D+gdO3NoA13v%PcX!(XZ0kLOAS0MRx5V5KHKYlM?9x^HyVpE~d{sU$ z>UJRfP|H`Aqv_`qGUhHykYt8-a>`AD@GAe7-a?5TOeZl$J=;(80_}B0a0U@$&+8)F z-5IEUjA1?M%BH56Rxj`h!mUlRKgC`8liDs{bk!@!{+6PeE>KIoGMcMK(0s`)}j zF@I&3p+bi%t;iezGpl_DNiQ^6Q(2db3PxE}p9>aMJe>+J$gam?AItO&XDffADSPf&b>&7~g8cROO1|S5pI_ zmI;j`AtmUFU)waauel6?{XnxoO|GCSW@aVIm^-D&wmRJt$l2+ae+bPL0TA_i-rAm@ zLmq}_Q$=npqU-c zD-yXdR;fH(+Inq9=z@PobApuOCmm}V95iVWu-&L^Yh!J;XedQ*8-M2&22UDu_spKQ zls9IM*otWjn0B9-9eZA-#Us0Y2_^J!Qxd*$znxwj3_fquDwnASN1X%ihnb6oOQzsn z&VmZ;^sNt*8k+K>xZ{>cj>#>!hQ}(hFRC}aRS^`J&}Hqr?qwgQTcn~C0dDrXWeD(f z+BFcP{py@r1k#$`9Nr*1`8|Z#dS3*S@5vn8nH5abSdG>awH;5(yIf5pl6?FI6} zPpTX;JSx}+e*vD3K#Yqyj!weaJ8zO3#JT@Iw||k0&T76M4Zkl z^V@_aheUbNDRCorfX4&2beHyh2E-<*lMkPxAE659_2*6QVcMXni5jA z?6Iy&+z8JH)kcPgy>jZc@f|L1R9b1JvAKGem8oh%OqRIyN|{@yO=&l`C1&h2%39kW zxl1yg%;cX>`FO;v)h=uKrBiC{P^E6~TSKxL^gyKI<;1(A&5Pq)-Q3h*y=QY2 z;oWq_`OwbMRl&QRpkE0#IEpob7)vfeqPEe|ORYB9Z%k&o2jbOcD<)JkwNQ8)aRCao znLkjivBFx;GwZ9nx zrp>R4-9v%}=08`FXl5}}Be4R{Y6+OaUxpj31ah#AM&YQwxE$yAl;LWNj!&&vx=K;^ zPj2ZOV+18^+4{&$-`F{U+ z4@d|-^<$CHs0~D)4asBcWdT4Z0{EOHP()>q(ifn zNZNQVqj4!KaV1OF(sPNI^N1uTZm#KHG9*8bK~1B!?E29SPNEH`!w5v^5sOHn14eDe zE^gtXhmIaw>t-!L{su)QFqXhmnMAD(F{s`?pd=h6tK0Lw)6P zf3xf0TEfKi+VPMzhx7wE9q;!c6O$e*2$yS8YSrZW#vSV@ zios<=NqKf4go~4J-2e|$tkIDc4ft!iwaghkx?2RMC)_w1;7>Mi=ZDE}J#UMVi!c^V=gU~{4e_X3hPI_^sKjQoC$Fm1 z-Di(*L!Dq!@YJZRnG^q+>^e7UdH;@+f!UIl7jB6PX!MUkb!F$>-b54w%CED65S(Tc z)lk7=bv2*h#*%M?esl60YprZB#-wCO#V~OCjh-*jUcPd4MnUuzI{y2>p}eVRLCYpJ zUGJUinvPd@4y$h@4tas*2)}Zl${3}f=iUkh)vT3&)m2R>W~?e5SibC+yZyp+^B>f2 zw4c&~hmUFdkG3GocD3k=!dW>Ki(9wRiI#AgFI74jkR8?Ns|5VCdp$1&<$r#b47v2- z9(yEQ@23^1mT^@jS%A!*8hN!Qy4q@3uS-V|Gl(7Rk<($#hHna0qfA%sHfp;MA5eS* z@4u+x#+%L2&|Ze^%=K&sm;}G&oVY+1w7RoMzTI8C}z!e({Ir)taR(h4p9idV|kCeB1+`Vwj8HT1M%Wb{-r?7@ghpH}`gTG`TXXAZbdbpYk$ z;}m|DX~0ZLq^0->V@i9gyfgScx4%lIaA%KQk)C3 zigOtAs+2jWVYo^t3zW`F;3y8>iIrN6(2GyvN2*HM$3=m2+5JKAXeaqXSLPRm0{Gqn zeP1;1Av`B(45*C6BLi%3{JvGyTqS_Np6X62_>{UHGhWLIy~bPItP@@mMn^F<9$Lvr z{AYEYRbXM`L#E^e7mZFkJQP>iF&rbMQ)d<*rEH&NaiPxc#J}lT?}gDX7TM@+Fb{|k zB}W1f8f;E++UD2CYH+26T5o8+E9>?E1T)$1MAEZugo|~VHHmcoRZz<(AWxjfz zS?EPiGf9J6AjiZZr?*KhDXFnu*Me|tHj{SKpTh$`DTWIFIc=Pv>-4c|+w(jZWRYjJ zEF#!Fm*ibmYtS)pKTB!&eymdU8RVGSlwt@rQXQEVo@N>f#P)&m0CqgSD@0S-$R1So z(te2_A3rpH(h#YTy21~wkLB94ZrzBR)_<4S)adj5I-khdP(wjUFUElHym&P|@Wnst zRKMs*F^Up%o$xqlF6WR;8)nw$tQLIlm~~^DU*40lZqm}dVoO}vpSWm#v@mpJH4tO1 zjn4U1yGGu-BH5>E<0XHDBd4@{`ws0NZza)vlGpm&CGNds3VzZ2zI>CNFpccWWC7hD^(}@XaG^*A{V8SUXYkD@*3)5_ z5IBUV>p}iPmAV0~l!(gS$&y`ce&0NdQ2llY>$^{%WQOr==3}swsfd^3T}T+BR+AfS&&-p-m|BE zr0;g+SJ|ziKVyr#{nqV&xD9mmXyt4fDWnT}_$F)Dz66EOpn{RAGXG_9Oo8Zlmh8!1 z+FrfV%`??rSm`u{+-7{jKFmOaxu!u9+N_Q+1 z6imf|n>TfB_(o^pQ5kYP<{`!XIW6s|t_J{s!mhSljWo(W*|wvuTG(KM&Gzym^P!6< zc1HbJ37qDhs^o>fte+k^u@Gy?=S@pla};~Nd>OIfzE%qbG&mZN% z*3DLVCr)4K-50^nh-vfA9&ZcLxLtZ54Gb{HuRfFS(Q8tZ#;ZuoEJvPKZLp*j8vGqs}o{1fq$a2GLlLeNE~yVsd`ULblxs z=y|`_yTnaDRqoHwa0m+U@tQieny9O!wh8n>y=e>-cTGH_?tTD{)*w_2c*BQ+&^r|S zy>EWN&T1L_)27y!G#u=)yE77Ku6@QJzy{(DyEAt6!om3)w2y=HEP%(N$0r}hAo*p| ztz9}bUw+$Q`j3L(02Zb`Cpk*;UZj=fo%~KPNi&mW{MG>U^r2xauG6B}_HRo3n(mD1 zT2*)6EYi=Sl8R)N|asP4~)648R=N+z!j+Zhl(J)fO=Mvg))IXtRY{1&7+0TtxCc4<=H1Y06tx^*| z__EUJkUw0M6(m~;oUAGj+zUe$mF{QN%{~*>v$bzU#Tk@hs#5sz zHDBcQz@A`Iq1j;lpo9;#2uBt9?C8B!=&P!NjnGmV0luWW&lrYNxWj3*Ln-J%+rbrD zLkn8YMz-hO)w|8jnmt8t{IN1T5K8?lODit6`W$9=ngftm+mPC!SbUaG%{$9!LMkU} z-44sF7!|raT0LHkO-G#?>U*roYOpK)@1RQn<}SPKqm9m$hHLPlbn`C-unK#2A`c1C zhGnerCLv+TY%>k681Jja_I|aeolK{XoFqncV%4k$K2oER59(eP;# z=HwOP<;9jv=^C_QXeN&bjq&>JW-Xs8tr-o>kR0=!1xE)mkR*d?BP7z0`17ER_ZUPi zxH6bT0)=32YdF{FQ?Wg4`W+FBsHL$av%vz*W_p-`?l@Odxn{cu>6j&m3;!?oVShZBgPHjo=pi)bI3Ks$V;*;U{npvnk!2H`B zYf9w9YW5?zICm^fcu=%oG@?kKg2`A|-udTnZa^W>*!nmvH=28pszEwJq$*Izc47)K zeS>p`oMJ!f)UFr_R|VlB;tVek9;3B|G=~^A#S@#qsIFuOf$#t}Q8*R6wtpump>TBy za}PcvJy}l8niFH(%%1;_m#u<49fuU$$#8mq0e(VAKrlWu^C+H-<}7KNxqOAu_p`a> z2=g;ARCF3Fm8>mRYC-!SFlqb!{`Fx3iCJFMq)FXqc7k#pa^zDGtq<+Fr>~%c5#!rb zU|@6-FB5g-R)GkMeaUkCG?CNYpDssjBMcYJn@wZbJG$9lTHcRun3ct?03mN+GLL1| z7N?_&QU06jw-_ecZ^~mJmVCvK8s3dJZY#pqLTv$j6|umjM*xM@q`Bfh-v!Bfm&oz2 zY$^^k2@C)+Q7J?wG6ogQO&vS=O;jCa34dE|NvkF2Jq(CiM^-^bcwsU5U}wzDwB%nG zq^Z(a

d^?oSVdX@oNEfgx^6% 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 + + -

+ + + + + +
+
+ + +
+ +
+ + + + + + + + + + + +
+
+ + + + + + + + + + + +
+
+
+ +

+ {{ pageName }} 🧭 +

+ +
+ + +
+
+ + +
+
+
+
+
+
diff --git a/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/SiteTreeBuilder/WireframesUi/wireframe-renderer.component.scss b/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/SiteTreeBuilder/WireframesUi/wireframe-renderer.component.scss index c11de29..9e84084 100644 --- a/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/SiteTreeBuilder/WireframesUi/wireframe-renderer.component.scss +++ b/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/SiteTreeBuilder/WireframesUi/wireframe-renderer.component.scss @@ -64,3 +64,29 @@ border-radius: 6px; background: #fff; } + + +.editable-html:focus { + outline: 2px solid #007bff; + background: #fcfcfc; +} +.navbar-popup-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0,0,0,0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 9999; +} + +.navbar-popup-content { + background: white; + padding: 20px; + width: 500px; + max-width: 90%; + border-radius: 8px; +} diff --git a/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/SiteTreeBuilder/WireframesUi/wireframe-renderer.component.ts b/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/SiteTreeBuilder/WireframesUi/wireframe-renderer.component.ts index 9cf5201..9c52b0a 100644 --- a/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/SiteTreeBuilder/WireframesUi/wireframe-renderer.component.ts +++ b/visaproject-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/SiteTreeBuilder/WireframesUi/wireframe-renderer.component.ts @@ -5,24 +5,31 @@ import { ActivatedRoute } from '@angular/router'; import { SiteTreeservice } from '../SiteBuilderGrid/SiteTree.service'; import { COMMON_CSS } from './common-css'; import { ToastrService } from 'ngx-toastr'; +import * as sha256 from 'crypto-js/sha256'; +import SHA256 from 'crypto-js/sha256'; +import { trigger, transition, style, animate, state } from '@angular/animations'; +// Make sure path is correct + @Component({ selector: 'app-wireframe-renderer', templateUrl: './wireframe-renderer.component.html', - styleUrls: ['./wireframe-renderer.component.scss'] + styleUrls: ['./wireframe-renderer.component.scss'], }) + + export class WireframeRendererComponent implements OnInit { @Input() node: any; @Input() title: string = ''; commonCss: string = COMMON_CSS; - - - jsonInput = ''; initialPrompt = ''; - id: number; + allPagePrompts: Record> = {}; + initialGeneratedPrompts: Record> = {}; + promptHashCache: Record = {}; + pageSections: Record = {}; constructor( @@ -30,9 +37,6 @@ export class WireframeRendererComponent implements OnInit { private route: ActivatedRoute, private sanitizer: DomSanitizer, private toastr: ToastrService, - - - ) { } ngOnInit(): void { @@ -42,6 +46,7 @@ export class WireframeRendererComponent implements OnInit { this.fetchTreeById(this.id); } + // wireframe-renderer.component.ts (add this helper method) getKeys(obj: any): string[] { return Object.keys(obj || {}); @@ -78,14 +83,9 @@ export class WireframeRendererComponent implements OnInit { } }); } + // all prompt in one map - allPagePrompts: Record> = {}; - initialGeneratedPrompts: Record> = {}; - - - // Recursively walk the tree and generate prompts for each section - // Step 2 async generatePromptsForAllSections(treeJsonString: string) { try { @@ -98,14 +98,14 @@ export class WireframeRendererComponent implements OnInit { } // Step 3 - async processPages(treeJson: any) { + pageRenderOrder: string[] = []; // 🚀 New array to hold correct page order + async processPages(treeJson: any) { console.log('tree is : ', treeJson) for (const [pageName, sections] of Object.entries(treeJson)) { - + this.pageRenderOrder.push(pageName); // ✅ Track the order of pages // child page prompt map const sectionPrompts: Record = {}; - if (sections['Children']) { // 👇 Recursively handle child pages console.log(' child is : ', sections['Children']) @@ -113,7 +113,6 @@ export class WireframeRendererComponent implements OnInit { await this.processPages(sections['Children']); // ✅ Fix: recursive + awaited } - // Loop other sections for (const [sectionName, sectionDescription] of Object.entries(sections)) { @@ -123,9 +122,6 @@ export class WireframeRendererComponent implements OnInit { const prompt = await this.generatePromptFromSection(sectionName, sectionDescription); // ✅ await sectionPrompts[sectionName] = prompt; - - // console.log( sectionName, ': ', prompt) - } // 🧠 Store all prompts for that page @@ -133,7 +129,6 @@ export class WireframeRendererComponent implements OnInit { this.initialGeneratedPrompts[pageName] = JSON.parse(JSON.stringify(sectionPrompts)); // Deep clone } - console.log('✅ FINAL PROMPT MAP:', this.allPagePrompts); await this.processAllPagesLiveUpdate() @@ -174,124 +169,120 @@ HTML Only. No CSS. ✅ Use placeholders for image/icon blocks where appropriate (e.g.,
)`; - // Step 4 + async generatePromptFromSection( sectionName: string, sectionDescription: string, headerId: number = 35, - operationType: string = 'template 1', + operationType: string = 'template 1' ): Promise { return new Promise((resolve) => { - // const fieldType = sectionName.toLowerCase().replace(/\s+/g, '').replace(/section$/, '').trim(); - const fieldType = sectionName - .toLowerCase() - .replace(/section$/i, '') // remove trailing 'section' - .replace(/\s{2,}/g, ' ') // multiple spaces to single space - .trim(); // trim leading/trailing spaces + const fieldType = sectionName.toLowerCase().replace(/section$/i, '').trim(); this.siteTreeService.getDlf(headerId, operationType, fieldType).subscribe({ next: async (res) => { try { const jsonBlock = res?.javacode; + if (!jsonBlock) return resolve('{}'); - // console.log( fieldType , ' json is : ', jsonBlock) + const baseJson = typeof jsonBlock === 'string' ? JSON.parse(jsonBlock) : jsonBlock; + const baseJsonString = JSON.stringify(baseJson, null, 2); - if (jsonBlock) { - const parsedJson = typeof jsonBlock === 'string' ? JSON.parse(jsonBlock) : jsonBlock; + const enhancedPrompt = ` + 🎯 Enhance the content of this section using the following context. + + 🧠 Instructions: + - You are given an existing JSON structure for a UI section. + - Your job is to update ONLY the content-related fields like "text", "title", "label", "description", and "placeholder". + - You must NOT change the structure, hierarchy, tags, keys, class names, or styling values. + - You must NOT add or remove any keys or elements. + - You must return ONLY the updated JSON structure in valid format. + + 📄 Page Prompt: + "${this.initialPrompt}" + + 📦 Section Name: + "${sectionName}" + + 📘 Section Description: + "${sectionDescription}" + + 📌 Existing JSON (modify this only): + ${baseJsonString} + + 🚫 Do NOT include: + - Any explanation, commentary, or markdown + - Any prefix like "Here is the updated JSON" + - Any new elements that were not already present + + ✅ Output Requirement: + Only return the updated JSON structure — nothing else. + `; - // const updatedJson = this.replaceContentRecursively(parsedJson, sectionDescription); - const finalJsonString = JSON.stringify(parsedJson, null, 2); - // 🧠 Build prompt to LLM with section info + json + full page prompt - const enhancedPrompt = ` -📘 You are an intelligent layout enhancer. -Your task is to update and fill in the values of a given UI section JSON based on the following information: + const hash = sha256(enhancedPrompt).toString(); -- Page-level prompt: "${this.initialPrompt || ''}" -- Section name: "${sectionName}" -- Section description: "${sectionDescription}" - -You must only update relevant values like "title", "text", "description", "label", "placeholder", etc. - -⚠️ DO NOT change the structure. Only update content values. - -JSON: -${finalJsonString} - -✅ Return only the updated JSON. Do not return any explanation. -`; - - // console.log('enhanced query ', enhancedPrompt); - - // const finalJson = await this.calLlm(enhancedPrompt); - resolve(finalJsonString); - } else { - resolve('{}'); + if (this.promptHashCache[hash]) { + return resolve(this.promptHashCache[hash]); } + + // const enhanced = await this.callLlm(enhancedPrompt); + // this.promptHashCache[hash] = enhanced; + + resolve(baseJsonString); } catch (err) { console.error('❌ JSON parse error:', err); resolve('{}'); } }, - error: (err) => { - console.error('❌ API error:', err); - resolve('{}'); - } + error: () => resolve('{}') }); }); } + cachedPromptHashes: Record> = {}; + sectionHtmls: Record> = {}; + + // Step 1 - Generate SHA-256 Hash + + getPromptHash(prompt: string): string { + return SHA256(prompt).toString(); + } + + + // Step 2 - Enhance per section with Hash Check + LLM call in Parallel + + async processAllPagesLiveUpdate() { + const htmlGenerationTasks: Promise[] = []; + + for (const [pageName, sectionMap] of Object.entries(this.allPagePrompts)) { + htmlGenerationTasks.push(this.processPageSections(pageName, sectionMap)); + } + + await Promise.all(htmlGenerationTasks); + } + + async processPageSections(pageName: string, sectionMap: Record) { + const sectionHtmls: string[] = []; + + const htmlTasks = Object.entries(sectionMap).map(async ([sectionName, jsonPrompt]) => { + const html = await this.generateJson({ sectionType: sectionName, jsonStructure: jsonPrompt }); + sectionHtmls.push(html); + }); + + await Promise.all(htmlTasks); + + const finalHtml = `\n${sectionHtmls.join('\n')}`; + const safeHtml = this.sanitizer.bypassSecurityTrustHtml(finalHtml); + + this.pageSections[pageName] = { FullPage: safeHtml }; + } - // replaceContentRecursively(obj: any, replacement: string): any { - // if (Array.isArray(obj)) { - // return obj.map(item => this.replaceContentRecursively(item, replacement)); - // } else if (typeof obj === 'object' && obj !== null) { - // const updated = {}; - // for (const [key, value] of Object.entries(obj)) { - // // Replace specific fields if they are strings - // if (['description', 'text', 'label', 'title', 'subtext'].includes(key.toLowerCase()) && typeof value === 'string') { - // updated[key] = replacement; - // } else { - // updated[key] = this.replaceContentRecursively(value, replacement); - // } - // } - // return updated; - // } - // return obj; - // } pageHtmlMap: Record = {}; generatedPages: { name: string, html: string }[] = []; - pageSections: Record = {}; // final UI map - - // Step 5 - generate html code via java Api through prompt - async processAllPagesLiveUpdate() { - for (const [pageName, sectionMap] of Object.entries(this.allPagePrompts)) { - const sectionHtmls: string[] = []; - - for (const [sectionName, promptText] of Object.entries(sectionMap)) { - console.log(`🚀 Generating HTML for: ${pageName} > ${sectionName}`); - - const response = await this.generateJson({ sectionType: sectionName, jsonStructure: promptText }); - const html = response || '⚠️ No response received.'; - - sectionHtmls.push(html); - } - - // ✅ Inject common CSS once per page - const htmlWithCss = ` - - ${sectionHtmls.join('\n')}`; - - // ✅ Bypass Angular sanitizer - const safeHtml: SafeHtml = this.sanitizer.bypassSecurityTrustHtml(htmlWithCss); - - this.pageSections[pageName] = { FullPage: safeHtml }; - } - } - // Step 6 async generateJson(data: { jsonStructure: any, sectionType: string }): Promise { return new Promise((resolve) => { @@ -310,7 +301,7 @@ ${finalJsonString} this.siteTreeService.generateHtml(payload).subscribe({ next: (res) => { - console.log('✅ Response from HTML API:', res); + console.log('✅ Response from HTML API ', payload.sectionType, ' : ', res); if (res && res.msg) { resolve(res.msg); } else { @@ -318,12 +309,12 @@ ${finalJsonString} } }, error: (err) => { - console.error('❌ HTML API Error:', err); + console.error(payload.sectionType, '❌ HTML API Error:', err); resolve('⚠️ HTML API call failed.'); } }); } catch (err) { - console.error('❌ JSON parsing error before sending to API:', err); + console.error(data.sectionType, '❌ JSON parsing error before sending to API:', err); resolve('⚠️ Invalid JSON structure.'); } }); @@ -469,7 +460,7 @@ ${finalJsonString} // // Step 6 - async calLlm(data): Promise { + async callLlm(data): Promise { return new Promise((resolve, reject) => { console.log('call Llm Start ') const payload = { @@ -492,6 +483,337 @@ ${finalJsonString} }); } + activeEditTarget: string | null = null; + liveStyles = { + background: '', + color: '', + fontSize: '', + padding: '', + margin: '', + fontWeight: '', + textAlign: '', + }; + + selectEditable(pageName: string) { + this.activeEditTarget = pageName; + } + + applyLiveStyles() { + const target = document.querySelector(`[data-target='${this.activeEditTarget}']`) as HTMLElement; + if (target) { + Object.keys(this.liveStyles).forEach((prop) => { + if (this.liveStyles[prop]) { + target.style[prop] = this.liveStyles[prop]; + } + }); + } + this.toastr.success(`🎨 Style updated for: ${this.activeEditTarget}`); + } + + // 🔁 Track raw edits + rawEdits: Record = {}; + + + + selectedElementSelector = ''; + styleMap: Record = { + 'hero-header': { 'background': '#fdfdfd', 'text-align': 'center' }, + 'btn-filled': { 'background': '#000', 'color': '#fff' }, + 'hero-heading': { 'font-size': '36px', 'font-weight': 'bold' }, + // Add all classes you want to allow editing + }; + + getAllCssSelectors(): string[] { + return Object.keys(this.styleMap); + } + + + applyCssFromMap() { + this.updateLiveStyles(); + } + + updateLiveStyles() { + const styleSheetId = 'dynamic-css-style'; + let styleEl = document.getElementById(styleSheetId) as HTMLStyleElement; + + if (!styleEl) { + styleEl = document.createElement('style'); + styleEl.id = styleSheetId; + document.head.appendChild(styleEl); + } + + let css = ''; + for (const selector in this.styleMap) { + css += `.${selector} {`; + for (const prop in this.styleMap[selector]) { + css += `${prop}: ${this.styleMap[selector][prop]};`; + } + css += '}'; + } + + styleEl.innerHTML = css; + } + + onEdit(pageName: string, event: any) { + const newHtml = event.target.innerHTML; + this.pageSections[pageName]['FullPage'] = this.sanitizer.bypassSecurityTrustHtml(newHtml); + } + + applyStyleToSelection() { + const selection = window.getSelection(); + if (!selection || selection.rangeCount === 0) return; + + const range = selection.getRangeAt(0); + const selectedText = range.extractContents(); + + const span = document.createElement('span'); + + // Apply styles + if (this.liveStyles.color) span.style.color = this.liveStyles.color; + if (this.liveStyles.background) span.style.backgroundColor = this.liveStyles.background; + if (this.liveStyles.fontSize) span.style.fontSize = this.liveStyles.fontSize; + if (this.liveStyles.fontWeight) span.style.fontWeight = this.liveStyles.fontWeight; + if (this.liveStyles.textAlign) span.style.textAlign = this.liveStyles.textAlign; + span.appendChild(selectedText); + + range.insertNode(span); + selection.removeAllRanges(); + } + + // new today 25 april + // New Variables + selectedNavbarPage: string = ''; + navbarLinks: Record = {}; + availablePages: { label: string, href: string }[] = []; + + // Select Navbar Section + selectNavbar(pageName: string) { + const html = this.pageSections[pageName]['FullPage']?.toString() || ''; + + if (html.includes('class="nav-1"') || html.includes('navbar')) { + this.selectedNavbarPage = pageName; + this.extractNavbarLinks(pageName, html); + } else { + alert('No Navbar found on this page.'); + } + } + + // Extract links from navbar HTML + extractNavbarLinks(pageName: string, html: string) { + const tempDiv = document.createElement('div'); + tempDiv.innerHTML = html; + + const navLinks = Array.from(tempDiv.querySelectorAll('.nav-1 li a')); + this.navbarLinks[pageName] = navLinks.map(link => ({ + label: link.textContent?.trim() || '', + href: link.getAttribute('href') || '#' + })); + + // Also prepare available pages list + this.availablePages = Object.keys(this.pageSections).map(p => ({ + label: p, + href: `${p.replace(/\s+/g, '-').toLowerCase()}.html` + })); + } + + // Add new link + addLink(pageName: string) { + this.navbarLinks[pageName].push({ label: '', href: '#' }); + } + + // Remove a link + removeLink(pageName: string, index: number) { + this.navbarLinks[pageName].splice(index, 1); + } + + // Apply Changes to navbar + applyNavbarChanges(pageName: string) { + const links = this.navbarLinks[pageName] || []; + + const html = this.pageSections[pageName]?.FullPage?.toString() || ''; + if (!html) return; + + // Build new