site builder

This commit is contained in:
string 2025-04-11 09:12:51 +05:30
parent 06622acac7
commit 8cc5739cfd
17 changed files with 1270 additions and 1192 deletions

View File

@ -8,14 +8,21 @@
</div>
<div class="clr-col-4" style="text-align: right;">
<button *ngIf="cardButton" id="add" class="btn btn-primary btn-icon" (click)="changeView()">
<clr-icon *ngIf="!isCardview" shape="grid-view"></clr-icon> <clr-icon *ngIf="isCardview" shape="bars"></clr-icon>
<clr-icon *ngIf="!isCardview" shape="grid-view"></clr-icon> <clr-icon *ngIf="isCardview"
shape="bars"></clr-icon>
</button>
<!-- button -->
<button id="add" class="btn btn-primary" (click)="goToAdd(product)">
<clr-icon shape="plus"></clr-icon>ADD
</button>
</div></div>
<ng-container *ngIf="!isCardview"> <!-- GET ALL --> <clr-datagrid [clrDgLoading]="loading" [(clrDgSelected)]="selected">
<button id="add" class="btn btn-primary" (click)="gotositebuilder()">
<clr-icon shape="plus"></clr-icon>SiteBuilder
</button>
</div>
</div>
<ng-container *ngIf="!isCardview"> <!-- GET ALL --> <clr-datagrid [clrDgLoading]="loading"
[(clrDgSelected)]="selected">
<clr-dg-placeholder>
<ng-template #loadingSpinner>
<clr-spinner>Loading ... </clr-spinner>
@ -35,35 +42,43 @@
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' visa_entry_type'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Visa Entry Type
<clr-dg-column [clrDgField]="' visa_entry_type'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Visa Entry
Type
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' visa_duration'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Visa Duration
<clr-dg-column [clrDgField]="' visa_duration'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Visa
Duration
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' visa_processing'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Visa Processing
<clr-dg-column [clrDgField]="' visa_processing'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Visa
Processing
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' travel_start_date'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Travel start date
<clr-dg-column [clrDgField]="' travel_start_date'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Travel
start date
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' travel_end_date'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Travel end date
<clr-dg-column [clrDgField]="' travel_end_date'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Travel end
date
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' passport_number'"> <ng-container *clrDgHideableColumn="{hidden: false}"> passport Number
<clr-dg-column [clrDgField]="' passport_number'"> <ng-container *clrDgHideableColumn="{hidden: false}"> passport
Number
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' passport_issue_date'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Passport issue date
<clr-dg-column [clrDgField]="' passport_issue_date'"> <ng-container *clrDgHideableColumn="{hidden: false}">
Passport issue date
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' passport_expiry_date'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Passport expiry date
<clr-dg-column [clrDgField]="' passport_expiry_date'"> <ng-container *clrDgHideableColumn="{hidden: false}">
Passport expiry date
</ng-container></clr-dg-column>
@ -79,7 +94,8 @@
</ng-container></clr-dg-column>
<clr-dg-column [clrDgField]="' date_of_birth'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Date of Birth
<clr-dg-column [clrDgField]="' date_of_birth'"> <ng-container *clrDgHideableColumn="{hidden: false}"> Date of
Birth
</ng-container></clr-dg-column>
@ -122,7 +138,8 @@
<clr-dg-cell>{{user. name }}</clr-dg-cell>
<clr-dg-cell (click)="goToReplaceStringdescription (user.description)" style="cursor: pointer; align-items: center;"><clr-icon shape="details"></clr-icon>
<clr-dg-cell (click)="goToReplaceStringdescription (user.description)"
style="cursor: pointer; align-items: center;"><clr-icon shape="details"></clr-icon>
</clr-dg-cell>
@ -189,7 +206,8 @@
<!-- who column -->
<clr-dg-cell>
<clr-signpost>
<span style="cursor: pointer;" clrSignpostTrigger><clr-icon shape="help" class="success" style="color: rgb(0, 130, 236);"></clr-icon></span>
<span style="cursor: pointer;" clrSignpostTrigger><clr-icon shape="help" class="success"
style="color: rgb(0, 130, 236);"></clr-icon></span>
<clr-signpost-content [clrPosition]="'left-middle'" *clrIfOpen>
<h5 style="margin-top: 0">Who Column</h5>
<div>Account ID: <code class="clr-code">{{user.accountId}}</code></div>
@ -233,11 +251,13 @@
<div *ngFor="let app of product| filter:search; let index = i" class="clr-col-auto">
<div class="clr-row">
<div class="clr-col-lg-12 clr-col-md-4 clr-col-sm-4 clr-col-12" style="width: 410px;">
<div class="card" style="padding: 10px; "[style.background-color]="cardmodal.cardColor !== '' ? cardmodal.cardColor : 'white'">
<div class="card-body" style="display: grid; grid-template-columns: repeat(13, 1fr); grid-template-rows: repeat(7, 1fr); gap: 5px;">
<div class="card" style="padding: 10px; "
[style.background-color]="cardmodal.cardColor !== '' ? cardmodal.cardColor : 'white'">
<div class="card-body"
style="display: grid; grid-template-columns: repeat(13, 1fr); grid-template-rows: repeat(7, 1fr); gap: 5px;">
<ng-container *ngFor="let item of dashboardArray">
<div [style.gridColumn]="item.x + 1" [style.gridRow]="item.y + 1" [style.gridColumnEnd]="item.x + item.cols + 1"
[style.gridRowEnd]="item.y + item.rows + 1">
<div [style.gridColumn]="item.x + 1" [style.gridRow]="item.y + 1"
[style.gridColumnEnd]="item.x + item.cols + 1" [style.gridRowEnd]="item.y + item.rows + 1">
<div *ngIf="item.name === 'textField'" class="title-card card-title"
[style.text-align]="item.alignment !== '' ? item.alignment : 'left'"
[style.line-height]="item.textlineheight !== '' ? item.textlineheight : '1'"
@ -247,7 +267,8 @@
[style.font-weight]="item.bold == true ? 'bold' : 'normal'" [style.text-decoration]="(item.underline && item.strikethough) ? 'underline line-through' :
(item.underline ? 'underline' : (item.strikethough ? 'line-through' : 'none'))"
[style.background-color]="item.backgroundcolor !== '' ? item.backgroundcolor : 'white'"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'" [style.background-color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditionbackgroundcolor : item.backgroundcolor"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'"
[style.background-color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditionbackgroundcolor : item.backgroundcolor"
[style.color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditiontextcolor : item.textcolor">
{{beforeText(item.fieldtext)}}
{{ app[transform(item.fieldtext) ] }}
@ -263,7 +284,8 @@
[style.font-weight]="item.bold == true ? 'bold' : 'normal'" [style.text-decoration]="(item.underline && item.strikethough) ? 'underline line-through' :
(item.underline ? 'underline' : (item.strikethough ? 'line-through' : 'none'))"
[style.background-color]="item.backgroundcolor !== '' ? item.backgroundcolor : 'white'"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'" [style.background-color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditionbackgroundcolor : item.backgroundcolor"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'"
[style.background-color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditionbackgroundcolor : item.backgroundcolor"
[style.color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditiontextcolor : item.textcolor">
{{beforeText(item.fieldtext)}}
{{ app[transform(item.fieldtext) ] | date}}
@ -278,7 +300,8 @@
[style.font-weight]="item.bold == true ? 'bold' : 'normal'" [style.text-decoration]="(item.underline && item.strikethough) ? 'underline line-through' :
(item.underline ? 'underline' : (item.strikethough ? 'line-through' : 'none'))"
[style.background-color]="item.backgroundcolor !== '' ? item.backgroundcolor : 'white'"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'" [style.background-color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditionbackgroundcolor : item.backgroundcolor"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'"
[style.background-color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditionbackgroundcolor : item.backgroundcolor"
[style.color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditiontextcolor : item.textcolor">
{{beforeText(item.fieldtext)}}
{{ app[transform(item.fieldtext) ]}}
@ -308,8 +331,7 @@
[style.font-weight]="item.bold == true ? 'bold' : 'normal'" [style.text-decoration]="(item.underline && item.strikethough) ? 'underline line-through' :
(item.underline ? 'underline' : (item.strikethough ? 'line-through' : 'none'))"
[style.background-color]="item.backgroundcolor !== '' ? item.backgroundcolor : 'white'"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'"
>
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'">
<clr-icon [attr.shape]="item.iconName"></clr-icon>
</div>
@ -324,7 +346,8 @@
[style.background-color]="item.backgroundcolor !== '' ? item.backgroundcolor : 'white'"
[style.color]="item.textcolor !== '' ? item.textcolor : 'black'"
[style.background-color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditionbackgroundcolor : item.backgroundcolor"
[style.color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditiontextcolor : item.textcolor"> <img id="filePreview" [src]="item.imageURL" alt="File Preview"
[style.color]="item.conditionValue == app[transform(item.fieldtext) ] ? item.conditiontextcolor : item.textcolor">
<img id="filePreview" [src]="item.imageURL" alt="File Preview"
[style.width]="item.imagewidth !== '' ? item.imagewidth + 'px' : '100px'"
[style.height]="item.imagewidth !== '' ? item.imagewidth + 'px' : '100px'"></div>
</div>
@ -343,7 +366,8 @@
<clr-modal [(clrModalOpen)]="rsModaldescription" [clrModalSize]="'xl'" [clrModalStaticBackdrop]="true">
<div class="modal-body">
<textarea class="form-control" style="width:100%; height: 400px;" readonly>{{rowSelected}}</textarea>
</div></clr-modal>
</div>
</clr-modal>
@ -444,12 +468,14 @@
<div class="clr-col-sm-12">
<label> Description</label>
<textarea cols="10" rows="2"[(ngModel)]="rowSelected.description" name="description " placeholder="Textarea"> </textarea>
<textarea cols="10" rows="2" [(ngModel)]="rowSelected.description" name="description "
placeholder="Textarea"> </textarea>
</div>
<div class="clr-col-sm-12">
<label> Active</label>
<input type="checkbox" name="active" clrToggle [(ngModel)]="rowSelected.active" /> </div>
<input type="checkbox" name="active" clrToggle [(ngModel)]="rowSelected.active" />
</div>
@ -457,7 +483,9 @@
<label>Visa Entry Type</label>
<select name="visa_entry_type" [(ngModel)]="rowSelected.visa_entry_type">
<option [value]="null">Choose visa_entry_type</option>
<option *ngFor=" let item of selectvisa_entry_type" [value]="item.id">{{item.name }}</option> </select> </div>
<option *ngFor=" let item of selectvisa_entry_type" [value]="item.id">{{item.name }}</option>
</select>
</div>
@ -467,7 +495,9 @@
<label>Visa Duration</label>
<select name="visa_duration" [(ngModel)]="rowSelected.visa_duration">
<option [value]="null">Choose visa_duration</option>
<option *ngFor=" let item of selectvisa_duration" [value]="item.id">{{item.name }}</option> </select> </div>
<option *ngFor=" let item of selectvisa_duration" [value]="item.id">{{item.name }}</option>
</select>
</div>
@ -477,49 +507,59 @@
<label>Visa Processing</label>
<select name="visa_processing" [(ngModel)]="rowSelected.visa_processing">
<option [value]="null">Choose visa_processing</option>
<option *ngFor=" let item of selectvisa_processing" [value]="item.id">{{item.name }}</option> </select> </div>
<option *ngFor=" let item of selectvisa_processing" [value]="item.id">{{item.name }}</option>
</select>
</div>
<div class="clr-col-sm-12">
<label>Travel start date</label>
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.travel_start_date" name="travel_start_date" />
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.travel_start_date"
name="travel_start_date" />
</div>
<div class="clr-col-sm-12">
<label>Travel end date</label>
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.travel_end_date" name="travel_end_date" />
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.travel_end_date"
name="travel_end_date" />
</div>
<div class="clr-col-sm-12">
<label>passport Number</label>
<input id="name" class="clr-input" type="number" [(ngModel)]="rowSelected.passport_number" name="passport_number" />
<input id="name" class="clr-input" type="number" [(ngModel)]="rowSelected.passport_number"
name="passport_number" />
</div>
<div class="clr-col-sm-12">
<label>Passport issue date</label>
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.passport_issue_date" name="passport_issue_date" />
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.passport_issue_date"
name="passport_issue_date" />
</div>
<div class="clr-col-sm-12">
<label>Passport expiry date</label>
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.passport_expiry_date" name="passport_expiry_date" />
<input id="name" class="clr-input" type="date" [(ngModel)]="rowSelected.passport_expiry_date"
name="passport_expiry_date" />
</div>
<div class="clr-col-sm-12">
<label> Email</label>
<input id="name" class="clr-input" type="email"
[(ngModel)]="rowSelected.email " name="email" pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$">
<input id="name" class="clr-input" type="email" [(ngModel)]="rowSelected.email " name="email"
pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$">
<div *ngIf="rowSelected.email && !isValidemail(rowSelected.email )" class="error_mess">
* Email must be a valid email address.
</div> </div>
</div>
</div>
<div class="clr-col-sm-12">
<label> Phone Number</label>
<input id="name" class="clr-input" type="Text" [(ngModel)]="rowSelected.phone_number " name="phone_number" pattern="((\\+)?([1-9]{2}))?[1-9]{1}[0-9]{9}$" />
<input id="name" class="clr-input" type="Text" [(ngModel)]="rowSelected.phone_number " name="phone_number"
pattern="((\\+)?([1-9]{2}))?[1-9]{1}[0-9]{9}$" />
<div *ngIf="rowSelected.phone_number && !isValidPhone_number(rowSelected.phone_number)" class="error_mess">
* Please Follow your pattern,+91 Enter 10 digit Mobile Number.
</div> </div>
</div>
</div>
<div class="clr-col-sm-12">
<label>Birth Place</label>
@ -537,7 +577,9 @@
<label>Gender</label>
<select name="gender" [(ngModel)]="rowSelected.gender">
<option [value]="null">Choose gender</option>
<option *ngFor=" let item of selectgender" [value]="item.id">{{item.name }}</option> </select> </div>
<option *ngFor=" let item of selectgender" [value]="item.id">{{item.name }}</option>
</select>
</div>
@ -549,7 +591,8 @@
<!-- currency field start -->
<div class="clr-col-sm-12">
<label> Visa cost</label>
<input type="number" class="clr-input" [(ngModel)]="rowSelected.visa_cost" name="visa_cost" (blur)="formatCurrencyvisa_cost()" [value]="rowSelected.visa_cost | removeCommas">
<input type="number" class="clr-input" [(ngModel)]="rowSelected.visa_cost" name="visa_cost"
(blur)="formatCurrencyvisa_cost()" [value]="rowSelected.visa_cost | removeCommas">
</div>
<!-- currency field end -->
@ -559,7 +602,9 @@
<label>Referrer</label>
<select name="referrer" [(ngModel)]="rowSelected.referrer">
<option [value]="null">Choose referrer</option>
<option *ngFor=" let item of selectreferrer" [value]="item.id">{{item.name }}</option> </select> </div>
<option *ngFor=" let item of selectreferrer" [value]="item.id">{{item.name }}</option>
</select>
</div>
@ -569,7 +614,9 @@
<label>Nationality</label>
<select name="nationality" [(ngModel)]="rowSelected.nationality">
<option [value]="null">Choose nationality</option>
<option *ngFor=" let item of selectnationality" [value]="item.id">{{item.name }}</option> </select> </div>
<option *ngFor=" let item of selectnationality" [value]="item.id">{{item.name }}</option>
</select>
</div>
@ -579,7 +626,9 @@
<label>Supplier</label>
<select name="supplier" [(ngModel)]="rowSelected.supplier">
<option [value]="null">Choose supplier</option>
<option *ngFor=" let item of selectsupplier" [value]="item.id">{{item.name }}</option> </select> </div>
<option *ngFor=" let item of selectsupplier" [value]="item.id">{{item.name }}</option>
</select>
</div>
@ -589,52 +638,13 @@
<label>Agent</label>
<select name="agent" [(ngModel)]="rowSelected.agent">
<option [value]="null">Choose agent</option>
<option *ngFor=" let item of selectagent" [value]="item.id">{{item.name }}</option> </select> </div>
<option *ngFor=" let item of selectagent" [value]="item.id">{{item.name }}</option>
</select>
</div>
</div>
@ -647,22 +657,27 @@
<div class="clr-col-4" *ngFor="let field of additionalFieldsFromBackend">
<ng-container *ngIf="field.formCode === formcode" [ngSwitch]="field.fieldType">
<!-- Text Input --> <label *ngSwitchCase="'text'">{{ field.fieldName }}</label>
<input *ngSwitchCase="'text'" [type]="field.fieldType" name="{{ field.extValue }}" [(ngModel)]="rowSelected[field.extValue]" class="clr-input" />
<input *ngSwitchCase="'text'" [type]="field.fieldType" name="{{ field.extValue }}"
[(ngModel)]="rowSelected[field.extValue]" class="clr-input" />
<!-- Date Input --> <label *ngSwitchCase="'date'">{{ field.fieldName }}</label>
<input *ngSwitchCase="'date'" [type]="field.fieldType" name="{{ field.extValue }}" [(ngModel)]="rowSelected[field.extValue]" class="clr-input" />
<input *ngSwitchCase="'date'" [type]="field.fieldType" name="{{ field.extValue }}"
[(ngModel)]="rowSelected[field.extValue]" class="clr-input" />
<!-- Textarea --> <label *ngSwitchCase="'textarea'">{{ field.fieldName }}</label>
<textarea *ngSwitchCase="'textarea'" name="{{ field.extValue }}" [(ngModel)]="rowSelected[field.extValue]" col="10" row="2"></textarea>
<textarea *ngSwitchCase="'textarea'" name="{{ field.extValue }}" [(ngModel)]="rowSelected[field.extValue]"
col="10" row="2"></textarea>
<!-- Checkbox --> <label *ngSwitchCase="'checkbox'">{{ field.fieldName }}</label><br>
<input *ngSwitchCase="'checkbox'" [type]="field.fieldType" name="{{ field.extValue }}" [(ngModel)]="rowSelected[field.extValue]" class="clr-checkbox" />
<input *ngSwitchCase="'checkbox'" [type]="field.fieldType" name="{{ field.extValue }}"
[(ngModel)]="rowSelected[field.extValue]" class="clr-checkbox" />
</ng-container>
</div>
</div>
</div>
<!-- form code end --> <div class="modal-footer">
<!-- form code end -->
<div class="modal-footer">
<button type="button" class="btn btn-outline" (click)="modalEdit = false">Cancel</button>
<button type="submit" class="btn btn-primary" (click)="onUpdate(rowSelected.id)">Update</button>
</div>
@ -728,13 +743,15 @@
<!-- aeroplane icon -->
&nbsp; &nbsp; &nbsp; &nbsp;
<a *ngIf="userrole.includes('ROLE_ADMIN')" style="float: right;" href="javascript:void(0)" role="tooltip" aria-haspopup="true"
class="tooltip tooltip-sm tooltip-bottom-left">
<a id="build_extension" [routerLink]="['../extension/all']" [queryParams]="{ formCode: 'Visa_application_formCode' }">
<a *ngIf="userrole.includes('ROLE_ADMIN')" style="float: right;" href="javascript:void(0)" role="tooltip"
aria-haspopup="true" class="tooltip tooltip-sm tooltip-bottom-left">
<a id="build_extension" [routerLink]="['../extension/all']"
[queryParams]="{ formCode: 'Visa_application_formCode' }">
<clr-icon shape="airplane" size="32"></clr-icon>
</a>
<span class="tooltip-content">Form Extension</span>
</a> </h3>
</a>
</h3>
<div class="modal-body">
<form [formGroup]="entryForm">
<div class="clr-row" style="height: fit-content;">
@ -751,7 +768,8 @@
<div class="clr-col-sm-12">
<label> Active</label>
<input type="checkbox" formControlName="active" clrToggle/> </div>
<input type="checkbox" formControlName="active" clrToggle />
</div>
@ -760,7 +778,8 @@
<select formControlName="visa_entry_type">
<option [value]="null">Choose Visa Entry Type</option>
<option *ngFor="let item of selectvisa_entry_type" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
@ -771,7 +790,8 @@
<select formControlName="visa_duration">
<option [value]="null">Choose Visa Duration</option>
<option *ngFor="let item of selectvisa_duration" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
@ -782,7 +802,8 @@
<select formControlName="visa_processing">
<option [value]="null">Choose Visa Processing</option>
<option *ngFor="let item of selectvisa_processing" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
@ -800,7 +821,8 @@
<label> passport Number</label>
<input class="clr-input" type="number" formControlName="passport_number" />
<div *ngIf="submitted && entryForm.controls.passport_number.errors" class="error_mess">
<div *ngIf="submitted && entryForm.controls.passport_number.errors.required" class="error_mess">*This field is Required</div>
<div *ngIf="submitted && entryForm.controls.passport_number.errors.required" class="error_mess">*This field
is Required</div>
</div>
</div>
@ -816,18 +838,25 @@
<div class="clr-col-sm-12">
<label> Email</label>
<input class="clr-input" type="email" formControlName="email" pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$">
<input class="clr-input" type="email" formControlName="email"
pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$">
<div *ngIf="entryForm.controls['email'].errors" class="error_mess">
<div *ngIf="entryForm.controls['email'].hasError('pattern')" class="error_mess">* Email must be a valid email address
</div> </div>
<div *ngIf="entryForm.controls['email'].hasError('pattern')" class="error_mess">* Email must be a valid
email address
</div>
</div>
</div>
<div class="clr-col-sm-12">
<label> Phone Number</label>
<input class="clr-input" type="text" formControlName="phone_number" pattern="((\+)?([1-9]{2}))?[1-9]{1}[0-9]{9}$" />
<input class="clr-input" type="text" formControlName="phone_number"
pattern="((\+)?([1-9]{2}))?[1-9]{1}[0-9]{9}$" />
<div *ngIf="submitted && entryForm.controls['phone_number'].errors" class="error_mess">
<div *ngIf="submitted && entryForm.controls['phone_number'].hasError('pattern')" class="error_mess">* Please Follow your pattern,+91 Enter 10 digit Mobile Number.
</div> </div> </div>
<div *ngIf="submitted && entryForm.controls['phone_number'].hasError('pattern')" class="error_mess">* Please
Follow your pattern,+91 Enter 10 digit Mobile Number.
</div>
</div>
</div>
<div class="clr-col-sm-12">
<label> Birth Place</label>
@ -846,7 +875,8 @@
<select formControlName="gender">
<option [value]="null">Choose Gender</option>
<option *ngFor="let item of selectgender" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
@ -858,7 +888,8 @@
<!-- currency field start -->
<div class="clr-col-sm-12">
<label> Visa cost</label>
<input type="number" class="clr-input" formControlName="visa_cost" [value]="entryForm.value.visa_cost | number:'1.2-2' | removeCommas">
<input type="number" class="clr-input" formControlName="visa_cost"
[value]="entryForm.value.visa_cost | number:'1.2-2' | removeCommas">
</div>
<!-- currency field end -->
@ -869,7 +900,8 @@
<select formControlName="referrer">
<option [value]="null">Choose Referrer</option>
<option *ngFor="let item of selectreferrer" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
@ -880,7 +912,8 @@
<select formControlName="nationality">
<option [value]="null">Choose Nationality</option>
<option *ngFor="let item of selectnationality" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
@ -891,7 +924,8 @@
<select formControlName="supplier">
<option [value]="null">Choose Supplier</option>
<option *ngFor="let item of selectsupplier" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
@ -902,7 +936,8 @@
<select formControlName="agent">
<option [value]="null">Choose Agent</option>
<option *ngFor="let item of selectagent" [value]="item.id">{{item.name}}</option>
</select> </div>
</select>
</div>
@ -977,7 +1012,8 @@
</div>
</div>
</div>
<!-- form code end --> <div class="modal-footer">
<!-- form code end -->
<div class="modal-footer">
<button type="button" class="btn btn-outline" (click)="modalAdd = false">Cancel</button>
<button type="submit" class="btn btn-primary" (click)="onSubmit()">ADD</button>
</div>

View File

@ -7,6 +7,7 @@ import { ExtensionService } from 'src/app/services/fnd/extension.service';
import { DashboardContentModel2 } from 'src/app/models/builder/dashboard';
import { Visa_applicationcardvariable } from './Visa_application_cardvariable';
import { UserInfoService } from 'src/app/services/user-info.service';
import { Router } from '@angular/router';
declare var JsBarcode: any;
@Component({
selector: 'app-Visa_application',
@ -18,7 +19,9 @@ export class Visa_applicationComponent implements OnInit {
cardmodeldata = Visa_applicationcardvariable.cardmodeldata;
public dashboardArray: DashboardContentModel2[];
isCardview = Visa_applicationcardvariable.cardButton;
cardmodal; changeView() {
cardmodal;
changeView() {
this.isCardview = !this.isCardview;
}
beforeText(fieldtext: string): string { // Extract the text before the first '<'
@ -52,6 +55,8 @@ export class Visa_applicationComponent implements OnInit {
private alertService: AlertService,
private toastr: ToastrService,
private _fb: FormBuilder,
private router: Router,
) { }
// component button
ngOnInit(): void {
@ -214,49 +219,6 @@ export class Visa_applicationComponent implements OnInit {
this.rowSelected = row;
this.modalEdit = true;
}
onDelete(row) {
@ -397,47 +359,6 @@ export class Visa_applicationComponent implements OnInit {
this.mainService.create(this.entryForm.value).subscribe(
(data) => {
console.log(data);
@ -450,47 +371,6 @@ export class Visa_applicationComponent implements OnInit {
}, (error) => {
console.log(error);
if (error.status >= 200 && error.status <= 299) {
@ -509,50 +389,6 @@ export class Visa_applicationComponent implements OnInit {
}
goToAdd(row) {
this.modalAdd = true; this.submitted = false;
}
submitted = false;
onSubmit() {
@ -662,6 +498,11 @@ export class Visa_applicationComponent implements OnInit {
}
// updateaction
gotositebuilder() {
this.router.navigate(["/cns-portal/SiteBuilder"]);
}
}

View File

@ -0,0 +1,44 @@
import { Injectable } from '@angular/core';
import { Observable } from "rxjs";
import { HttpClient, HttpHeaders, HttpParams, } from "@angular/common/http";
import { ApiRequestService } from "src/app/services/api/api-request.service";
import { environment } from 'src/environments/environment';
import baseUrl from 'src/app/services/api/helper';
@Injectable({
providedIn: 'root'
})
export class Referrerservice{
private baseURL = "Referrer/Referrer" ; constructor(
private http: HttpClient,
private apiRequest: ApiRequestService,
) { }
getAll(page?: number, size?: number): Observable<any> {
return this.apiRequest.get(this.baseURL);
}
getById(id: number): Observable<any> {
const _http = this.baseURL + "/" + id;
return this.apiRequest.get(_http);
}
create(data: any): Observable<any> {
return this.apiRequest.post(this.baseURL, data);
}
update(id: number, data: any): Observable<any> {
const _http = this.baseURL + "/" + id;
return this.apiRequest.put(_http, data);
}
delete(id: number): Observable<any> {
const _http = this.baseURL + "/" + id;
return this.apiRequest.delete(_http);
}
downloadCSV(tableName: string): Observable<Blob> {
const url = `${baseUrl}/api/template/download-csv?tableName=${tableName}`;
return this.http.get(url, { responseType: 'blob' })
}// updateaction
}

View File

@ -0,0 +1,4 @@
export const Referrercardvariable = {
"cardButton": false,
"cardmodeldata": ``
}

View File

@ -0,0 +1,30 @@
.node-card {
border: 1px solid #ccc;
padding: 12px;
background: white;
border-radius: 6px;
margin: 8px auto;
width: 300px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.children-container {
display: flex;
flex-direction: column;
align-items: center;
position: relative;
margin-top: 20px;
}
.children {
display: flex;
justify-content: center;
gap: 40px;
}
.connector-line {
position: absolute;
top: -30px;
height: 100px;
width: 100%;
}

View File

@ -0,0 +1,16 @@
<div class="node-card">
<h3>{{ node.title }}</h3>
<div class="section" *ngFor="let sec of getSections(node.data)">
<h4>{{ sec.title }}</h4>
<p>{{ sec.description }}</p>
</div>
</div>
<div class="children-container" *ngIf="getChildren(node.data).length">
<svg class="connector-line">
<path d="M 100 0 C 150 50, 150 50, 200 100" stroke="gray" fill="transparent"/>
</svg>
<div class="children">
<app-tree-node *ngFor="let child of getChildren(node.data)" [node]="child"></app-tree-node>
</div>
</div>

View File

@ -0,0 +1,33 @@
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-tree-node',
templateUrl: './tree-node.component.html',
styleUrls: ['./tree-node.component.css']
})
export class TreeNodeComponent {
@Input() node: any;
getSections(data: any): { title: string, description: string }[] {
const sections: { title: string, description: string }[] = [];
for (const key in data) {
if (key !== 'Children' && typeof data[key] === 'string') {
sections.push({ title: key, description: data[key] });
}
if (key !== 'Children' && Array.isArray(data[key])) {
sections.push({ title: key, description: data[key].join('\n') });
}
}
return sections;
}
getChildren(data: any): any[] {
if (data.Children) {
return Object.keys(data.Children).map((key) => ({
title: key,
data: data.Children[key]
}));
}
return [];
}
}

View File

@ -0,0 +1,30 @@
<!-- <div class="toolbar">
<textarea [(ngModel)]="rawJson" placeholder="Paste your JSON here..."></textarea>
<div class="actions">
<button (click)="convertToTree()">Convert</button>
<button (click)="exportJson()">Export JSON</button>
<input type="file" (change)="importJson($event)" />
</div>
</div>
<div class="tree-container" panZoom>
<ng-container *ngIf="treeData">
<app-tree-node [node]="treeData" [parent]="null"></app-tree-node>
</ng-container>
</div> -->
<!-- 🔽 New textarea for creating JSON -->
<div class="controls">
<textarea [(ngModel)]="rawInputText" placeholder="Write your structure here"></textarea>
<button (click)="generateJson()">Submit</button>
</div>
<div class="controls">
<textarea [(ngModel)]="inputJson" placeholder="Paste your JSON here"></textarea>
<button (click)="convertJson()">Convert</button>
</div>
<div class="tree-container" *ngIf="treeData">
<app-tree-node [node]="treeData"></app-tree-node>
</div>

View File

@ -0,0 +1,29 @@
.controls {
margin-bottom: 20px;
}
.controls textarea {
width: 100%;
height: 200px;
padding: 10px;
font-size: 14px;
font-family: monospace;
border: 1px solid #ccc;
border-radius: 4px;
resize: vertical;
box-sizing: border-box;
margin-bottom: 10px;
}
.controls button {
padding: 10px 20px;
background-color: #1976d2;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
.controls button:hover {
background-color: #1565c0;
}

View File

@ -0,0 +1,108 @@
import { Component } from '@angular/core';
import { treeVisualizerService } from './tree-visualizer.service';
@Component({
selector: 'app-tree-visualizer',
templateUrl: './tree-visualizer.component.html',
styleUrls: ['./tree-visualizer.component.scss']
})
export class TreeVisualizerComponent {
inputJson: string = '';
treeData: any = null;
rawInputText: string = `make a website , where we can login , sign up.
inside that there is a menu of icard where we can add a icard detail iacardname, description
after click this icard inside we upload excel of student data, icard template, after click convert it fetch all data of excel and replace the key value of icard template..`;
constructor(private treeService: treeVisualizerService) { }
convertJson() {
try {
const parsed = JSON.parse(this.inputJson);
const rootKey = Object.keys(parsed)[0];
this.treeData = {
title: rootKey,
data: parsed[rootKey]
};
} catch (e) {
alert('Invalid JSON');
}
}
getSections(data: any): { title: string, description: string }[] {
const sections: { title: string, description: string }[] = [];
for (const key in data) {
if (key !== 'Children' && typeof data[key] === 'string') {
sections.push({ title: key, description: data[key] });
}
if (key !== 'Children' && Array.isArray(data[key])) {
sections.push({ title: key, description: data[key].join('\n') });
}
}
return sections;
}
getChildren(data: any): any[] {
if (data.Children) {
return Object.keys(data.Children).map((key) => ({
title: key,
data: data.Children[key]
}));
}
return [];
}
generateJson() {
const suffix = `
🔁 You are a JSON structure generator for website page hierarchies.
You will return only a JSON object in a strictly hierarchical tree structure. Do not include any explanation, text, or markdown formatting like \`\`\`json — just return pure JSON only.
Each page should be a key. For subpages like "Login", "Projects", or "New Project", nest them under a "Children" key of their parent page.
Each page must include specific sections as keys (like "Navbar", "Header Section", "Feature Section" etc.) with either an empty object {} or a short description as the value.
Do not return any explanation, text, or markdown formatting only return the raw JSON object exactly in this format.
Do not include:
- Any explanation before or after the JSON
- Any markdown formatting like \`\`\` or json
- Any text like "Here is..." or "Please note..."
Output must look like this:
{
"Home": {
"Navbar": {},
"Header Section": "Intro...",
"Children": {
"Login": {
"Navbar": {},
"Header Section": "Login form...",
"Footer": {}
}
}
}
}`;
const payload = {
query: this.rawInputText + suffix,
conversationId: '677'
};
console.log(' query : ', payload.query)
this.treeService.generateJson(payload).subscribe({
next: (res) => {
console.log('response ', res)
if (res && res.responseContent) {
this.inputJson = res.responseContent;
console.log('input json ', this.inputJson)
this.convertJson(); // auto convert after API response
}
},
error: (err) => {
console.error('API Error:', err);
alert('Failed to fetch JSON from API');
}
});
}
}

View File

@ -0,0 +1,27 @@
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from "@angular/common/http";
import { Observable } from "rxjs";
import { ApiRequestService } from 'src/app/services/api/api-request.service';
import { environment } from 'src/environments/environment';
@Injectable({
providedIn: 'root'
})
export class treeVisualizerService {
private baseURL = environment.nodeUrl;
constructor(private apiRequest: ApiRequestService, private http: HttpClient) { }
generateJson(data: any): Observable<any> {
return this.http.post(`${this.baseURL}/chatMemory`, data);
}
}

View File

@ -1,4 +1,3 @@
<div class="clr-row">
<ng-container *ngFor="let item of dashboardModel; let i = index">
<ng-container *ngIf="item.name === 'Index'">
@ -13,124 +12,6 @@
</div>
</ng-container>
<!-- <ng-container *ngIf="item.name === 'Bar Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.barChartData"
[labels]="item.showlabel ? item?.featchData?.barChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'bar'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Line Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.chartData"
[labels]="item.showlabel ? item?.featchData?.chartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'line'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Doughnut Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.chartData"
[labels]="item.showlabel ? item?.featchData?.chartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'doughnut'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Bubble Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.bubbleChartData"
[legend]="item.chartlegend"
[type]="'bubble'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Pie Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.pieChartData"
[labels]="item.showlabel ? item?.featchData?.pieChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'pie'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'PolarArea Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.polarAreaChartData"
[labels]="item.showlabel ? item?.featchData?.polarAreaChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'polarArea'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Radar Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.radarChartData"
[labels]="item.showlabel ? item?.featchData?.radarChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'radar'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Scatter Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.scatterChartData"
[labels]="item.showlabel ? item?.featchData?.scatterChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'scatter'">
</canvas>
</div>
</div>
</ng-container>
<ng-container *ngIf="item.name === 'Scatter Chart'" >
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.scatterChartData"
[labels]="item.showlabel ? item?.featchData?.scatterChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'scatter'">
</canvas>
</div>
</div>
</ng-container> -->
</ng-container>
<ng-container *ngFor="let item of dashboardChartData; let i = index">
@ -138,10 +19,8 @@
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.barChartData"
[labels]="item.showlabel ? item?.featchData?.barChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.barChartData"
[labels]="item.showlabel ? item?.featchData?.barChartLabels: ChartNoLabels" [legend]="item.chartlegend"
[type]="'bar'">
</canvas>
</div>
@ -151,10 +30,8 @@
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.chartData"
[labels]="item.showlabel ? item?.featchData?.chartLabels: ChartNoLabels"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.chartData"
[labels]="item.showlabel ? item?.featchData?.chartLabels: ChartNoLabels" [legend]="item.chartlegend"
[type]="'line'">
</canvas>
</div>
@ -164,10 +41,8 @@
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.chartData"
[labels]="item.showlabel ? item?.featchData?.chartLabels: ChartNoLabels"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.chartData"
[labels]="item.showlabel ? item?.featchData?.chartLabels: ChartNoLabels" [legend]="item.chartlegend"
[type]="'doughnut'">
</canvas>
</div>
@ -177,9 +52,7 @@
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.bubbleChartData"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.bubbleChartData" [legend]="item.chartlegend"
[type]="'bubble'">
</canvas>
</div>
@ -189,10 +62,8 @@
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.pieChartData"
[labels]="item.showlabel ? item?.featchData?.pieChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.pieChartData"
[labels]="item.showlabel ? item?.featchData?.pieChartLabels: ChartNoLabels" [legend]="item.chartlegend"
[type]="'pie'">
</canvas>
</div>
@ -202,11 +73,9 @@
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.polarAreaChartData"
<canvas baseChart [datasets]="item?.featchData?.polarAreaChartData"
[labels]="item.showlabel ? item?.featchData?.polarAreaChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
[type]="'polarArea'">
[legend]="item.chartlegend" [type]="'polarArea'">
</canvas>
</div>
</div>
@ -215,10 +84,8 @@
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.radarChartData"
[labels]="item.showlabel ? item?.featchData?.radarChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.radarChartData"
[labels]="item.showlabel ? item?.featchData?.radarChartLabels: ChartNoLabels" [legend]="item.chartlegend"
[type]="'radar'">
</canvas>
</div>
@ -228,10 +95,8 @@
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.scatterChartData"
[labels]="item.showlabel ? item?.featchData?.scatterChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.scatterChartData"
[labels]="item.showlabel ? item?.featchData?.scatterChartLabels: ChartNoLabels" [legend]="item.chartlegend"
[type]="'scatter'">
</canvas>
</div>
@ -241,10 +106,8 @@
<div class="clr-col-4" style="padding: 10px 12px 5px 12px;">
<div class="chart-box" id="contentContainer" #contentContainer>
<h4 class="center"> <b>{{item?.charttitle}}</b> </h4>
<canvas baseChart
[datasets]="item?.featchData?.scatterChartData"
[labels]="item.showlabel ? item?.featchData?.scatterChartLabels: ChartNoLabels"
[legend]="item.chartlegend"
<canvas baseChart [datasets]="item?.featchData?.scatterChartData"
[labels]="item.showlabel ? item?.featchData?.scatterChartLabels: ChartNoLabels" [legend]="item.chartlegend"
[type]="'scatter'">
</canvas>
</div>
@ -273,11 +136,15 @@ border-radius: 2px;">
<div class="alert-item static">
<span class="alert-text">
{{'NOTIFICATION_NOT_FOUND' | translate}}
<ng-template #loadingSpinner><clr-spinner [clrMedium]="true">{{'LOADING' | translate}} ... </clr-spinner></ng-template>
<ng-template #loadingSpinner><clr-spinner [clrMedium]="true">{{'LOADING' | translate}} ...
</clr-spinner></ng-template>
<div *ngIf="error;else loadingSpinner">{{error}}</div>
<div *ngIf="er;">{{er}}</div> </span></div>
<div *ngIf="er;">{{er}}</div>
</span>
</div>
</div></ng-template>
</div>
</div>
</ng-template>
<div *ngIf="notification; else showInfo">
<div *ngFor="let not of notification;">
<ng-container *ngIf="not?.image; else def">
@ -291,7 +158,8 @@ border-radius: 2px;">
<b>{{ not.time | timePipe }}</b>
</span><br>
<hr>
</div></div>
</div>
</div>
</clr-tab-content>
</clr-tab>
<clr-tab>
@ -304,20 +172,27 @@ border-radius: 2px;">
<div class="alert-item static">
<span class="alert-text">
{{'SUGGESTION_NOT_FOUND'| translate}}
<ng-template #loadingSpinner><clr-spinner [clrMedium]="true">{{'LOADING'| translate}} ... </clr-spinner></ng-template>
<ng-template #loadingSpinner><clr-spinner [clrMedium]="true">{{'LOADING'| translate}} ...
</clr-spinner></ng-template>
<div *ngIf="error;else loadingSpinner">{{error}}</div>
<div *ngIf="er;">{{er}}</div> </span></div>
<div *ngIf="er;">{{er}}</div>
</span>
</div>
</div></ng-template>
</div>
</div>
</ng-template>
<ng-container *ngIf="projectsetup else suggetionInfo">
<div>
<div class="clr-row">
<div *ngFor="let app of projectsetup; let index = i" class="clr-col-md-6 clr-col-12" style="width: 310px;">
<div *ngFor="let app of projectsetup; let index = i" class="clr-col-md-6 clr-col-12"
style="width: 310px;">
<div class="card" style="background-color: azure;">
<div class="card-header">
<div class="clr-row">
<div class="clr-col-5">
<b class="word" id="projectword" [title]="app.owner"><clr-icon shape="employee"></clr-icon> {{app.owner}} <span class="label label-light-blue p7 wordwrap" style="margin-top: .4em;" [title]="app.accessibility"> {{app.accessibility ? 'private' : 'public'}}</span></b>
<b class="word" id="projectword" [title]="app.owner"><clr-icon shape="employee"></clr-icon>
{{app.owner}} <span class="label label-light-blue p7 wordwrap" style="margin-top: .4em;"
[title]="app.accessibility"> {{app.accessibility ? 'private' : 'public'}}</span></b>
</div>
<div class="clr-col-7" style="text-align: right;">
@ -327,11 +202,14 @@ border-radius: 2px;">
<b style="font-size: 15px;" [title]="app.projectName">{{app.projectName}}</b>
</div>
<div class="clr-row">
<div class="clr-col-9"> <div class="card-title1" id="projectword" >
<b style="font-size: 15px;" class="p2" [title]="app.description">{{app.description ? app.description : 'project description'}}</b>
<div class="clr-col-9">
<div class="card-title1" id="projectword">
<b style="font-size: 15px;" class="p2" [title]="app.description">{{app.description ?
app.description : 'project description'}}</b>
</div>
</div>
<div class="clr-col-3" style="text-align: right; display: flex; align-items: center; justify-content: flex-end;">
<div class="clr-col-3"
style="text-align: right; display: flex; align-items: center; justify-content: flex-end;">
<a href="javascript:void(0)" class="btn--circle" (click)="goToModule(app.id);">
<span class="btn-stage"></span>
@ -344,7 +222,8 @@ border-radius: 2px;">
<div class="clr-row">
<div class="clr-col-12">
<span *ngFor="let tech of app?.technology?.slice(0, 6); let i = index">
<span class="label label-light-blue p7 wordwrap" style="margin-top: .4em;" [title]="tech"> {{tech}}</span>
<span class="label label-light-blue p7 wordwrap" style="margin-top: .4em;" [title]="tech">
{{tech}}</span>
</span>
</div>
<!-- <div class="clr-col-5" (click)="stopRedirection($event)">
@ -357,7 +236,9 @@ border-radius: 2px;">
<div class="card-block" style="padding: 10px 10px 0px 10px;">
<div class="card-footer" style="padding: 0px 10px 6px 10px">
<button class="btn btn-sm btn-link"> {{'Last Updated On' | translate}} {{app.updatedAt|date}}</button> <span style="margin: 0 0 0 10px; padding: 5px;" class="label p7"><clr-icon shape="calendar"></clr-icon>&nbsp;{{app.createdAt | timePipe}}</span>
<button class="btn btn-sm btn-link"> {{'Last Updated On' | translate}}
{{app.updatedAt|date}}</button> <span style="margin: 0 0 0 10px; padding: 5px;"
class="label p7"><clr-icon shape="calendar"></clr-icon>&nbsp;{{app.createdAt | timePipe}}</span>
</div>
</div>
</div>

View File

@ -101,6 +101,7 @@ import { MappingruleeditComponent } from './datamanagement/mappingrule/mappingru
import { QueryComponent } from './superadmin/query/query.component';
import { QueryaddComponent } from './superadmin/queryadd/queryadd.component';
import { QueryeditComponent } from './superadmin/queryedit/queryedit.component';
import { TreeVisualizerComponent } from './fnd/SiteTreeBuilder/tree-visualizer.component';
@ -275,6 +276,8 @@ const routes: Routes = [
{path:'Visa_administration',component:Visa_administrationComponent},
{path:'SiteBuilder',component:TreeVisualizerComponent},
{path:'Visa_status',component:Visa_statusComponent},

View File

@ -121,6 +121,9 @@ import { MappingruleeditComponent } from './datamanagement/mappingrule/mappingru
import { QueryComponent } from './superadmin/query/query.component';
import { QueryaddComponent } from './superadmin/queryadd/queryadd.component';
import { QueryeditComponent } from './superadmin/queryedit/queryedit.component';
import { TreeVisualizerComponent } from './fnd/SiteTreeBuilder/tree-visualizer.component';
import { TreeNodeComponent } from './fnd/SiteTreeBuilder/tree-node.component';
@NgModule({
declarations: [
@ -140,6 +143,9 @@ import { QueryeditComponent } from './superadmin/queryedit/queryedit.component';
// buildercomponents
TreeNodeComponent,
TreeVisualizerComponent,
Visa_administrationComponent,

View File

@ -14,6 +14,8 @@ export const environment = {
// backendUrl:'/visaproject36808/back',
backendUrl:'http://157.66.191.31:30101/back',
nodeUrl:'http://157.66.191.31:31170',

View File

@ -11,8 +11,10 @@ export const environment = {
captchaSiteKey: '6LfrdSUpAAAAALkYDmnvdX3GLLCArgPWNHfXasjP',
// backport:'31701/visaproject36808/back',
// backendUrl:'http://localhost:9292/back',
backendUrl:'http://157.66.191.31:30101/back',
backendUrl:'http://localhost:9292/back',
nodeUrl:'http://localhost:3000',
// backendUrl:'http://157.66.191.31:30101/back',

View File

@ -3,28 +3,14 @@ const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const cors = require('cors')
const app = express();
const proxy = require('express-http-proxy');
app.use(cors({
origin: '*'
}))
//Deployment configs
app.use('/repos', createProxyMiddleware({ target: 'https://try.gitea.io/api/v1', changeOrigin: true }));
app.use('/sureconnect', createProxyMiddleware({ target: 'http://43.205.154.152:30174', changeOrigin: true }));
app.use('/sureops', createProxyMiddleware({ target: 'http://43.205.154.152:31123', changeOrigin: true }));
app.use('/entityBuilder', createProxyMiddleware({ target: 'http://43.205.154.152:30171', changeOrigin: true }));
app.use('/surechat', createProxyMiddleware({ target: 'http://43.205.154.152:30172', changeOrigin: true }));
app.use('/jobpro', createProxyMiddleware({ target: 'http://43.205.154.152:30167', changeOrigin: true }));
app.use('/Surecommunication', createProxyMiddleware({ target: 'http://43.205.154.152:30187', changeOrigin: true }));
app.use('/surejob', createProxyMiddleware({ target: 'http://43.205.154.152:30188', changeOrigin: true }));
// app.use('/jobpro', createProxyMiddleware({ target: 'http://localhost:8087', changeOrigin: true }));
// app.use('/Surecommunication', createProxyMiddleware({ target: 'http://localhost:19002', changeOrigin: true }));
// app.use('/sureops', createProxyMiddleware({ target: 'http://localhost:9090', changeOrigin: true }));
// app.use('/', createProxyMiddleware({ target: 'http://localhost:8080', changeOrigin: true }));
// app.use('/', createProxyMiddleware({ target: 'http://localhost:9190', changeOrigin: true }));
// app.listen(3000);
// console.log('Node server running on port 3000');
app.use('/llm', createProxyMiddleware({ target: 'http://157.66.191.31:30103', changeOrigin: true }));
app.listen(3000, () => {
console.log("Server started in port 3000!");
});