diff options
author | Ravi Pendurty <ravi.pendurty@highstreet-technologies.com> | 2023-12-19 17:13:25 +0530 |
---|---|---|
committer | Ravi Pendurty <ravi.pendurty@highstreet-technologies.com> | 2023-12-19 17:13:25 +0530 |
commit | c5b8756512cb6dfbb0093514af7924cb3e78699b (patch) | |
tree | 7202621ea816d666bbce482b420ef574280a1c0a /sdnr/wt/odlux/apps/configurationApp/src/actions | |
parent | dfd91573b7567e1dab482f17111ab8f809553d99 (diff) |
Delete wt/odlux directory
New directory for odlux is sdnr/wt-odlux
Issue-ID: CCSDK-3971
Change-Id: Ia0f8ba38d913a3d3bcde999b871794c65d5e575e
Signed-off-by: Ravi Pendurty <ravi.pendurty@highstreet-technologies.com>
Diffstat (limited to 'sdnr/wt/odlux/apps/configurationApp/src/actions')
-rw-r--r-- | sdnr/wt/odlux/apps/configurationApp/src/actions/deviceActions.ts | 626 |
1 files changed, 0 insertions, 626 deletions
diff --git a/sdnr/wt/odlux/apps/configurationApp/src/actions/deviceActions.ts b/sdnr/wt/odlux/apps/configurationApp/src/actions/deviceActions.ts deleted file mode 100644 index 187e9bccb..000000000 --- a/sdnr/wt/odlux/apps/configurationApp/src/actions/deviceActions.ts +++ /dev/null @@ -1,626 +0,0 @@ -import { Action } from '../../../../framework/src/flux/action'; -import { Dispatch } from '../../../../framework/src/flux/store'; -import { IApplicationStoreState } from '../../../../framework/src/store/applicationStore'; -import { PushAction, ReplaceAction } from '../../../../framework/src/actions/navigationActions'; -import { AddErrorInfoAction } from '../../../../framework/src/actions/errorActions'; - -import { DisplayModeType, DisplaySpecification } from '../handlers/viewDescriptionHandler'; - -import { restService } from '../services/restServices'; -import { YangParser } from '../yang/yangParser'; -import { Module } from '../models/yang'; -import { - ViewSpecification, - ViewElement, - isViewElementReference, - isViewElementList, - ViewElementString, -} from '../models/uiModels'; - -import { - checkResponseCode, - splitVPath, - filterViewElements, - flattenViewElements, - getReferencedDataList, - resolveViewDescription, -} from '../utilities/viewEngineHelper'; - -export class EnableValueSelector extends Action { - constructor(public listSpecification: ViewSpecification, public listData: any[], public keyProperty: string, public onValueSelected : (value: any) => void ) { - super(); - } -} - -export class SetCollectingSelectionData extends Action { - constructor(public busy: boolean) { - super(); - } -} - -export class SetSelectedValue extends Action { - constructor(public value: any) { - super(); - } -} - -export class UpdateDeviceDescription extends Action { - constructor( public nodeId: string, public modules: { [name:string]: Module }, public views: ViewSpecification[]) { - super(); - } -} - -export class UpdateViewDescription extends Action { - constructor(public vPath: string, public viewData: any, public displaySpecification: DisplaySpecification = { displayMode: DisplayModeType.doNotDisplay }) { - super(); - } -} - -export class UpdateOutputData extends Action { - constructor(public outputData: any) { - super(); - } -} - -export const updateNodeIdAsyncActionCreator = (nodeId: string) => async (dispatch: Dispatch, _getState: () => IApplicationStoreState ) => { - - dispatch(new UpdateDeviceDescription('', {}, [])); - dispatch(new SetCollectingSelectionData(true)); - - const { availableCapabilities, unavailableCapabilities, importOnlyModules } = await restService.getCapabilitiesByMountId(nodeId); - - if (!availableCapabilities || availableCapabilities.length <= 0) { - dispatch(new SetCollectingSelectionData(false)); - dispatch(new UpdateDeviceDescription(nodeId, {}, [])); - dispatch(new UpdateViewDescription('', [], { - displayMode: DisplayModeType.displayAsMessage, - renderMessage: `NetworkElement : "${nodeId}" has no capabilities.`, - })); - throw new Error(`NetworkElement : [${nodeId}] has no capabilities.`); - } - - const parser = new YangParser( - nodeId, - availableCapabilities.reduce((acc, cur) => { - acc[cur.capability] = cur.version; - return acc; - }, {} as { [key: string]: string }), - unavailableCapabilities || undefined, - importOnlyModules || undefined, - ); - - for (let i = 0; i < availableCapabilities.length; ++i) { - const capRaw = availableCapabilities[i]; - try { - await parser.addCapability(capRaw.capability, capRaw.version); - } catch (err) { - console.error(`Error in ${capRaw.capability} ${capRaw.version}`, err); - } - } - - parser.postProcess(); - - dispatch(new SetCollectingSelectionData(false)); - - if (process.env.NODE_ENV === 'development' ) { - console.log(parser, parser.modules, parser.views); - } - - return dispatch(new UpdateDeviceDescription(nodeId, parser.modules, parser.views)); -}; - -export const postProcessDisplaySpecificationActionCreator = (vPath: string, viewData: any, displaySpecification: DisplaySpecification) => async (dispatch: Dispatch, _getState: () => IApplicationStoreState) => { - - if (displaySpecification.displayMode === DisplayModeType.displayAsObject) { - displaySpecification = { - ...displaySpecification, - viewSpecification: await filterViewElements(vPath, viewData, displaySpecification.viewSpecification), - }; - } - - dispatch(new UpdateViewDescription(vPath, viewData, displaySpecification)); -}; - -export const updateViewActionAsyncCreator = (vPath: string) => async (dispatch: Dispatch, getState: () => IApplicationStoreState) => { - const pathParts = splitVPath(vPath, /(?:([^\/\["]+)(?:\[([^\]]*)\])?)/g); // 1 = property / 2 = optional key - const { configuration: { deviceDescription: { nodeId, modules, views } } } = getState(); - let dataPath = `/rests/data/network-topology:network-topology/topology=topology-netconf/node=${nodeId}/yang-ext:mount`; - - let inputViewSpecification: ViewSpecification | undefined = undefined; - let outputViewSpecification: ViewSpecification | undefined = undefined; - - let viewSpecification: ViewSpecification = views[0]; - let viewElement: ViewElement; - - let dataMember: string; - let extractList: boolean = false; - - let currentNS: string | null = null; - let defaultNS: string | null = null; - - dispatch(new SetCollectingSelectionData(true)); - try { - for (let ind = 0; ind < pathParts.length; ++ind) { - const [property, key] = pathParts[ind]; - const namespaceInd = property && property.indexOf(':') || -1; - const namespace: string | null = namespaceInd > -1 ? (currentNS = property.slice(0, namespaceInd)) : currentNS; - - if (ind === 0) { defaultNS = namespace; } - - viewElement = viewSpecification.elements[property] || viewSpecification.elements[`${namespace}:${property}`]; - if (!viewElement) throw Error('Property [' + property + '] does not exist.'); - - if (viewElement.isList && !key) { - if (pathParts.length - 1 > ind) { - dispatch(new SetCollectingSelectionData(false)); - throw new Error('No key for list [' + property + ']'); - } else if (vPath.endsWith('[]') && pathParts.length - 1 === ind) { - - // empty key is used for new element - if (viewElement && 'viewId' in viewElement) viewSpecification = views[+viewElement.viewId]; - const data = Object.keys(viewSpecification.elements).reduce<{ [name: string]: any }>((acc, cur) => { - const elm = viewSpecification.elements[cur]; - if (elm.default) { - acc[elm.id] = elm.default || ''; - } - return acc; - }, {}); - - // create display specification - const ds: DisplaySpecification = { - displayMode: DisplayModeType.displayAsObject, - viewSpecification: resolveViewDescription(defaultNS, vPath, viewSpecification), - keyProperty: isViewElementList(viewElement!) && viewElement.key || undefined, - }; - - // update display specification - return dispatch(postProcessDisplaySpecificationActionCreator(vPath, data, ds)); - } - if (viewElement && isViewElementList(viewElement) && viewSpecification.parentView === '0') { - // check if there is a reference as key - const listSpecification = views[+viewElement.viewId]; - const keyElement = viewElement.key && listSpecification.elements[viewElement.key]; - if (keyElement && isViewElementReference(keyElement)) { - const refList = await getReferencedDataList(keyElement.referencePath, dataPath, modules, views); - if (!refList) { - throw new Error(`Could not find refList for [${keyElement.referencePath}].`); - } - if (!refList.key) { - throw new Error(`Key property not found for [${keyElement.referencePath}].`); - } - dispatch(new EnableValueSelector(refList.view, refList.data, refList.key, (refKey) => { - window.setTimeout(() => dispatch(new PushAction(`${vPath}[${refKey.replace(/\//ig, '%2F')}]`))); - })); - } else { - // Found a list at root level of a module w/o a reference key. - dataPath += `?&fields=${encodeURIComponent(viewElement.id)}(${encodeURIComponent(viewElement.key || '')})`; - const restResult = (await restService.getConfigData(dataPath)); - if (restResult && restResult.status === 200 && restResult.data && restResult.data[viewElement.id] ) { - // spoof the not existing view here - const refData = restResult.data[viewElement.id]; - if (!Array.isArray(refData) || !refData.length) { - throw new Error('Found a list at root level of a module containing no keys.'); - } - if (refData.length > 1) { - const refView : ViewSpecification = { - id: '-1', - canEdit: false, - config: false, - language: 'en-US', - elements: { - [viewElement.key!] : { - uiType: 'string', - config: false, - id: viewElement.key, - label: viewElement.key, - isList: true, - } as ViewElementString, - }, - }; - dispatch(new EnableValueSelector(refView, refData, viewElement.key!, (refKey) => { - window.setTimeout(() => dispatch(new PushAction(`${vPath}[${refKey.replace(/\//ig, '%2F')}]`))); - })); - } else { - window.setTimeout(() => dispatch(new PushAction(`${vPath}[${refData[0]?.id.replace(/\//ig, '%2F')}]`))); - } - } else { - throw new Error('Found a list at root level of a module and could not determine the keys.'); - } - dispatch(new SetCollectingSelectionData(false)); - } - return; - } - extractList = true; - } else { - // normal case & replaces unicode %2C if present - dataPath += `/${property}${key ? `=${key.replace(/,/ig, '%2C').replace(/\//ig, '%2F')}` : ''}`; - - // in case of the root element the required namespace will be added later, - // while extracting the data - dataMember = namespace === defaultNS - ? viewElement.label - : `${namespace}:${viewElement.label}`; - extractList = false; - } - - if (viewElement && 'viewId' in viewElement) { - viewSpecification = views[+viewElement.viewId]; - } else if (viewElement.uiType === 'rpc') { - viewSpecification = views[+(viewElement.inputViewId || 0)]; - - // create new instance & flaten - inputViewSpecification = viewElement.inputViewId != null && { - ...views[+(viewElement.inputViewId || 0)], - elements: flattenViewElements(defaultNS, '', views[+(viewElement.inputViewId || 0)].elements, views, viewElement.label), - } || undefined; - outputViewSpecification = viewElement.outputViewId != null && { - ...views[+(viewElement.outputViewId || 0)], - elements: flattenViewElements(defaultNS, '', views[+(viewElement.outputViewId || 0)].elements, views, viewElement.label), - } || undefined; - - } - } - - let data: any = {}; - // do not get any data from netconf if there is no view specified || this is the root element [0] || this is an rpc - if (viewSpecification && !(viewSpecification.id === '0' || viewElement!.uiType === 'rpc')) { - const restResult = (await restService.getConfigData(dataPath)); - if (!restResult.data) { - // special case: if this is a list without any response - if (extractList && restResult.status === 404) { - if (!isViewElementList(viewElement!)) { - throw new Error(`vPath: [${vPath}]. ViewElement has no key.`); - } - // create display specification - const ds: DisplaySpecification = { - displayMode: extractList ? DisplayModeType.displayAsList : DisplayModeType.displayAsObject, - viewSpecification: resolveViewDescription(defaultNS, vPath, viewSpecification), - keyProperty: viewElement.key, - }; - - // update display specification - return dispatch(postProcessDisplaySpecificationActionCreator(vPath, [], ds)); - } - throw new Error(`Did not get response from Server. Status: [${restResult.status}]`); - } else if (checkResponseCode(restResult)) { - const message = restResult.data.errors && restResult.data.errors.error && restResult.data.errors.error[0] && restResult.data.errors.error[0]['error-message'] || ''; - throw new Error(`Server Error. Status: [${restResult.status}]\n${message}`); - } else { - // https://tools.ietf.org/html/rfc7951#section-4 the root element may contain a namespace or not ! - data = restResult.data[`${defaultNS}:${dataMember!}`]; - if (data === undefined) { - data = restResult.data[dataMember!]; // extract dataMember w/o namespace - } - } - - // extract the first element list[key] - data = data instanceof Array - ? data[0] - : data; - - // extract the list -> key: list - data = extractList - ? data[viewElement!.id] || data[viewElement!.label] || [] // if the list is empty, it does not exist - : data; - - } else if (viewElement! && viewElement!.uiType === 'rpc') { - // set data to defaults - data = {}; - if (inputViewSpecification) { - Object.keys(inputViewSpecification.elements).forEach(key => { - const elm = inputViewSpecification && inputViewSpecification.elements[key]; - if (elm && elm.default != undefined) { - data[elm.id] = elm.default; - } - }); - } - } - - // create display specification - const ds: DisplaySpecification = viewElement! && viewElement!.uiType === 'rpc' - ? { - dataPath, - displayMode: DisplayModeType.displayAsRPC, - inputViewSpecification: inputViewSpecification && resolveViewDescription(defaultNS, vPath, inputViewSpecification), - outputViewSpecification: outputViewSpecification && resolveViewDescription(defaultNS, vPath, outputViewSpecification), - } - : { - dataPath, - displayMode: extractList ? DisplayModeType.displayAsList : DisplayModeType.displayAsObject, - viewSpecification: resolveViewDescription(defaultNS, vPath, viewSpecification), - keyProperty: isViewElementList(viewElement!) && viewElement.key || undefined, - - // eslint-disable-next-line max-len - apidocPath: isViewElementList(viewElement!) && `/apidoc/explorer/index.html?urls.primaryName=$$$standard$$$#/mounted%20${nodeId}%20${viewElement!.module || 'MODULE_NOT_DEFINED'}/$$$action$$$_${dataPath.replace(/^\//, '').replace(/[\/=\-\:]/g, '_')}_${viewElement! != null ? `${viewElement.id.replace(/[\/=\-\:]/g, '_')}_` : '' }` || undefined, - }; - - // update display specification - return dispatch(postProcessDisplaySpecificationActionCreator(vPath, data, ds)); - // https://server.com/#/configuration/Sim12600/core-model:network-element/ltp[LTP-MWPS-TTP-01] - // https://server.com/#/configuration/Sim12600/core-model:network-element/ltp[LTP-MWPS-TTP-01]/lp - } catch (error) { - history.back(); - dispatch(new AddErrorInfoAction({ title: 'Problem', message: error.message || `Could not process ${dataPath}` })); - dispatch(new SetCollectingSelectionData(false)); - } finally { - return; - } -}; - -export const updateDataActionAsyncCreator = (vPath: string, data: any) => async (dispatch: Dispatch, getState: () => IApplicationStoreState) => { - const pathParts = splitVPath(vPath, /(?:([^\/\["]+)(?:\[([^\]]*)\])?)/g); // 1 = property / 2 = optional key - const { configuration: { deviceDescription: { nodeId, views } } } = getState(); - let dataPath = `/rests/data/network-topology:network-topology/topology=topology-netconf/node=${nodeId}/yang-ext:mount`; - let viewSpecification: ViewSpecification = views[0]; - let viewElement: ViewElement; - let dataMember: string; - let embedList: boolean = false; - let isNew: string | false = false; - - let currentNS: string | null = null; - let defaultNS: string | null = null; - - dispatch(new SetCollectingSelectionData(true)); - try { - for (let ind = 0; ind < pathParts.length; ++ind) { - let [property, key] = pathParts[ind]; - const namespaceInd = property && property.indexOf(':') || -1; - const namespace: string | null = namespaceInd > -1 ? (currentNS = property.slice(0, namespaceInd)) : currentNS; - - if (ind === 0) { defaultNS = namespace; } - viewElement = viewSpecification.elements[property] || viewSpecification.elements[`${namespace}:${property}`]; - if (!viewElement) throw Error('Property [' + property + '] does not exist.'); - - if (isViewElementList(viewElement) && !key) { - embedList = true; - if (viewElement && viewElement.isList && viewSpecification.parentView === '0') { - throw new Error('Found a list at root level of a module w/o a refenrece key.'); - } - if (pathParts.length - 1 > ind) { - dispatch(new SetCollectingSelectionData(false)); - throw new Error('No key for list [' + property + ']'); - } else if (vPath.endsWith('[]') && pathParts.length - 1 === ind) { - // handle new element with any number of arguments - let keyList = viewElement.key?.split(' '); - let dataPathParam = keyList?.map(id => data[id]).join(','); - key = viewElement.key && String(dataPathParam) || ''; - isNew = key; - if (!key) { - dispatch(new SetCollectingSelectionData(false)); - throw new Error('No value for key [' + viewElement.key + '] in list [' + property + ']'); - } - } - } - - dataPath += `/${property}${key ? `=${key.replace(/\//ig, '%2F')}` : ''}`; - dataMember = viewElement.label; - embedList = false; - - if (viewElement && 'viewId' in viewElement) { - viewSpecification = views[+viewElement.viewId]; - } - } - - // remove read-only elements - const removeReadOnlyElements = (pViewSpecification: ViewSpecification, isList: boolean, pData: any) => { - if (isList) { - return pData.map((elm : any) => removeReadOnlyElements(pViewSpecification, false, elm)); - } else { - return Object.keys(pData).reduce<{ [key: string]: any }>((acc, cur)=>{ - const [nsOrName, name] = cur.split(':', 1); - const element = pViewSpecification.elements[cur] || pViewSpecification.elements[nsOrName] || pViewSpecification.elements[name]; - if (!element && process.env.NODE_ENV === 'development' ) { - throw new Error('removeReadOnlyElements: Could not determine elment for data.'); - } - if (element && element.config) { - if (element.uiType === 'object') { - const view = views[+element.viewId]; - if (!view) { - throw new Error('removeReadOnlyElements: Internal Error could not determine viewId: ' + element.viewId); - } - acc[cur] = removeReadOnlyElements(view, element.isList != null && element.isList, pData[cur]); - } else { - acc[cur] = pData[cur]; - } - } - return acc; - }, {}); - } - }; - data = removeReadOnlyElements(viewSpecification, embedList, data); - - - // embed the list -> key: list - data = embedList - ? { [viewElement!.label]: data } - : data; - - // embed the first element list[key] - data = isNew - ? [data] - : data; - - // do not extract root member (0) - if (viewSpecification && viewSpecification.id !== '0') { - const updateResult = await restService.setConfigData(dataPath, { [`${currentNS}:${dataMember!}`]: data }); // addDataMember using currentNS - if (checkResponseCode(updateResult)) { - const message = updateResult.data && updateResult.data.errors && updateResult.data.errors.error && updateResult.data.errors.error[0] && updateResult.data.errors.error[0]['error-message'] || ''; - throw new Error(`Server Error. Status: [${updateResult.status}]\n${message || updateResult.message || ''}`); - } - } - - if (isNew) { - return dispatch(new ReplaceAction(`/configuration/${nodeId}/${vPath.replace(/\[\]$/i, `[${isNew}]`)}`)); // navigate to new element - } - - // create display specification - const ds: DisplaySpecification = { - displayMode: embedList ? DisplayModeType.displayAsList : DisplayModeType.displayAsObject, - viewSpecification: resolveViewDescription(defaultNS, vPath, viewSpecification), - keyProperty: isViewElementList(viewElement!) && viewElement.key || undefined, - }; - - // update display specification - return dispatch(new UpdateViewDescription(vPath, data, ds)); - } catch (error) { - history.back(); - dispatch(new AddErrorInfoAction({ title: 'Problem', message: error.message || `Could not change ${dataPath}` })); - - } finally { - dispatch(new SetCollectingSelectionData(false)); - return; - } -}; - -export const removeElementActionAsyncCreator = (vPath: string) => async (dispatch: Dispatch, getState: () => IApplicationStoreState) => { - const pathParts = splitVPath(vPath, /(?:([^\/\["]+)(?:\[([^\]]*)\])?)/g); // 1 = property / 2 = optional key - const { configuration: { deviceDescription: { nodeId, views } } } = getState(); - let dataPath = `/rests/data/network-topology:network-topology/topology=topology-netconf/node=${nodeId}/yang-ext:mount`; - let viewSpecification: ViewSpecification = views[0]; - let viewElement: ViewElement; - - let currentNS: string | null = null; - - dispatch(new SetCollectingSelectionData(true)); - try { - for (let ind = 0; ind < pathParts.length; ++ind) { - let [property, key] = pathParts[ind]; - const namespaceInd = property && property.indexOf(':') || -1; - const namespace: string | null = namespaceInd > -1 ? (currentNS = property.slice(0, namespaceInd)) : currentNS; - - viewElement = viewSpecification.elements[property] || viewSpecification.elements[`${namespace}:${property}`]; - if (!viewElement) throw Error('Property [' + property + '] does not exist.'); - - if (isViewElementList(viewElement) && !key) { - if (viewElement && viewElement.isList && viewSpecification.parentView === '0') { - throw new Error('Found a list at root level of a module w/o a reference key.'); - } - if (pathParts.length - 1 > ind) { - dispatch(new SetCollectingSelectionData(false)); - throw new Error('No key for list [' + property + ']'); - } else if (vPath.endsWith('[]') && pathParts.length - 1 === ind) { - // remove the whole table - } - } - - dataPath += `/${property}${key ? `=${key.replace(/\//ig, '%2F')}` : ''}`; - - if (viewElement && 'viewId' in viewElement) { - viewSpecification = views[+viewElement.viewId]; - } else if (viewElement.uiType === 'rpc') { - viewSpecification = views[+(viewElement.inputViewId || 0)]; - } - } - - const updateResult = await restService.removeConfigElement(dataPath); - if (checkResponseCode(updateResult)) { - const message = updateResult.data && updateResult.data.errors && updateResult.data.errors.error && updateResult.data.errors.error[0] && updateResult.data.errors.error[0]['error-message'] || ''; - throw new Error(`Server Error. Status: [${updateResult.status}]\n${message || updateResult.message || ''}`); - } - } catch (error) { - dispatch(new AddErrorInfoAction({ title: 'Problem', message: error.message || `Could not remove ${dataPath}` })); - } finally { - dispatch(new SetCollectingSelectionData(false)); - } -}; - -export const executeRpcActionAsyncCreator = (vPath: string, data: any) => async (dispatch: Dispatch, getState: () => IApplicationStoreState) => { - const pathParts = splitVPath(vPath, /(?:([^\/\["]+)(?:\[([^\]]*)\])?)/g); // 1 = property / 2 = optional key - const { configuration: { deviceDescription: { nodeId, views } } } = getState(); - let dataPath = `/rests/operations/network-topology:network-topology/topology=topology-netconf/node=${nodeId}/yang-ext:mount`; - let viewSpecification: ViewSpecification = views[0]; - let viewElement: ViewElement; - let dataMember: string; - let embedList: boolean = false; - let isNew: string | false = false; - - let currentNS: string | null = null; - let defaultNS: string | null = null; - - dispatch(new SetCollectingSelectionData(true)); - try { - for (let ind = 0; ind < pathParts.length; ++ind) { - let [property, key] = pathParts[ind]; - const namespaceInd = property && property.indexOf(':') || -1; - const namespace: string | null = namespaceInd > -1 ? (currentNS = property.slice(0, namespaceInd)) : currentNS; - - if (ind === 0) { defaultNS = namespace; } - viewElement = viewSpecification.elements[property] || viewSpecification.elements[`${namespace}:${property}`]; - if (!viewElement) throw Error('Property [' + property + '] does not exist.'); - - if (isViewElementList(viewElement) && !key) { - embedList = true; - // if (viewElement && viewElement.isList && viewSpecification.parentView === "0") { - // throw new Error("Found a list at root level of a module w/o a reference key."); - // } - // if (pathParts.length - 1 > ind) { - // dispatch(new SetCollectingSelectionData(false)); - // throw new Error("No key for list [" + property + "]"); - // } else if (vPath.endsWith("[]") && pathParts.length - 1 === ind) { - // // handle new element - // key = viewElement.key && String(data[viewElement.key]) || ""; - // isNew = key; - // if (!key) { - // dispatch(new SetCollectingSelectionData(false)); - // throw new Error("No value for key [" + viewElement.key + "] in list [" + property + "]"); - // } - // } - } - - dataPath += `/${property}${key ? `=${key.replace(/\//ig, '%2F')}` : ''}`; - dataMember = viewElement.label; - embedList = false; - - if (viewElement && 'viewId' in viewElement) { - viewSpecification = views[+viewElement.viewId]; - } else if (viewElement.uiType === 'rpc') { - viewSpecification = views[+(viewElement.inputViewId || 0)]; - } - } - - // re-inflate formerly flatten rpc data - data = data && Object.keys(data).reduce < { [name: string ]: any }>((acc, cur) => { - const innerPathParts = cur.split('.'); - let pos = 0; - const updatePath = (obj: any, key: string) => { - obj[key] = (pos >= innerPathParts.length) - ? data[cur] - : updatePath(obj[key] || {}, innerPathParts[pos++]); - return obj; - }; - updatePath(acc, innerPathParts[pos++]); - return acc; - }, {}) || null; - - // embed the list -> key: list - data = embedList - ? { [viewElement!.label]: data } - : data; - - // embed the first element list[key] - data = isNew - ? [data] - : data; - - // do not post root member (0) - if ((viewSpecification && viewSpecification.id !== '0') || (dataMember! && !data)) { - const updateResult = await restService.executeRpc(dataPath, { [`${defaultNS}:input`]: data || {} }); - if (checkResponseCode(updateResult)) { - const message = updateResult.data && updateResult.data.errors && updateResult.data.errors.error && updateResult.data.errors.error[0] && updateResult.data.errors.error[0]['error-message'] || ''; - throw new Error(`Server Error. Status: [${updateResult.status}]\n${message || updateResult.message || ''}`); - } - dispatch(new UpdateOutputData(updateResult.data)); - } else { - throw new Error('There is NO RPC specified.'); - } - - - // // update display specification - // return - } catch (error) { - dispatch(new AddErrorInfoAction({ title: 'Problem', message: error.message || `Could not change ${dataPath}` })); - - } finally { - dispatch(new SetCollectingSelectionData(false)); - } -}; |