Skip to content

Commit 52dcd94

Browse files
samhere06mohas22tumms2021389
authored andcommitted
Updated DataReference and Semantic Link to display as label and value (#337)
* Updated DataReference and Semantic Link to display as label and value * Handling label in single reference component --------- Co-authored-by: mohas22 <[email protected]> Co-authored-by: tumms2021389 <[email protected]>
1 parent 7a6d75d commit 52dcd94

File tree

18 files changed

+509
-503
lines changed

18 files changed

+509
-503
lines changed

eslint.config.mjs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export default defineConfig([
8989
'prettier/prettier': 'off',
9090

9191
// Disable rules from shared configs we're not ready for yet.
92-
'sonarjs/cognitive-complexity': ['warn', 20],
92+
'sonarjs/cognitive-complexity': ['error', 20],
9393
'sonarjs/no-duplicate-string': 'off',
9494

9595
//
@@ -152,8 +152,7 @@ export default defineConfig([
152152
'import/no-relative-packages': 'off',
153153
'react/jsx-fragments': 'off',
154154
'react/react-in-jsx-scope': 'off',
155-
'react-hooks/exhaustive-deps': 'off',
156-
'sonarjs/cognitive-complexity': ['warn', 45]
155+
'react-hooks/exhaustive-deps': 'off'
157156
}
158157
},
159158
{

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
"build:dev": "run-p -l lint build-angularsdk",
1818
"build:dev:ci": "npm run clean && npm install && npm run build:dev",
1919
"lint": "run-p -cl lint:*",
20-
"lint:es": "eslint --color --cache --cache-location node_modules/.cache/eslint/ \"projects/angular-test-app/src/**\" \"packages/angular-sdk-components/src/**\"",
20+
"lint:es": "eslint --color --cache --cache-location node_modules/.cache/eslint/ \"projects/angular-test-app/src/**\" \"packages/angular-sdk-components/src/**\" --max-warnings=0",
2121
"lint:format": "prettier --log-level warn -c .",
2222
"fix": "run-s -cl fix:*",
23-
"fix:es": "eslint --color --fix --cache --cache-location node_modules/.cache/eslint/ \"projects/angular-test-app/src/**\" \"packages/angular-sdk-components/src/**\"",
23+
"fix:es": "eslint --color --fix --cache --cache-location node_modules/.cache/eslint/ \"projects/angular-test-app/src/**\" \"packages/angular-sdk-components/src/**\" --max-warnings=0",
2424
"fix:format": "prettier --log-level warn -w .",
2525
"start-dev": "ng serve --port 3500",
2626
"start-dev-https": "ng serve --port 3500 --ssl --ssl-key ./keys/sdk-a.key --ssl-cert ./keys/sdk-a.crt",

packages/angular-sdk-components/src/lib/_components/field/auto-complete/auto-complete.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ interface AutoCompleteProps extends PConnFieldProps {
4242
MatAutocompleteModule,
4343
MatOptionModule,
4444
forwardRef(() => ComponentMapperComponent)
45-
]
45+
],
46+
providers: [DatapageService]
4647
})
4748
export class AutoCompleteComponent extends FieldBase implements OnInit {
4849
protected dataPageService = inject(DatapageService);

packages/angular-sdk-components/src/lib/_components/field/multiselect/utils.ts

Lines changed: 55 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,31 @@ function prepareSearchResults(listObjData, displayFieldMeta) {
8585
return searchResults;
8686
}
8787

88+
function handleGroupedDataSearch(dataApiObj, searchText, clickedGroup, initialCaseClass, itemsTree) {
89+
const localDataApiObj = cloneDeep(dataApiObj);
90+
localDataApiObj.fetchedNQData = false;
91+
localDataApiObj.cache = {};
92+
93+
if (!searchText && !clickedGroup) {
94+
return { shouldReturn: true, value: itemsTree };
95+
}
96+
97+
localDataApiObj.parameters[Object.keys(localDataApiObj.parameters)[1]] = searchText;
98+
localDataApiObj.parameters[Object.keys(localDataApiObj.parameters)[0]] = initialCaseClass;
99+
100+
if (clickedGroup) {
101+
if (!searchText) {
102+
const containsData = itemsTree.find(item => item.id === clickedGroup);
103+
if (containsData?.items?.length) {
104+
return { shouldReturn: true, value: itemsTree };
105+
}
106+
}
107+
localDataApiObj.parameters[Object.keys(localDataApiObj.parameters)[0]] = JSON.stringify([clickedGroup]);
108+
}
109+
110+
return { shouldReturn: false, value: localDataApiObj };
111+
}
112+
88113
async function doSearch(
89114
searchText,
90115
clickedGroup,
@@ -96,61 +121,44 @@ async function doSearch(
96121
showSecondaryInSearchOnly,
97122
selected
98123
) {
99-
let searchTextForUngroupedData = '';
100-
if (dataApiObj) {
101-
// creating dataApiObject in grouped data cases
102-
if (isGroupData) {
103-
dataApiObj = cloneDeep(dataApiObj);
104-
dataApiObj.fetchedNQData = false;
105-
dataApiObj.cache = {};
106-
107-
// if we have no search text and no group selected, return the original tree
108-
if (searchText === '' && clickedGroup === '') {
109-
return itemsTree;
110-
}
124+
if (!dataApiObj) {
125+
return itemsTree;
126+
}
111127

112-
// setting the inital search text & search classes in ApiObject
113-
dataApiObj.parameters[Object.keys(dataApiObj.parameters)[1]] = searchText;
114-
dataApiObj.parameters[Object.keys(dataApiObj.parameters)[0]] = initialCaseClass;
115-
116-
// if we have a selected group
117-
if (clickedGroup) {
118-
// check if the data for this group is already present and no search text
119-
if (searchText === '') {
120-
const containsData = itemsTree.find(item => item.id === clickedGroup);
121-
// do not make API call when items of respective group are already fetched
122-
if (containsData?.items?.length) return itemsTree;
123-
}
128+
let searchTextForApi = '';
129+
let localDataApiObj = dataApiObj;
124130

125-
dataApiObj.parameters[Object.keys(dataApiObj.parameters)[0]] = JSON.stringify([clickedGroup]);
126-
}
127-
} else {
128-
searchTextForUngroupedData = searchText;
131+
if (isGroupData) {
132+
const groupResult = handleGroupedDataSearch(dataApiObj, searchText, clickedGroup, initialCaseClass, itemsTree);
133+
if (groupResult.shouldReturn) {
134+
return groupResult.value;
129135
}
136+
localDataApiObj = groupResult.value;
137+
} else {
138+
searchTextForApi = searchText;
139+
}
130140

131-
// search API call
132-
const response = await dataApiObj.fetchData(searchTextForUngroupedData).catch(() => {
133-
return itemsTree;
134-
});
141+
const response = await localDataApiObj.fetchData(searchTextForApi).catch(() => ({ data: undefined }));
135142

136-
let listObjData = response.data;
137-
let newItemsTree = [];
138-
if (isGroupData) {
139-
if (searchText) {
140-
listObjData = prepareSearchResults(listObjData, displayFieldMeta);
141-
} else {
142-
newItemsTree = putItemsDataInItemsTree(listObjData, displayFieldMeta, itemsTree, showSecondaryInSearchOnly, selected);
143-
return newItemsTree;
144-
}
145-
}
146-
const showSecondaryData = showSecondaryInSearchOnly ? !!searchText : true;
147-
if (listObjData !== undefined && listObjData.length > 0) {
148-
newItemsTree = listObjData.map(entry => createSingleTreeObejct(entry, displayFieldMeta, showSecondaryData, selected));
143+
let listObjData = response.data;
144+
if (!listObjData) {
145+
return itemsTree;
146+
}
147+
148+
if (isGroupData) {
149+
if (searchText) {
150+
listObjData = prepareSearchResults(listObjData, displayFieldMeta);
151+
} else {
152+
return putItemsDataInItemsTree(listObjData, displayFieldMeta, itemsTree, showSecondaryInSearchOnly, selected);
149153
}
150-
return newItemsTree;
151154
}
152155

153-
return itemsTree;
156+
if (listObjData.length === 0) {
157+
return [];
158+
}
159+
160+
const showSecondaryData = showSecondaryInSearchOnly ? !!searchText : true;
161+
return listObjData.map(entry => createSingleTreeObejct(entry, displayFieldMeta, showSecondaryData, selected));
154162
}
155163

156164
function setValuesToPropertyList(searchText, assocProp, items, columns, actions, updatePropertyInRedux = true) {

0 commit comments

Comments
 (0)