Files
nomad/ui/app/controllers/variables/variable/index.js
Phil Renaud 1f368ac042 Adds sort, show/hide, and copy functionality to Variable pages (#13680)
* Sortable header added to variable page

* Showhide and copyable
2022-07-11 16:43:03 -04:00

88 lines
2.0 KiB
JavaScript

import Controller from '@ember/controller';
import { set, action } from '@ember/object';
import { task } from 'ember-concurrency';
import messageForError from '../../../utils/message-from-adapter-error';
import { inject as service } from '@ember/service';
import { tracked } from '@glimmer/tracking';
export default class VariablesVariableIndexController extends Controller {
queryParams = ['view'];
@service router;
queryParams = ['sortProperty', 'sortDescending'];
@tracked sortProperty = 'key';
@tracked sortDescending = true;
get sortedKeyValues() {
const sorted = this.model.keyValues.sortBy(this.sortProperty);
return this.sortDescending ? sorted : sorted.reverse();
}
@tracked
error = null;
@tracked isDeleting = false;
@action
onDeletePrompt() {
this.isDeleting = true;
}
@action
onDeleteCancel() {
this.isDeleting = false;
}
@task(function* () {
try {
yield this.model.deleteRecord();
yield this.model.save();
if (this.model.parentFolderPath) {
this.router.transitionTo('variables.path', this.model.parentFolderPath);
} else {
this.router.transitionTo('variables');
}
// TODO: alert the user that the variable was successfully deleted
} catch (err) {
this.error = {
title: 'Could Not Delete Variable',
description: messageForError(err, 'delete secure variables'),
};
}
})
deleteVariableFile;
onDismissError() {
this.error = null;
}
//#region Code View
/**
* @type {"table" | "json"}
*/
@tracked
view = 'table';
toggleView() {
if (this.view === 'table') {
this.view = 'json';
} else {
this.view = 'table';
}
}
//#endregion Code View
get shouldShowLinkedEntities() {
return (
this.model.pathLinkedEntities?.job ||
this.model.pathLinkedEntities?.group ||
this.model.pathLinkedEntities?.task
);
}
toggleRowVisibility(kv) {
set(kv, 'isVisible', !kv.isVisible);
}
}