/** * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: MPL-2.0 */ import Service, { inject as service } from '@ember/service'; import lookupValidator from 'ember-changeset-validations'; import { Changeset as createChangeset } from 'ember-changeset'; import Changeset from 'consul-ui/utils/form/changeset'; import intentionPermissionValidator from 'consul-ui/validations/intention-permission'; import intentionPermissionHttpHeaderValidator from 'consul-ui/validations/intention-permission-http-header'; const validators = { 'intention-permission': intentionPermissionValidator, 'intention-permission-http-header': intentionPermissionHttpHeaderValidator, }; export default class ChangeService extends Service { @service('schema') schema; init() { super.init(...arguments); this._validators = new Map(); } willDestroy() { this._validators = null; } changesetFor(modelName, model, options = {}) { const validator = this.validatorFor(modelName, options); let changeset; if (validator) { let validatorFunc = validator; if (typeof validator !== 'function') { validatorFunc = lookupValidator(validator); } changeset = createChangeset(model, validatorFunc, validator, { changeset: Changeset }); } else { changeset = createChangeset(model); } return changeset; } validatorFor(modelName, options = {}) { if (!this._validators.has(modelName)) { const factory = validators[modelName]; let validator; if (typeof factory !== 'undefined') { validator = factory(this.schema); } this._validators.set(modelName, validator); } return this._validators.get(modelName); } }