mirror of https://github.com/rancher/ui.git
159 lines
4.6 KiB
JavaScript
159 lines
4.6 KiB
JavaScript
import Mixin from '@ember/object/mixin';
|
|
import {
|
|
get, set, computed, setProperties, observer
|
|
} from '@ember/object';
|
|
import { next } from '@ember/runloop';
|
|
import { compare as compareVersion } from 'ui/utils/parse-version';
|
|
import { stringifyAnswer } from 'shared/utils/evaluate';
|
|
import C from 'ui/utils/constants';
|
|
import { evaluate } from 'shared/utils/evaluate';
|
|
import { isEmpty } from '@ember/utils';
|
|
|
|
export default Mixin.create({
|
|
previewTabDidChange: observer('previewTab', 'previewOpen', function() {
|
|
const files = (get(this, 'selectedTemplateModel.filesAsArray') || []);
|
|
const previewTab = get(this, 'previewTab');
|
|
const found = files.findBy('name', previewTab);
|
|
|
|
if ( !found ) {
|
|
return;
|
|
}
|
|
|
|
set(this, 'decoding', true);
|
|
|
|
next(() => {
|
|
if ( !found.decoded ) {
|
|
setProperties(found, {
|
|
body: atob(found.body),
|
|
decoded: true
|
|
});
|
|
}
|
|
setProperties(this, {
|
|
selectedFileContetnt: found.body,
|
|
decoding: false
|
|
});
|
|
});
|
|
}),
|
|
|
|
templateChanged: observer('editable.selectedTemplateUrl', 'templateResource.defaultVersion', function() {
|
|
const { editable : { selectedTemplateUrl = '' } } = this;
|
|
|
|
if (!isEmpty(selectedTemplateUrl)) {
|
|
this.getTemplate.perform();
|
|
}
|
|
}),
|
|
|
|
isLonghorn: computed('templateResource.id', function() {
|
|
const { templateResource } = this;
|
|
|
|
if (templateResource && templateResource.id === 'cattle-global-data:library-longhorn') {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}),
|
|
|
|
filenames: computed('selectedTemplateModel', 'selectedTemplateModel.filesAsArray.[]', function(){
|
|
const files = get(this, 'selectedTemplateModel.filesAsArray').map( (file) => ({
|
|
label: file.name,
|
|
value: file.name
|
|
}));
|
|
|
|
files.addObject({
|
|
label: 'answers.yaml',
|
|
value: 'answers'
|
|
});
|
|
|
|
return files.sortBy('label');
|
|
}),
|
|
|
|
sortedVersions: computed('defaultUrl', 'intl', 'showDefaultVersionOption', 'templateResource.defaultVersion', 'versionsArray', function() {
|
|
const out = get(this, 'versionsArray').sort((a, b) => {
|
|
if ( a.sortVersion && b.sortVersion ) {
|
|
return compareVersion(a.sortVersion, b.sortVersion);
|
|
} else {
|
|
return compareVersion(a.version, b.version);
|
|
}
|
|
});
|
|
|
|
const def = get(this, 'templateResource.defaultVersion');
|
|
|
|
if ( get(this, 'showDefaultVersionOption') && get(this, 'defaultUrl') ) {
|
|
out.unshift({
|
|
version: get(this, 'intl').t('newCatalog.version.default', { version: def }),
|
|
link: 'default'
|
|
});
|
|
}
|
|
|
|
return out;
|
|
}),
|
|
|
|
defaultUrl: computed('templateResource.defaultVersion', 'versionLinks', function() {
|
|
const defaultVersion = get(this, 'templateResource.defaultVersion');
|
|
const versionLinks = get(this, 'versionLinks');
|
|
|
|
if ( defaultVersion && versionLinks && versionLinks[defaultVersion] ) {
|
|
return versionLinks[defaultVersion];
|
|
}
|
|
|
|
return null;
|
|
}),
|
|
|
|
answers: computed('selectedTemplateModel.allQuestions.@each.{answer,variable}', 'selectedTemplateModel.customAnswers', function() {
|
|
const out = {};
|
|
const allQuestions = (get(this, 'selectedTemplateModel.allQuestions') || []);
|
|
const filteredQuestions = allQuestions.filter((q) => evaluate(q, allQuestions));
|
|
|
|
filteredQuestions.forEach((item) => {
|
|
out[item.variable] = stringifyAnswer(item.answer);
|
|
});
|
|
|
|
const customAnswers = get(this, 'selectedTemplateModel.customAnswers') || {};
|
|
|
|
Object.keys(customAnswers).forEach((key) => {
|
|
out[key] = stringifyAnswer(customAnswers[key]);
|
|
});
|
|
|
|
return out;
|
|
}),
|
|
|
|
newExternalId: computed('selectedTemplateModel.id', function() {
|
|
return `${ C.EXTERNAL_ID.KIND_CATALOG }${ C.EXTERNAL_ID.KIND_SEPARATOR }${ get(this, 'selectedTemplateModel.id') }`;
|
|
}),
|
|
|
|
updateReadme() {
|
|
const model = get(this, 'selectedTemplateModel');
|
|
|
|
setProperties(this, {
|
|
readmeContent: null,
|
|
appReadmeContent: null,
|
|
noAppReadme: false,
|
|
});
|
|
|
|
if ( model && model.hasLink('readme') ) {
|
|
model.followLink('readme').then((response) => {
|
|
if (this.isDestroyed || this.isDestroying) {
|
|
return;
|
|
}
|
|
set(this, 'readmeContent', response);
|
|
});
|
|
}
|
|
|
|
if ( model && model.hasLink('app-readme') ) {
|
|
set(this, 'noAppReadme', false);
|
|
|
|
model.followLink('app-readme').then((response) => {
|
|
if (this.isDestroyed || this.isDestroying) {
|
|
return;
|
|
}
|
|
set(this, 'appReadmeContent', response);
|
|
if ( !response ) {
|
|
set(this, 'noAppReadme', true);
|
|
}
|
|
});
|
|
} else {
|
|
set(this, 'noAppReadme', true);
|
|
}
|
|
},
|
|
});
|