Compare commits
15 Commits
Author | SHA1 | Date | |
---|---|---|---|
7b5bbe024d | |||
4d84f15aca | |||
928937daab | |||
3bd8d247e5 | |||
cf6c9dd5f2 | |||
ff55cbbaad | |||
3eda4e2c58 | |||
c3af97ef57 | |||
31d4e5c727 | |||
fbbcf90956 | |||
f522038b8d | |||
5171d07441 | |||
9a0b9573d5 | |||
4733311ef3 | |||
432450a15b |
@ -21,8 +21,17 @@ jobs:
|
|||||||
- name: Lint check
|
- name: Lint check
|
||||||
run: npm run lint:check
|
run: npm run lint:check
|
||||||
|
|
||||||
- name: Licence checker
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
cd client
|
cd client
|
||||||
npm ci
|
npm ci
|
||||||
|
# Install sheet
|
||||||
|
wget ${{ secrets.SHEETLINK }}
|
||||||
|
mv ${{ secrets.SHEETNAME }} ${{ secrets.SHEETNAME }}.tgz
|
||||||
|
npm i ${{ secrets.SHEETNAME }}.tgz
|
||||||
|
# End
|
||||||
|
|
||||||
|
- name: Licence checker
|
||||||
|
run: |
|
||||||
|
cd client
|
||||||
npm run license-checker
|
npm run license-checker
|
@ -34,7 +34,14 @@ jobs:
|
|||||||
CYPRESS_CREDS: ${{ secrets.CYPRESS_CREDS }}
|
CYPRESS_CREDS: ${{ secrets.CYPRESS_CREDS }}
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm ci
|
run: |
|
||||||
|
npm ci
|
||||||
|
cd client
|
||||||
|
# Install sheet
|
||||||
|
wget ${{ secrets.SHEETLINK }}
|
||||||
|
mv ${{ secrets.SHEETNAME }} ${{ secrets.SHEETNAME }}.tgz
|
||||||
|
npm i ${{ secrets.SHEETNAME }}.tgz
|
||||||
|
# End
|
||||||
|
|
||||||
- name: Check audit
|
- name: Check audit
|
||||||
# Audit should fail and stop the CI if critical vulnerability found
|
# Audit should fail and stop the CI if critical vulnerability found
|
||||||
@ -86,7 +93,14 @@ jobs:
|
|||||||
CYPRESS_CREDS: ${{ secrets.CYPRESS_CREDS }}
|
CYPRESS_CREDS: ${{ secrets.CYPRESS_CREDS }}
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm ci
|
run: |
|
||||||
|
npm ci
|
||||||
|
cd client
|
||||||
|
# Install sheet
|
||||||
|
wget ${{ secrets.SHEETLINK }}
|
||||||
|
mv ${{ secrets.SHEETNAME }} ${{ secrets.SHEETNAME }}.tgz
|
||||||
|
npm i ${{ secrets.SHEETNAME }}.tgz
|
||||||
|
# End
|
||||||
|
|
||||||
# Install pm2 and prepare SASJS server
|
# Install pm2 and prepare SASJS server
|
||||||
- run: npm i -g pm2
|
- run: npm i -g pm2
|
||||||
@ -185,6 +199,11 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cd client
|
cd client
|
||||||
npm ci
|
npm ci
|
||||||
|
# Install sheet
|
||||||
|
wget ${{ secrets.SHEETLINK }}
|
||||||
|
mv ${{ secrets.SHEETNAME }} ${{ secrets.SHEETNAME }}.tgz
|
||||||
|
npm i ${{ secrets.SHEETNAME }}.tgz
|
||||||
|
# End
|
||||||
npm run build
|
npm run build
|
||||||
|
|
||||||
- name: Build SAS9 EBI Release
|
- name: Build SAS9 EBI Release
|
||||||
|
16
CHANGELOG.md
16
CHANGELOG.md
@ -1,3 +1,19 @@
|
|||||||
|
## [6.6.4](https://git.datacontroller.io/dc/dc/compare/v6.6.3...v6.6.4) (2024-04-01)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* ordering SOFTSELECT numerically in dropdown ([f522038](https://git.datacontroller.io/dc/dc/commit/f522038b8ddb1da14b8adbf8346d0a4539a94cc8)), closes [#85](https://git.datacontroller.io/dc/dc/issues/85)
|
||||||
|
* reverting col ([fbbcf90](https://git.datacontroller.io/dc/dc/commit/fbbcf90956bf538b032b0107c07b8576d20353b9))
|
||||||
|
* typo ([31d4e5c](https://git.datacontroller.io/dc/dc/commit/31d4e5c727f790d428fb2ea8da60dca929561805))
|
||||||
|
|
||||||
|
## [6.6.3](https://git.datacontroller.io/dc/dc/compare/v6.6.2...v6.6.3) (2024-02-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* allow empty clause value when NE or CONTAINS ([432450a](https://git.datacontroller.io/dc/dc/commit/432450a15b51a269821ba1d430854f5d1dd04703))
|
||||||
|
|
||||||
## [6.6.2](https://git.datacontroller.io/dc/dc/compare/v6.6.1...v6.6.2) (2024-02-22)
|
## [6.6.2](https://git.datacontroller.io/dc/dc/compare/v6.6.1...v6.6.2) (2024-02-22)
|
||||||
|
|
||||||
|
|
||||||
|
7
client/package-lock.json
generated
7
client/package-lock.json
generated
@ -23,7 +23,7 @@
|
|||||||
"@handsontable/angular": "^13.1.0",
|
"@handsontable/angular": "^13.1.0",
|
||||||
"@sasjs/adapter": "4.10.2",
|
"@sasjs/adapter": "4.10.2",
|
||||||
"@sasjs/utils": "^3.4.0",
|
"@sasjs/utils": "^3.4.0",
|
||||||
"@sheet/crypto": "1.20211122.1",
|
"@sheet/crypto": "file:../../../RESOURCES/libs/0fae52415ec93a6dd3d5bd33c73b6dc124a07496be568a7aba6d033ec65df60b.tgz",
|
||||||
"@types/d3-graphviz": "^2.6.7",
|
"@types/d3-graphviz": "^2.6.7",
|
||||||
"@types/text-encoding": "0.0.35",
|
"@types/text-encoding": "0.0.35",
|
||||||
"base64-arraybuffer": "^0.2.0",
|
"base64-arraybuffer": "^0.2.0",
|
||||||
@ -4652,7 +4652,7 @@
|
|||||||
},
|
},
|
||||||
"node_modules/@sheet/crypto": {
|
"node_modules/@sheet/crypto": {
|
||||||
"version": "1.20211122.1",
|
"version": "1.20211122.1",
|
||||||
"resolved": "https://pylon.sheetjs.com:54111/@sheet%2fcrypto/-/crypto-1.20211122.1.tgz",
|
"resolved": "file:../../../RESOURCES/libs/0fae52415ec93a6dd3d5bd33c73b6dc124a07496be568a7aba6d033ec65df60b.tgz",
|
||||||
"integrity": "sha512-G3/HWyzFUYbbVQoQIa+KSeMOhFnK492Ep595FXbzWN9IGZSwuvFl4saEyMl8R8pE2Al5YgSZuR9MpDpx3f7Izg==",
|
"integrity": "sha512-G3/HWyzFUYbbVQoQIa+KSeMOhFnK492Ep595FXbzWN9IGZSwuvFl4saEyMl8R8pE2Al5YgSZuR9MpDpx3f7Izg==",
|
||||||
"bin": {
|
"bin": {
|
||||||
"xlsx": "bin/xlsx.njs"
|
"xlsx": "bin/xlsx.njs"
|
||||||
@ -23681,8 +23681,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@sheet/crypto": {
|
"@sheet/crypto": {
|
||||||
"version": "1.20211122.1",
|
"version": "file:../../../RESOURCES/libs/0fae52415ec93a6dd3d5bd33c73b6dc124a07496be568a7aba6d033ec65df60b.tgz",
|
||||||
"resolved": "https://pylon.sheetjs.com:54111/@sheet%2fcrypto/-/crypto-1.20211122.1.tgz",
|
|
||||||
"integrity": "sha512-G3/HWyzFUYbbVQoQIa+KSeMOhFnK492Ep595FXbzWN9IGZSwuvFl4saEyMl8R8pE2Al5YgSZuR9MpDpx3f7Izg=="
|
"integrity": "sha512-G3/HWyzFUYbbVQoQIa+KSeMOhFnK492Ep595FXbzWN9IGZSwuvFl4saEyMl8R8pE2Al5YgSZuR9MpDpx3f7Izg=="
|
||||||
},
|
},
|
||||||
"@sideway/address": {
|
"@sideway/address": {
|
||||||
|
@ -51,7 +51,6 @@
|
|||||||
"@handsontable/angular": "^13.1.0",
|
"@handsontable/angular": "^13.1.0",
|
||||||
"@sasjs/adapter": "4.10.2",
|
"@sasjs/adapter": "4.10.2",
|
||||||
"@sasjs/utils": "^3.4.0",
|
"@sasjs/utils": "^3.4.0",
|
||||||
"@sheet/crypto": "1.20211122.1",
|
|
||||||
"@types/d3-graphviz": "^2.6.7",
|
"@types/d3-graphviz": "^2.6.7",
|
||||||
"@types/text-encoding": "0.0.35",
|
"@types/text-encoding": "0.0.35",
|
||||||
"base64-arraybuffer": "^0.2.0",
|
"base64-arraybuffer": "^0.2.0",
|
||||||
|
@ -980,15 +980,18 @@ export class EditorComponent implements OnInit, AfterViewInit {
|
|||||||
|
|
||||||
// Apply licence rows limitation if exists, it is only affecting data
|
// Apply licence rows limitation if exists, it is only affecting data
|
||||||
// which will be send to SAS
|
// which will be send to SAS
|
||||||
const strippedCsvArrayData = csvArrayData.slice(0, this.licenceState.value.submit_rows_limit)
|
const strippedCsvArrayData = csvArrayData.slice(
|
||||||
|
0,
|
||||||
|
this.licenceState.value.submit_rows_limit
|
||||||
|
)
|
||||||
// To submit to sas service, we need clean version of CSV of file
|
// To submit to sas service, we need clean version of CSV of file
|
||||||
// attached. XLSX will do the parsing and heavy lifting
|
// attached. XLSX will do the parsing and heavy lifting
|
||||||
// First we create worksheet of json (data we extracted)
|
// First we create worksheet of json (data we extracted)
|
||||||
let ws = XLSX.utils.json_to_sheet(strippedCsvArrayData, {
|
let ws = XLSX.utils.json_to_sheet(strippedCsvArrayData, {
|
||||||
skipHeader: true
|
skipHeader: true
|
||||||
});
|
})
|
||||||
// create CSV to be uploaded from worksheet
|
// create CSV to be uploaded from worksheet
|
||||||
let csvContentClean = XLSX.utils.sheet_to_csv(ws);
|
let csvContentClean = XLSX.utils.sheet_to_csv(ws)
|
||||||
// Prepend headers
|
// Prepend headers
|
||||||
csvContentClean = csvArrayHeaders.join(',') + '\n' + csvContentClean
|
csvContentClean = csvArrayHeaders.join(',') + '\n' + csvContentClean
|
||||||
|
|
||||||
|
@ -878,17 +878,25 @@ export class QueryComponent
|
|||||||
*/
|
*/
|
||||||
public hasInvalidCluase(clauses: any): boolean {
|
public hasInvalidCluase(clauses: any): boolean {
|
||||||
for (let clause of clauses) {
|
for (let clause of clauses) {
|
||||||
|
clause['invalidClause'] = false
|
||||||
|
|
||||||
if (
|
if (
|
||||||
clause.variable === null ||
|
clause.value === '' &&
|
||||||
clause.operator === null ||
|
!(clause.operator === 'NE' || clause.operator === 'CONTAINS')
|
||||||
clause.value === null ||
|
) {
|
||||||
clause.value === ''
|
clause['invalidClause'] = true
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
clause.variable === null ||
|
||||||
|
clause.operator === null ||
|
||||||
|
clause.value === null
|
||||||
) {
|
) {
|
||||||
clause['invalidClause'] = true
|
clause['invalidClause'] = true
|
||||||
|
|
||||||
return true
|
return true
|
||||||
} else {
|
|
||||||
clause['invalidClause'] = false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "dcfrontend",
|
"name": "dcfrontend",
|
||||||
"version": "6.6.2",
|
"version": "6.6.4",
|
||||||
"description": "Data Controller",
|
"description": "Data Controller",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@saithodev/semantic-release-gitea": "^2.1.0",
|
"@saithodev/semantic-release-gitea": "^2.1.0",
|
||||||
|
15
sas/package-lock.json
generated
15
sas/package-lock.json
generated
@ -229,12 +229,6 @@
|
|||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/tough-cookie": {
|
|
||||||
"version": "4.0.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
|
|
||||||
"integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==",
|
|
||||||
"peer": true
|
|
||||||
},
|
|
||||||
"node_modules/abab": {
|
"node_modules/abab": {
|
||||||
"version": "2.0.6",
|
"version": "2.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
|
||||||
@ -1933,12 +1927,6 @@
|
|||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/tough-cookie": {
|
|
||||||
"version": "4.0.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
|
|
||||||
"integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==",
|
|
||||||
"peer": true
|
|
||||||
},
|
|
||||||
"abab": {
|
"abab": {
|
||||||
"version": "2.0.6",
|
"version": "2.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
|
||||||
@ -2965,8 +2953,7 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"version": "8.13.0",
|
"version": "8.13.0",
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
|
||||||
"integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
|
"integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA=="
|
||||||
"requires": {}
|
|
||||||
},
|
},
|
||||||
"xml": {
|
"xml": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
|
@ -1874,6 +1874,16 @@ insert into &lib..MPE_VALIDATIONS set
|
|||||||
,rule_value="services/validations/columns_in_libds"
|
,rule_value="services/validations/columns_in_libds"
|
||||||
,rule_active=1
|
,rule_active=1
|
||||||
,tx_to='31DEC5999:23:59:59'dt;
|
,tx_to='31DEC5999:23:59:59'dt;
|
||||||
|
/* test softselect on numeric var (should be ordered numerically) */
|
||||||
|
insert into &lib..MPE_VALIDATIONS set
|
||||||
|
tx_from=0
|
||||||
|
,base_lib="&lib"
|
||||||
|
,base_ds="MPE_X_TEST"
|
||||||
|
,base_col="SOME_BESTNUM"
|
||||||
|
,rule_type='SOFTSELECT'
|
||||||
|
,rule_value="&lib..MPE_X_TEST.SOME_BESTNUM"
|
||||||
|
,rule_active=1
|
||||||
|
,tx_to='31DEC5999:23:59:59'dt;
|
||||||
insert into &lib..MPE_VALIDATIONS set
|
insert into &lib..MPE_VALIDATIONS set
|
||||||
tx_from=0
|
tx_from=0
|
||||||
,base_lib="&lib"
|
,base_lib="&lib"
|
||||||
|
@ -631,9 +631,14 @@ create table dqdata as
|
|||||||
select distinct "&&base_col&x" as base_col length=32
|
select distinct "&&base_col&x" as base_col length=32
|
||||||
,"&source" as rule_value length=74
|
,"&source" as rule_value length=74
|
||||||
,cats(&col) as rule_data length=1000
|
,cats(&col) as rule_data length=1000
|
||||||
,0 as selectbox_order
|
,&col as tmp_order
|
||||||
from &lib..&ds
|
from &lib..&ds
|
||||||
order by 1;
|
order by tmp_order;
|
||||||
|
/* ensure both numerics and char vals are ordered correctly */
|
||||||
|
data work.dqdata&x (drop=tmp_order);
|
||||||
|
set work.dqdata&x;
|
||||||
|
selectbox_order=_n_;
|
||||||
|
run;
|
||||||
%mp_abort(iftrue= (&syscc ne 0)
|
%mp_abort(iftrue= (&syscc ne 0)
|
||||||
,mac=&_program
|
,mac=&_program
|
||||||
,msg=%str(syscc=&syscc when selecting &&base_col&x from &orig_libds)
|
,msg=%str(syscc=&syscc when selecting &&base_col&x from &orig_libds)
|
||||||
|
Reference in New Issue
Block a user