Skip to content

Commit 710177e

Browse files
committed
one of fix
1 parent c66fe98 commit 710177e

File tree

6 files changed

+83
-21
lines changed

6 files changed

+83
-21
lines changed

packages/tdb-documents-ui/src/formActions.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { EDIT, OBJECT_TYPE } from "./constants"
1+
import { EDIT, ONEOFVALUES } from "./constants"
22

33
// function to remove all empty json object
44
// this is to remove all optional subdocument data other wise database will
@@ -21,6 +21,17 @@ function removeEmptyObject(data) {
2121
}, {});
2222
}
2323

24+
function removeOneOfPropertyFromDocumentLevel(data) {
25+
if(!data.hasOwnProperty(ONEOFVALUES)) return data
26+
let newData = data
27+
let oneOfData = data[ONEOFVALUES]
28+
delete newData[ONEOFVALUES]
29+
for(let choice in oneOfData) {
30+
newData[choice] = oneOfData[choice]
31+
}
32+
return newData
33+
}
34+
2435

2536

2637
/**
@@ -34,7 +45,8 @@ function removeEmptyObject(data) {
3445
*/
3546
export const handleSubmit = (data, onSubmit, setData, type, mode) => {
3647
if(onSubmit) {
37-
let formData=removeEmptyObject(data.formData)
48+
let alteredFormData=removeEmptyObject(data.formData)
49+
let formData=removeOneOfPropertyFromDocumentLevel(alteredFormData)
3850
console.log("Before submit: ", formData)
3951
setData(formData)
4052
let extracted = formData

packages/tdb-documents-ui/src/helpers/displayHelper.js

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -248,14 +248,46 @@ export function displayChoiceSubDocument (props, args, property, id) {
248248
props={props}/>
249249
}
250250

251+
function getOneOfFormData (props, args) {
252+
if(props.formData) return props.formData
253+
else if(!props.formData && args.formData) {
254+
// check args.formData if one of available at document level
255+
let choices = args.documentFrame[CONST.ONEOFVALUES], populatedFormData = {}
256+
choices.map(choice => {
257+
for(let val in choice){
258+
if(args.formData.hasOwnProperty(val)) {
259+
// filled form data available
260+
populatedFormData[val] = args.formData[val]
261+
}
262+
}
263+
})
264+
return populatedFormData
265+
}
266+
}
267+
251268
// ONE OF
252269
export function displayOneOfProperty(props, args, property, id) {
253-
const [oneOfDocumentData, setOneOfDocumentData] = useState(props.formData ? props.formData : {})
254-
255-
useEffect(() => {
256-
// formdata on change
270+
//const [oneOfDocumentData, setOneOfDocumentData] = useState(props.formData ? props.formData : {})
271+
const [oneOfDocumentData, setOneOfDocumentData] = useState(getOneOfFormData(props, args))
272+
273+
274+
/*useEffect(() => {
275+
257276
if(props.formData) setOneOfDocumentData(props.formData)
258-
}, [props.formData])
277+
else if(!props.formData && args.formData) {
278+
// check args.formData if one of available at document level
279+
let choices = args.documentFrame[CONST.ONEOFVALUES], populatedFormData = {}
280+
choices.map(choice => {
281+
for(let val in choice){
282+
if(args.formData.hasOwnProperty(val)) {
283+
// filled form data available
284+
populatedFormData[val] = args.formData[val]
285+
}
286+
}
287+
})
288+
setOneOfDocumentData(populatedFormData)
289+
}
290+
}, [props.formData])*/
259291

260292
return <TDBOneOfDocuments args={args}
261293
property={property}
@@ -491,7 +523,7 @@ export function displayBBoxDocument (props, args, property, id) {
491523
}
492524

493525

494-
// ARRAY
526+
// ARRAY
495527
export function displayArrayWidgets (props, args, extracted, property, expand, id, hideFieldLabel, linked_to) {
496528

497529
function handleArrayOnChange(data, selectedField) {
@@ -504,7 +536,8 @@ export function displayArrayWidgets (props, args, extracted, property, expand, i
504536
propertyName: property,
505537
id: fieldID,
506538
key: fieldID,
507-
formData: {},
539+
//formData: {},
540+
formData: !props.formData ? {} : { [property]: props.formData },
508541
required: true,
509542
mode: args.mode,
510543
args: args,

packages/tdb-documents-ui/src/helpers/fieldDisplay.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export const getDisplay = (props, args, property) => {
1616
//(props, args, property, dataType, id, onChange)
1717
return display.displayDataTypesWidget(props, args, property, field, props.id, props.onChange) // review
1818
}
19-
else if(util.isArrayTypeFromFrames(documentFrame, property)) {
19+
else if(util.isArrayTypeFromFrames(documentFrame, property) && property !== CONST.COORDINATES_FIELD) {
2020
// ARRAY TYPES
2121
if(props.mode === CONST.VIEW && props.formData === "") return <div/>
2222
let id = props.id, linked_to=props.linked_to

packages/tdb-documents-ui/src/tests/constants/geoJSON.datatypes.constants.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ export const MULTI_POLYGON_DATA_TYPE_EDIT_DATA = {
500500
["51.52", "-0.12"]
501501
]
502502
],
503-
"type": "MultiPolygon"
503+
"type": "MultiPolygon"
504504
}
505505

506506
export const SUBDOCUMENT_LINE_STRING_CREATE_DATA = {

packages/tdb-documents-ui/src/tests/nestedLineString.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import '@testing-library/jest-dom'
66
import { logRoles } from '@testing-library/dom';
77
import selectEvent from 'react-select-event'
88
import { extractPropertyDocumentation } from '../helpers/widgetHelper';
9-
9+
1010
describe("Create a location with Line String", () => {
1111

1212
/**

packages/tdb-documents-ui/src/widgets/oneOfDocumentsWidget.js

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ const OneOfChoice = ({ oneOfKey, args, props, oneOf, oneOfIndex, setOneOfDocumen
8383

8484
useEffect(() => {
8585
if(selected) {
86-
if(mode === CONST.EDIT) {
86+
/*if(mode === CONST.EDIT) {
87+
// old logic
8788
if(props.formData && props.formData.hasOwnProperty(CONST.TYPE) &&
8889
selected === selectedChoice) {
8990
setOneOfDocumentData(props.formData)
@@ -96,10 +97,15 @@ const OneOfChoice = ({ oneOfKey, args, props, oneOf, oneOfIndex, setOneOfDocumen
9697
setOneOfDocumentData(newData)
9798
if(props.onChange) props.onChange(newData, CONST.ONEOFVALUES, selected)
9899
}
99-
}
100+
}*/
100101
if(args.documentFrame[CONST.ONEOFVALUES][currentOneOf][selected] === SYS_UNIT_DATA_TYPE) {
101102
// SET DEFAULT VALUE [] if selected is sys:Unit type
102-
if(props.onChange) props.onChange([], CONST.ONEOFVALUES, selected)
103+
//if(props.onChange) props.onChange([], CONST.ONEOFVALUES, selected)
104+
let temp_selected = oneOfDocumentData
105+
temp_selected[selected] = []
106+
setOneOfDocumentData(temp_selected)
107+
//setOneOfData(data)
108+
props.onChange(temp_selected)
103109
}
104110
}
105111
}, [selected])
@@ -112,15 +118,25 @@ const OneOfChoice = ({ oneOfKey, args, props, oneOf, oneOfIndex, setOneOfDocumen
112118
}
113119

114120
function handleEachOneOfChange(data, name, selectedIndex) {
115-
let temp = data
121+
116122
//temp[selectedIndex] = data
117123
//let temp = oneOfDocumentData
118124
//temp[selected] = data
119-
setOneOfDocumentData(temp)
120-
setOneOfData(temp)
125+
121126
if(props.onChange) {
122-
if(selectedIndex) props.onChange(temp)
123-
else props.onChange(temp, name, selected)
127+
if(selectedIndex) {
128+
let temp_selected = oneOfDocumentData
129+
temp_selected[selected] = data
130+
setOneOfDocumentData(temp_selected)
131+
setOneOfData(data)
132+
props.onChange(temp_selected)
133+
}
134+
else {
135+
let temp = data
136+
setOneOfDocumentData(temp)
137+
setOneOfData(temp)
138+
props.onChange(temp, name, selected)
139+
}
124140
}
125141
}
126142

@@ -148,7 +164,7 @@ const OneOfChoice = ({ oneOfKey, args, props, oneOf, oneOfIndex, setOneOfDocumen
148164

149165
function getSelected(oneOfDocumentData, oneOf) {
150166
for(let choice in oneOf){
151-
if(oneOfDocumentData.hasOwnProperty(choice)) return choice
167+
if(oneOfDocumentData.hasOwnProperty(choice)) return choice
152168
}
153169
return false
154170
}
@@ -175,6 +191,7 @@ export const TDBOneOfDocuments = ({ args, props, property, id, setOneOfDocumentD
175191
documentFrame["@oneOf"].map((oneOf, index) => {
176192
let choices = util.getOneOfChoices(oneOf)
177193
let oneOfKey = `${id}__${index}`
194+
178195
return <div className="mb-3" key={oneOfKey}>
179196
<OneOfChoice oneOfKey={oneOfKey}
180197
args={args}

0 commit comments

Comments
 (0)