mirror of
https://github.com/ansible/awx.git
synced 2026-01-13 02:50:02 -03:30
128 lines
4.4 KiB
JavaScript
128 lines
4.4 KiB
JavaScript
function BaseInputController (strings) {
|
|
// Default values are universal. Don't translate.
|
|
const PROMPT_ON_LAUNCH_VALUE = 'ASK';
|
|
const ENCRYPTED_VALUE = '$encrypted$';
|
|
|
|
return function extend (type, scope, element, form) {
|
|
let vm = this;
|
|
|
|
vm.strings = strings;
|
|
|
|
scope.state = scope.state || {};
|
|
|
|
scope.state._touched = false;
|
|
scope.state._required = scope.state.required || false;
|
|
scope.state._isValid = scope.state._isValid || false;
|
|
scope.state._disabled = scope.state._disabled || false;
|
|
scope.state._activeModel = '_value';
|
|
|
|
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._activeModel = '_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._activeModel = '_displayValue';
|
|
}
|
|
}
|
|
|
|
form.register(type, scope);
|
|
|
|
vm.validate = () => {
|
|
let isValid = true;
|
|
let message = '';
|
|
|
|
if (scope.state._value || scope.state._displayValue) {
|
|
scope.state._touched = true;
|
|
}
|
|
|
|
if (scope.state._required && !scope.state._value && !scope.state._displayValue) {
|
|
isValid = false;
|
|
message = vm.strings.get('message.REQUIRED_INPUT_MISSING');
|
|
} else if (scope.state._validate) {
|
|
let result = scope.state._validate(scope.state._value);
|
|
|
|
if (!result.isValid) {
|
|
isValid = false;
|
|
message = result.message || vm.strings.get('message.INVALID_INPUT');
|
|
}
|
|
}
|
|
|
|
return {
|
|
isValid,
|
|
message
|
|
};
|
|
};
|
|
|
|
vm.check = () => {
|
|
let result = vm.validate();
|
|
|
|
if (scope.state._touched || !scope.state._required) {
|
|
scope.state._rejected = !result.isValid;
|
|
scope.state._isValid = result.isValid;
|
|
scope.state._message = result.message;
|
|
|
|
form.check();
|
|
}
|
|
};
|
|
|
|
vm.toggleRevertReplace = () => {
|
|
scope.state._isBeingReplaced = !scope.state._isBeingReplaced;
|
|
|
|
if (!scope.state._isBeingReplaced) {
|
|
scope.state._buttonText = vm.strings.get('REPLACE');
|
|
scope.state._disabled = true;
|
|
scope.state._enableToggle = true;
|
|
scope.state._value = scope.state._preEditValue;
|
|
scope.state._activeModel = '_displayValue';
|
|
scope.state._placeholder = vm.strings.get('ENCRYPTED');
|
|
} else {
|
|
scope.state._buttonText = vm.strings.get('REVERT');
|
|
scope.state._disabled = false;
|
|
scope.state._enableToggle = false;
|
|
scope.state._activeModel = '_value';
|
|
scope.state._value = '';
|
|
scope.state._placeholder = '';
|
|
}
|
|
};
|
|
|
|
vm.togglePromptOnLaunch = () => {
|
|
if (scope.state._promptOnLaunch) {
|
|
scope.state._value = PROMPT_ON_LAUNCH_VALUE;
|
|
scope.state._activeModel = '_displayValue';
|
|
scope.state._disabled = true;
|
|
scope.state._enableToggle = false;
|
|
} else {
|
|
if (scope.state._isBeingReplaced === false) {
|
|
scope.state._disabled = true;
|
|
scope.state._enableToggle = true;
|
|
scope.state._value = scope.state._preEditValue;
|
|
} else {
|
|
scope.state._activeModel = '_value';
|
|
scope.state._disabled = false;
|
|
scope.state._value = '';
|
|
}
|
|
}
|
|
|
|
vm.check();
|
|
};
|
|
};
|
|
}
|
|
|
|
BaseInputController.$inject = ['ComponentsStrings'];
|
|
|
|
export default BaseInputController;
|