diff --git a/package-lock.json b/package-lock.json index 5a08d32..4882a79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@manojadams/metaforms-core", - "version": "4.1.0-beta.1", + "version": "4.2.0-beta.140", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@manojadams/metaforms-core", - "version": "4.1.0-beta.1", + "version": "4.2.0-beta.140", "license": "MIT", "dependencies": { "@emotion/react": "^11.10.6", diff --git a/package.json b/package.json index 698b224..5ca13c2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@manojadams/metaforms-core", - "version": "4.1.0-beta.1", + "version": "4.2.0-beta.140", "description": "React Library for rendering dynamic forms from json schema", "author": "manojadams", "license": "MIT", diff --git a/src/constants/constants.ts b/src/constants/constants.ts index 51dfa66..431ce41 100644 --- a/src/constants/constants.ts +++ b/src/constants/constants.ts @@ -53,6 +53,7 @@ export const DEP_TYPE = { EQUALS: "equals", LOAD: "load", LOAD_OPTIONS: "loadOptions", + OPTIONS: "options", CHANGE: "change", VALIDATION: "validation", PROP_UPDATE: "propUpdate", diff --git a/src/utils/DependencyUtil.tsx b/src/utils/DependencyUtil.tsx index b77ddfa..1918003 100644 --- a/src/utils/DependencyUtil.tsx +++ b/src/utils/DependencyUtil.tsx @@ -71,12 +71,14 @@ class DependencyUtil { }; // eslint-disable-next-line no-fallthrough case DEP_TYPE.LOAD: + case DEP_TYPE.OPTIONS: { - const url = dependency.url; - const labelKey = dependency?.labelKey; - const valueKey = dependency?.valueKey; - const responseKey = dependency.responseKey; - const queryParams = dependency.queryParams; + const config = form[formSection][field].config; + const url = dependency.url || config?.url; + const labelKey = dependency?.labelKey || config?.labelKey; + const valueKey = dependency?.valueKey || config?.valueKey; + const responseKey = dependency.responseKey || config?.responseKey; + const queryParams = dependency.queryParams || config?.queryParams; const pathParams = dependency.pathParams; form[formSection][ref][D_KEY].push({ section, @@ -274,17 +276,23 @@ class DependencyUtil { } break; case DEP_TYPE.LOAD: + case DEP_TYPE.OPTIONS: if (value && dep.url) { const field = dep.field; // reset options metaform.setFieldOptions(dep.section, field, []); + metaform.setField(dep.section, field, ""); metaform .getData( { + url: dep.url, requestType: dep.requestType ?? API_METHOD.GET, requestBody: dep.requestBody, requestBodyParams: dep.requestBodyParams, - queryParams: dep.queryParams + queryParams: dep.queryParams, + labelKey: dep.labelKey, + valueKey: dep.valueKey, + responseKey: dep.responseKey }, value, section @@ -293,6 +301,17 @@ class DependencyUtil { metaform.setFieldOptions(dep.section, field, results); resolved.next(); }) + .then(() => { + // cascade + const subfield = metaform.getField(dep.section, field); + this.handleDependencies( + metaform, + dep.section, + field, + subfield.value, + false + ).then(() => resolved.next()); + }) .catch(() => { resolved.next(); });