fix: CSP issues, clarity local library build, fixed some style issues
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 49s
Build / Build-and-test-development (pull_request) Failing after 49s

This commit is contained in:
Mihajlo Medjedovic
2025-05-21 09:36:36 +02:00
parent e013e62776
commit 841201adab
18 changed files with 2259 additions and 742 deletions

Binary file not shown.

Binary file not shown.

2889
client/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -45,9 +45,9 @@
"@angular/platform-browser-dynamic": "^17.3.3", "@angular/platform-browser-dynamic": "^17.3.3",
"@angular/router": "^17.3.3", "@angular/router": "^17.3.3",
"@cds/core": "^6.15.1", "@cds/core": "^6.15.1",
"@clr/angular": "^17.9.0", "@clr/angular": "file:libraries/clr-angular-17.9.0.tgz",
"@clr/icons": "^13.0.2", "@clr/icons": "^13.0.2",
"@clr/ui": "^17.9.0", "@clr/ui": "file:libraries/clr-ui-17.9.0.tgz",
"@handsontable/angular": "^15.3.0", "@handsontable/angular": "^15.3.0",
"@sasjs/adapter": "^4.11.0", "@sasjs/adapter": "^4.11.0",
"@sasjs/utils": "^3.4.0", "@sasjs/utils": "^3.4.0",

View File

@ -36,7 +36,7 @@
<div class="clr-row card-block mt-15 d-flex justify-content-between"> <div class="clr-row card-block mt-15 d-flex justify-content-between">
<div class="clr-col-md-auto"> <div class="clr-col-md-auto">
<div class="encoding-block"> <div class="encoding-block">
<clr-radio-container class="mt-0-i" clrInline> <clr-radio-container class="mt-0" clrInline>
<clr-radio-wrapper> <clr-radio-wrapper>
<input <input
type="radio" type="radio"
@ -193,7 +193,7 @@
libName: (libds?.split('.'))![0], libName: (libds?.split('.'))![0],
tableName: (libds?.split('.'))![1] tableName: (libds?.split('.'))![1]
} as libdsParsed" } as libdsParsed"
class="editor-title text-center mt-0-i" class="editor-title text-center mt-0"
> >
<clr-tooltip> <clr-tooltip>
<clr-icon <clr-icon

View File

@ -1,4 +1,4 @@
import { Component, OnInit } from '@angular/core' import { Component, OnInit, ViewEncapsulation } from '@angular/core'
@Component({ @Component({
selector: 'app-not-found', selector: 'app-not-found',
@ -6,7 +6,8 @@ import { Component, OnInit } from '@angular/core'
styleUrls: ['./not-found.component.scss'], styleUrls: ['./not-found.component.scss'],
host: { host: {
class: 'content-container' class: 'content-container'
} },
encapsulation: ViewEncapsulation.None
}) })
export class NotFoundComponent implements OnInit { export class NotFoundComponent implements OnInit {
constructor() {} constructor() {}

View File

@ -350,13 +350,12 @@ export class ApproveDetailsComponent implements AfterViewInit, OnDestroy {
this.params = param this.params = param
this.response = res this.response = res
this.calcDiff() this.calcDiff()
this.callChangesInfo(this.tableId)
}) })
.catch((err: any) => err) .catch((err: any) => err)
.finally(() => { .finally(() => {
this.loadingTable = true this.loadingTable = true
}) })
this.callChangesInfo(this.tableId)
} }
) )
if (typeof this.router.snapshot.params['tableId'] === 'undefined') { if (typeof this.router.snapshot.params['tableId'] === 'undefined') {
@ -379,6 +378,7 @@ export class ApproveDetailsComponent implements AfterViewInit, OnDestroy {
this.params = param this.params = param
this.response = res this.response = res
this.calcDiff() this.calcDiff()
this.callChangesInfo(this.tableId)
}) })
.catch((err: any) => { .catch((err: any) => {
this.acceptLoading = false this.acceptLoading = false
@ -387,8 +387,6 @@ export class ApproveDetailsComponent implements AfterViewInit, OnDestroy {
this.loadingTable = true this.loadingTable = true
this.setFocus() this.setFocus()
}) })
this.callChangesInfo(this.tableId)
} }
ngOnDestroy() { ngOnDestroy() {

View File

@ -1,4 +1,4 @@
import { Component, OnInit } from '@angular/core' import { Component, OnInit, ViewEncapsulation } from '@angular/core'
import { globals } from '../_globals' import { globals } from '../_globals'
import { HelperService } from '../services/helper.service' import { HelperService } from '../services/helper.service'
import { Location } from '@angular/common' import { Location } from '@angular/common'
@ -12,7 +12,8 @@ import { RequestWrapperResponse } from '../models/request-wrapper/RequestWrapper
styleUrls: ['./role.component.scss'], styleUrls: ['./role.component.scss'],
host: { host: {
class: 'content-container' class: 'content-container'
} },
encapsulation: ViewEncapsulation.None
}) })
export class RoleComponent implements OnInit { export class RoleComponent implements OnInit {
public roles: Array<any> | undefined public roles: Array<any> | undefined

View File

@ -1,4 +1,4 @@
import { Component, OnInit, OnDestroy } from '@angular/core' import { Component, OnInit, OnDestroy, ViewEncapsulation } from '@angular/core'
@Component({ @Component({
selector: 'app-home-route', selector: 'app-home-route',
@ -6,7 +6,8 @@ import { Component, OnInit, OnDestroy } from '@angular/core'
styleUrls: ['./home-route.component.scss'], styleUrls: ['./home-route.component.scss'],
host: { host: {
class: 'content-container' class: 'content-container'
} },
encapsulation: ViewEncapsulation.None
}) })
export class HomeRouteComponent implements OnInit, OnDestroy { export class HomeRouteComponent implements OnInit, OnDestroy {
constructor() {} constructor() {}

View File

@ -1,4 +1,4 @@
import { Component, OnInit } from '@angular/core' import { Component, OnInit, ViewEncapsulation } from '@angular/core'
@Component({ @Component({
selector: 'app-review-route', selector: 'app-review-route',
@ -6,7 +6,8 @@ import { Component, OnInit } from '@angular/core'
styleUrls: ['./review-route.component.scss'], styleUrls: ['./review-route.component.scss'],
host: { host: {
class: 'content-container' class: 'content-container'
} },
encapsulation: ViewEncapsulation.None
}) })
export class ReviewRouteComponent implements OnInit { export class ReviewRouteComponent implements OnInit {
constructor() {} constructor() {}

View File

@ -1,4 +1,4 @@
import { Component, OnInit } from '@angular/core' import { Component, OnInit, ViewEncapsulation } from '@angular/core'
@Component({ @Component({
selector: 'app-usernav-route', selector: 'app-usernav-route',
@ -6,7 +6,8 @@ import { Component, OnInit } from '@angular/core'
styleUrls: ['./usernav-route.component.scss'], styleUrls: ['./usernav-route.component.scss'],
host: { host: {
class: 'content-container' class: 'content-container'
} },
encapsulation: ViewEncapsulation.None
}) })
export class UsernavRouteComponent implements OnInit { export class UsernavRouteComponent implements OnInit {
constructor() {} constructor() {}

View File

@ -1,4 +1,4 @@
import { Component, OnInit, OnDestroy } from '@angular/core' import { Component, OnInit, OnDestroy, ViewEncapsulation } from '@angular/core'
@Component({ @Component({
selector: 'app-view-route', selector: 'app-view-route',
@ -6,7 +6,8 @@ import { Component, OnInit, OnDestroy } from '@angular/core'
styleUrls: ['./view-route.component.scss'], styleUrls: ['./view-route.component.scss'],
host: { host: {
class: 'content-container' class: 'content-container'
} },
encapsulation: ViewEncapsulation.None
}) })
export class ViewRouteComponent implements OnInit, OnDestroy { export class ViewRouteComponent implements OnInit, OnDestroy {
constructor() {} constructor() {}

View File

@ -1,4 +1,4 @@
import { Component, OnInit, OnDestroy } from '@angular/core' import { Component, OnInit, OnDestroy, ViewEncapsulation } from '@angular/core'
@Component({ @Component({
selector: 'app-xlmap-route', selector: 'app-xlmap-route',
@ -6,7 +6,8 @@ import { Component, OnInit, OnDestroy } from '@angular/core'
styleUrls: ['./xlmap-route.component.scss'], styleUrls: ['./xlmap-route.component.scss'],
host: { host: {
class: 'content-container' class: 'content-container'
} },
encapsulation: ViewEncapsulation.None
}) })
export class XLMapRouteComponent implements OnInit, OnDestroy { export class XLMapRouteComponent implements OnInit, OnDestroy {
constructor() {} constructor() {}

View File

@ -223,7 +223,7 @@ export class SasStoreService {
tables[tableName] = [tableData] tables[tableName] = [tableData]
return ( return (
await this.sasService.request(program, tables, { await this.sasService.request(program, tables, {
useComputeApi: false useComputeApi: null // Using WEB APPROACH as a temporary workaround until VIYA JES API is fixed. For other server types then VIYA this is not applicable
}) })
).adapterResponse ).adapterResponse
} }
@ -232,7 +232,7 @@ export class SasStoreService {
tables[tableName] = [tableData] tables[tableName] = [tableData]
return ( return (
await this.sasService.request(program, tables, { await this.sasService.request(program, tables, {
useComputeApi: false useComputeApi: null // Using WEB APPROACH as a temporary workaround until VIYA JES API is fixed. For other server types then VIYA this is not applicable
}) })
).adapterResponse ).adapterResponse
} }

View File

@ -7,7 +7,7 @@
> >
<h3 class="modal-title"> <h3 class="modal-title">
{{ data.modalTitle }} {{ data.modalTitle }}
<p *ngIf="data.sasService && data.sasService.length > 0" class="sasService"> <p *ngIf="data.sasService && data.sasService.length > 0" class="sasService mt-0">
SAS Service: <strong>{{ data.sasService }}</strong> SAS Service: <strong>{{ data.sasService }}</strong>
</p> </p>
</h3> </h3>

View File

@ -19,7 +19,7 @@
<div class="modal-body d-flex"> <div class="modal-body d-flex">
<div class="add-new d-flex clr-flex-column"> <div class="add-new d-flex clr-flex-column">
<p class="mt-0-i">Add new</p> <p class="mt-0">Add new</p>
<hr class="w-100" /> <hr class="w-100" />
@ -41,7 +41,7 @@
<div class="currently-open"> <div class="currently-open">
<div class="d-flex clr-justify-content-between"> <div class="d-flex clr-justify-content-between">
<p class="mt-0-i">Currently open</p> <p class="mt-0">Currently open</p>
<div> <div>
<a <a
@ -198,7 +198,7 @@
</ng-container> </ng-container>
<ng-container *ngIf="hotColumns.colHeadersVisible"> <ng-container *ngIf="hotColumns.colHeadersVisible">
<p class="mt-0-i">Columns To Display (drag and re-order)</p> <p class="mt-0">Columns To Display (drag and re-order)</p>
<div <div
class="cols-list" class="cols-list"
cdkDropList cdkDropList

View File

@ -47,11 +47,11 @@
serverUrl="" serverUrl=""
appLoc="/Public/app/dc" appLoc="/Public/app/dc"
serverType="SASJS" serverType="SASJS"
loginMechanism="Default" loginMechanism="Redirected"
debug="false" debug="false"
useComputeApi="true" useComputeApi="true"
contextName="SAS Job Execution compute context" contextName="SAS Job Execution compute context"
adminGroup="sec-sas9-prd-int-sasplatform-300114sasjs" adminGroup="SASAdministrators"
dcPath="/tmp/dc" dcPath="/tmp/dc"
hotLicenceKey="non-commercial-and-evaluation" hotLicenceKey="non-commercial-and-evaluation"
> >

View File

@ -704,12 +704,6 @@ body[cds-theme="light"] {
text-transform: uppercase; text-transform: uppercase;
} }
.modal-header {
border-bottom: 2px solid #e4e4e4;
padding: 0 0 .5rem 0;
margin-bottom: 1rem;
}
.main-container .content-container { .main-container .content-container {
min-height: 0px; min-height: 0px;
position: relative; position: relative;
@ -1496,6 +1490,12 @@ body[cds-theme="light"] {
// REQUESTS-MODAL.COMPONENT // REQUESTS-MODAL.COMPONENT
app-requests-modal { app-requests-modal {
.modal-header--accessible {
border-bottom: 1px solid #e4e4e4;
padding: 0 0 .5rem 0;
margin-bottom: 5px;
}
.dropdown-item { .dropdown-item {
&.selected { &.selected {
background: #d8e3e9; background: #d8e3e9;
@ -1509,7 +1509,7 @@ app-requests-modal {
} }
} }
.requests-modal .modal-header .close clr-icon { .requests-modal .modal-header--accessible--accessible .close clr-icon {
display: block !important; display: block !important;
} }
@ -2423,10 +2423,6 @@ app-viewboxes {
height: 80vh; height: 80vh;
} }
.modal-footer {
padding: 0;
}
.modal-body { .modal-body {
max-height: 100%; max-height: 100%;
height: 100%; height: 100%;
@ -2731,6 +2727,12 @@ body[cds-theme="light"] {
// AUTOMATIC-DEPLOY.COMPONENT // AUTOMATIC-DEPLOY.COMPONENT
app-automatic-deploy { app-automatic-deploy {
.dc-loc-input-wrapper {
input {
width: 500px;
}
}
.auto-deploy { .auto-deploy {
display: flex; display: flex;
justify-content: center; justify-content: center;
@ -2824,7 +2826,6 @@ app-info-modal {
.modal-footer { .modal-footer {
position: relative; position: relative;
border-top: 1px solid #dcdcdc;
} }
.systext { .systext {
@ -3038,7 +3039,7 @@ app-edit-record {
top: 5px; top: 5px;
} }
.modal-header { .modal-header--accessible {
padding: 0 0 1rem 0; padding: 0 0 1rem 0;
} }
@ -3903,6 +3904,14 @@ body[cds-theme="light"] {
} }
} }
.modal .modal-body {
padding: 15px;
}
.modal .modal-footer {
padding: 0 15px 15px 15px;
}
.log-wrapper { .log-wrapper {
min-height: 50px; min-height: 50px;
padding: 10px; padding: 10px;
@ -4070,10 +4079,6 @@ body[cds-theme="light"] {
} }
.mt-0 { .mt-0 {
margin-top: 0;
}
.mt-0-i {
margin-top: 0 !important; margin-top: 0 !important;
} }
@ -4502,10 +4507,14 @@ body[cds-theme="light"] {
margin-top: 10px; margin-top: 10px;
} }
.modal-header .close clr-icon { .modal-header--accessible {
padding: 15px 15px 0 15px;
}
.modal-header--accessible .close clr-icon {
display: none; display: none;
} }
.show-close .modal-header .close clr-icon { .show-close .modal-header--accessible .close clr-icon {
display: inline-block; display: inline-block;
position: relative; position: relative;
top: -18px; top: -18px;