awx/awx/ui/client/lib/components/input/base.controller.js

121 lines
3.9 KiB
JavaScript

const REQUIRED_INPUT_MISSING_MESSAGE = 'Please enter a value.';
const DEFAULT_INVALID_INPUT_MESSAGE = 'Invalid input for this type.';
const PROMPT_ON_LAUNCH_VALUE = 'ASK';
const ENCRYPTED_VALUE = '$encrypted$';
function BaseInputController () {
return function extend (type, scope, element, form) {
let vm = this;
scope.state = scope.state || {};
scope.state._required = scope.state.required || false;
scope.state._isValid = scope.state.isValid || false;
scope.state._disabled = scope.state.disabled || false;
if (scope.state.ask_at_runtime) {
scope.state._displayPromptOnLaunch = true;
}
if (scope.state._value) {
scope.state._edit = true;
scope.state._preEditValue = scope.state._value;
if (scope.state._value === PROMPT_ON_LAUNCH_VALUE) {
scope.state._promptOnLaunch = true;
scope.state._disabled = true;
scope.state._displayValue = '';
}
if (scope.state._value === ENCRYPTED_VALUE) {
scope.state._displayRevertReplace = true;
scope.state._enableToggle = true;
scope.state._disabled = true;
scope.state._isBeingReplaced = false;
scope.state._displayValue = '';
}
}
form.register(type, scope);
vm.validate = () => {
let isValid = true;
let message = '';
if (scope.state._required && !scope.state._value) {
isValid = false;
message = REQUIRED_INPUT_MISSING_MESSAGE;
}
if (scope.state.validate) {
let result = scope.state._validate(scope.state._value);
if (!result.isValid) {
isValid = false;
message = result.message || DEFAULT_INVALID_INPUT_MESSAGE;
}
}
return {
isValid,
message
};
};
vm.check = () => {
let result = vm.validate();
if (result.isValid !== scope.state._isValid) {
scope.state._rejected = !result.isValid;
scope.state._isValid = result.isValid;
scope.state._message = result.message;
form.check();
}
console.log('check', scope.state);
};
vm.toggleRevertReplace = () => {
if (scope.state._isBeingReplaced) {
scope.state._buttonText = 'REPLACE';
scope.state._disabled = true;
scope.state._enableToggle = true;
scope.state._value = scope.state._preEditValue;
scope.state._displayValue = '';
} else {
scope.state._buttonText = 'REVERT';
scope.state._disabled = false;
scope.state._enableToggle = false;
scope.state._displayValue = '';
scope.state._value = '';
}
scope.state._isBeingReplaced = !scope.state._isBeingReplaced;
};
vm.togglePromptOnLaunch = () => {
if (scope.state._promptOnLaunch) {
scope.state._value = PROMPT_ON_LAUNCH_VALUE;
scope.state._displayValue = '';
scope.state._disabled = true;
scope.state._enableToggle = false;
} else {
scope.state._value = scope.state._preEditValue;
scope.state._displayValue = '';
if (!scope.state._isBeingReplaced) {
scope.state._disabled = true;
scope.state._enableToggle = true;
} else {
scope.state._disabled = false;
}
}
vm.check();
};
};
}
export default BaseInputController;