open-vault/ui/app/utils/openapi-to-attrs.js
Jordan Reimer 5c2a08de6d
Ember Upgrade to 3.24 (#13443)
* Update browserslist

* Add browserslistrc

* ember-cli-update --to 3.26, fix conflicts

* Run codemodes that start with ember-*

* More codemods - before cp*

* More codemods (curly data-test-*)

* WIP ember-basic-dropdown template errors

* updates ember-basic-dropdown and related deps to fix build issues

* updates basic dropdown instances to new version API

* updates more deps -- ember-template-lint is working again

* runs no-implicit-this codemod

* creates and runs no-quoteless-attributes codemod

* runs angle brackets codemod

* updates lint:hbs globs to only touch hbs files

* removes yield only templates

* creates and runs deprecated args transform

* supresses lint error for invokeAction on LinkTo component

* resolves remaining ambiguous path lint errors

* resolves simple-unless lint errors

* adds warnings for deprecated tagName arg on LinkTo components

* adds warnings for remaining curly component invocation

* updates global template lint rules

* resolves remaining template lint errors

* disables some ember specfic lint rules that target pre octane patterns

* js lint fix run

* resolves remaining js lint errors

* fixes test run

* adds npm-run-all dep

* fixes test attribute issues

* fixes console acceptance tests

* fixes tests

* adds yield only wizard/tutorial-active template

* fixes more tests

* attempts to fix more flaky tests

* removes commented out settled in transit test

* updates deprecations workflow and adds initializer to filter by version

* updates flaky policies acl old test

* updates to flaky transit test

* bumps ember deps down to LTS version

* runs linters after main merge

* fixes client count tests after bad merge conflict fixes

* fixes client count history test

* more updates to lint config

* another round of hbs lint fixes after extending stylistic rule

* updates lint-staged commands

* removes indent eslint rule since it seems to break things

* fixes bad attribute in transform-edit-form template

* test fixes

* fixes enterprise tests

* adds changelog

* removes deprecated ember-concurrency-test-waiters dep and adds @ember/test-waiters

* flaky test fix

Co-authored-by: hashishaw <cshaw@hashicorp.com>
2021-12-16 20:44:29 -07:00

119 lines
3.2 KiB
JavaScript

import { attr } from '@ember-data/model';
import { assign } from '@ember/polyfills';
import { camelize, capitalize } from '@ember/string';
export const expandOpenApiProps = function (props) {
let attrs = {};
// expand all attributes
for (const propName in props) {
const prop = props[propName];
let { description, items, type, format, isId, deprecated } = prop;
if (deprecated === true) {
continue;
}
let { name, value, group, sensitive, editType } = prop['x-vault-displayAttrs'] || {};
if (type === 'integer') {
type = 'number';
}
editType = editType || type;
if (format === 'seconds') {
editType = 'ttl';
} else if (items) {
editType = items.type + capitalize(type);
}
let attrDefn = {
editType,
helpText: description,
possibleValues: prop['enum'],
fieldValue: isId ? 'id' : null,
fieldGroup: group || 'default',
readOnly: isId,
defaultValue: value || null,
};
if (type === 'object' && !!value) {
attrDefn.defaultValue = () => {
return value;
};
}
if (sensitive) {
attrDefn.sensitive = true;
}
//only set a label if we have one from OpenAPI
//otherwise the propName will be humanized by the form-field component
if (name) {
attrDefn.label = name;
}
// ttls write as a string and read as a number
// so setting type on them runs the wrong transform
if (editType !== 'ttl' && type !== 'array') {
attrDefn.type = type;
}
// loop to remove empty vals
for (let attrProp in attrDefn) {
if (attrDefn[attrProp] == null) {
delete attrDefn[attrProp];
}
}
attrs[camelize(propName)] = attrDefn;
}
return attrs;
};
export const combineAttributes = function (oldAttrs, newProps) {
let newAttrs = {};
let newFields = [];
if (oldAttrs) {
oldAttrs.forEach(function (value, name) {
if (newProps[name]) {
newAttrs[name] = attr(newProps[name].type, assign({}, newProps[name], value.options));
} else {
newAttrs[name] = attr(value.type, value.options);
}
});
}
for (let prop in newProps) {
if (newAttrs[prop]) {
continue;
} else {
newAttrs[prop] = attr(newProps[prop].type, newProps[prop]);
newFields.push(prop);
}
}
return { attrs: newAttrs, newFields };
};
export const combineFields = function (currentFields, newFields, excludedFields) {
let otherFields = newFields.filter((field) => {
return !currentFields.includes(field) && !excludedFields.includes(field);
});
if (otherFields.length) {
currentFields = currentFields.concat(otherFields);
}
return currentFields;
};
export const combineFieldGroups = function (currentGroups, newFields, excludedFields) {
let allFields = [];
for (let group of currentGroups) {
let fieldName = Object.keys(group)[0];
allFields = allFields.concat(group[fieldName]);
}
let otherFields = newFields.filter((field) => {
return !allFields.includes(field) && !excludedFields.includes(field);
});
if (otherFields.length) {
currentGroups[0].default = currentGroups[0].default.concat(otherFields);
}
return currentGroups;
};