Zack Moore e6ce95acd3
Replace codemirror 6 code editor with HDS CodeEditor component (#30188)
* Completed initial replacement of editor

* fixing ts issues

* removing codemirror modifier and deps

* working on replacing the code editor

* addressing linting concerns

* cleaning up policy-form editor

* fixing linting issues

* fixing linting issues

* fixing tests

* fixing tests

* fixing tests

* fixing tests

* fixing failing tests

* cleaning up PR

* fixing tests

* remove outdated message for navigating editor

* fix linting in tests

* add changelog

* fix tests

* update naming

* remove unused lint param + name changes

* update test selector usage

* update test selector usage

* update test selector usage

* lint fixes

* replace page object selectors

* lint fix

* fix lint

* fix lint after merge

* update tests

* remove import

---------

Co-authored-by: Lane Wetmore <lane.wetmore@hashicorp.com>
2025-07-23 11:12:20 -07:00

54 lines
1.6 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import Component from '@glimmer/component';
import { action } from '@ember/object';
import { tracked } from '@glimmer/tracking';
/**
* @module KvPatchJsonForm
* @description
* This component renders one of two ways to patch a KV v2 secret (the other is using the KvPatch::Editor::Form).
*
* @example
* <KvPatch::JsonForm @onSubmit={{perform this.save}} @onCancel={{this.onCancel}} @isSaving={{this.save.isRunning}} />
*
* @param {boolean} isSaving - if true, disables the save and cancel buttons. useful if the onSubmit callback is a concurrency task
* @param {function} onCancel - called when form is canceled
* @param {function} onSubmit - called when form is saved, called with with the key value object containing patch data
* @param {object} subkeys - leaf keys of a kv v2 secret, all values (unless a nested object with more keys) return null. used for toggle that reveals codeblock of subkey structure
* @param {string} submitError - error message string from parent if submit failed
*/
export default class KvPatchJsonForm extends Component {
@tracked jsonObject;
@tracked lintingErrors;
constructor() {
super(...arguments);
// prefill JSON editor with an empty object
this.jsonObject = JSON.stringify({ '': '' }, null, 2);
}
@action
handleJson(value) {
this.lintingErrors = false;
try {
JSON.parse(value);
this.jsonObject = value;
} catch {
this.lintingErrors = true;
}
}
@action
submit(event) {
event.preventDefault();
const patchData = JSON.parse(this.jsonObject);
this.args.onSubmit(patchData);
}
}